Захват события Windows с помощью служб Java окна - PullRequest
2 голосов
/ 10 апреля 2011

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

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

Ответы [ 2 ]

0 голосов
/ 10 апреля 2011

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

  1. Создать пустой сервис C #.
  2. Внутри вашей программы Основной метод задает для свойства 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. Зарегистрируйте службу, запустите ее и просмотрите записи в журнале событий.

0 голосов
/ 10 апреля 2011

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

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

...