Запись времени использования компьютера пользователем

Всем привет! Мне нужно написать программку которая будет запускаться вместе со входом пользователя в систему, что то вроде дополнительной аутентификации. Выскакиевает окно которое просит ввести имя, после чего сверяет его со списком существующих, и если оно присутствует в списке пишет время в файл.
Я незнаю как сделать 1 - что бы програмка записывала время выхода из системы пользователя (когда он нжал выход из системы или завершение работы) 2 - приоретет програмки что бы она не давала пользоваться ни чем(что то вроде программы вымагателя). Подскажите пожалуйста, или натолкните на мысль
Вот то что я смог сделать

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

public class Program extends JFrame {

    private JButton button = new JButton("OK");
    private JTextField input = new JTextField("", 100);
    private JLabel label = new JLabel("INPUT:");


    public Program() {
        super("AUDIT");
        this.setBounds(100, 100, 250, 100);
        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        Container container = this.getContentPane();
        container.setLayout(new GridLayout(3, 2));
        container.add(label);
        container.add(input);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                onButton(getList());
                setExtendedState(JFrame.ICONIFIED);
                setVisible(false);
            }
        });
        container.add(button);


    }

    public void onButton(List<String> list) {
        try {


            FileWriter writer = new FileWriter("data/log.txt", true);
            String str = input.getText();
            if (list.contains(str)) {
                writer.write(str + " " + LocalDateTime.now() + "\n");
                writer.flush();
                writer.close();


            } else if (!list.contains(str)) {
                JOptionPane.showMessageDialog(null, "Вас нет в списке", " Ошибка ", JOptionPane.ERROR_MESSAGE);
            }


        } catch (IOException exception) {
            System.out.println(exception.getMessage());
        }

    }

    private List<String> getList() {
        List<String> list = new ArrayList<>();
        try {
            BufferedReader reader = new BufferedReader(new FileReader("data/list"));
            while (reader.ready()) {
                list.add(reader.readLine());
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        return list;
    }


}
public class Main {
    public static void main(String[] args){
        Program program = new Program();
        program.setVisible(true);



    }
}

А чем обычный пароль пользователя ОС не подходит?)

Система какая? Windows?

Наверняка понадобится вызывать функции WinApi, и в Джаве это вроде бы сложнее, чем в С++ или даже C#.

Наверно надо разбираться с этим: https://github.com/java-native-access/jna#java-native-access-jna

https://www.google.com/search?q=winapi+detect+logout

Вообще это ж есть в системных логах (Event Viewer, …).

Что-нибудь типа Ctrl+Alt+Del наверно сложно заблокировать.

Ну и при желании продвинутый пользователь просто с LiveCD загрузится и уберет программу или посмотрит что ему нужно )

А зачем мудрить так сложно? Можно вообще без программирования, любая бабка справится :slight_smile: Запускаем диск Hirens и смотрим километраж пробега, например 1 час 32мин. Всё, и начинаем отсчёт вручную :slight_smile:

Да, по пользователям это не даст, увы.

Непонятно как это поможет :thinking: Тогда уж и в винде есть в диспетчере задач.

Ну например, я купил новый жд, запущу cd с этим Hirens и перехожу в раздел Здоровье ЖД. И смотрю - температура 34С, пробег 0минут. После разметки и форматирования идёт отсчет времени. Хотя… на новом диске время не покажет вроде, только после форматирования. Я просто подкинул идею, вдруг пригодится.

Так а Hirens тут причем?) Разве что если никакой ОС на компе нет, а так для любой ОС включая винду есть утилиты для просмотра инфы о диске (CrystalDiskInfo, …).

Показывается время работы диска (то есть по сути время нахождения во включенном компе), форматирование не причем.
https://en.wikipedia.org/wiki/Power-on_hours


Ну и в теме же речь не про диски, а про сессии пользователей ОС.

Но да, я бы наверно не велосипедил запись этого времени, а брал бы из логов ОС когда нужно.

Не совсем верный подсчет получится…
Если настройки дисков в ОС по умолчанию, тогда по истечению определенного времени простоя (диска) отключается питание двигателя. И возобновляется не ранее следующего обращения к диску каким нибудь процессом.

Да, это может быть учитывается, не в курсе.