Захват события Windows с помощью java-сервисов Windows

Я хочу зафиксировать блокировку/разблокировку/запуск/выключение/выход из системы и войти в систему через службу Windows, а затем я хочу запустить функцию для каждого события, чтобы я мог зафиксировать время, когда произошло событие.

Я хочу сделать это через службу Windows, чтобы мне не нужно было запускать программу вручную. И я хочу запустить эту программу через язык java.


person Manish Mudgal    schedule 10.04.2011    source источник


Ответы (2)


Похоже, вам нужно будет использовать JNA и написать код захвата с собственными вызовами Windows.

Существует класс java.awt.Robot. это делает обратное - имитирует события ОС, но я не знаю, как фиксировать события в чистой Java.

person Sasha O    schedule 10.04.2011

В C# это довольно просто. Я могу показать вам код на C#, затем вы можете преобразовать его в Ja.Net, если хотите использовать Java в качестве языка. (если вы действительно хотите использовать JVM, это не очень поможет).

  1. Создайте пустую службу C#.
  2. Внутри метода Main вашей программы установите для свойства CanHandleSessionChangeEvent значение true:

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        LogService logService = new LogService();
        logService.CanHandleSessionChangeEvent = true;
        ServicesToRun = new ServiceBase[] 
        { 
            logService 
        };
        ServiceBase.Run(ServicesToRun);
    }
    
  3. в реализации службы переопределить событие OnSessionChange, где вы можете сбросить информацию о входе/выходе пользователя и подключении/отключении сеанса

    protected override void OnSessionChange(SessionChangeDescription changeDescription)
    {
        EventLog.WriteEvent(
            new EventInstance(100, 0, EventLogEntryType.Information), 
            String.Format("Reason: {0}, SessionId:{1}", changeDescription.Reason, changeDescription.SessionId));
        base.OnSessionChange(changeDescription);
    }
    
  4. Зарегистрируйте сервис, запустите его и посмотрите записи в журнале событий.

person seva titov    schedule 10.04.2011