Как определить активность пользователя с помощью службы Java, работающей в Windows?

моя цель-создать приложение мониторинга системы С помощью Java. Я хотел бы знать, когда пользователь делает активность на ПК с Windows. Результат будет примерно таким:--1-->

8:00 - 8:15 деятельность

9:12 - 10:29 деятельность

12:24 - 15:34 деятельность

меня не интересует никакая другая информация (какая клавиша была нажата,использованное приложение и т. д.). Только активность пользователя.

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


[Edit] дальнейшие разъяснения: меня не интересует подробности действия, только то, что пользователь переместил мышь или нажал клавишу. Мне все равно, какой ключ был нажат, пока я знаю, что ключ был нажат в приложении где-то. Я также не забочусь о любой другой деятельности, кроме нажатия клавиши и движения мыши (для например, меня не интересует, вставлен ли USB-ключ в USB-порт).

4 ответов


вы не можете контролировать активность пользователя непосредственно из службы. Служба будет работать в другой оконной станции от действий пользователей, и поэтому у нее не будет возможности подключиться к этой деятельности (за исключением драйверов фильтров, которые должны быть написаны на C).

таким образом, вам понадобится клиентское приложение, которое работает на рабочем столе пользователя и подключается к активности клавиатуры и мыши. Вы бы сделали это с помощью двух вызовов Windows API SetWindowsHookEx (для низкоуровневая клавиатура и крючки для мыши) с помощью JNI. Для мониторинга активности приложения затем потребуется обработать крючки клавиатуры и мыши для сообщений.

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


Что именно вы подразумеваете под 'активность'? Вам нужно точно определить этот термин, чтобы даже начать думать о решении, особенно когда вы говорите ,что " нажата клавиша, используется приложение и т. д.- это не деятельность.


вы можете попробовать это расширение Win32 SWT. Это позволяет установить клавиатуры и мыши крючки из java на windows.


Это напрямую не поддерживается платформой java

было бы намного проще, если бы вы изучили альтернативу .NET.

искать захват глобального пользовательского ввода в .net