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

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

8: 00 - 8:15 занятие

9: 12 - 10:29 занятие

12: 24 - 15:34 занятие

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

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


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

Ответы [ 4 ]

2 голосов
/ 23 марта 2009

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

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

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

1 голос
/ 11 мая 2009

Вы можете попробовать это SWT Win32 Extension . Это позволяет вам устанавливать хуки клавиатуры и мыши из Java на Windows.

1 голос
/ 20 марта 2009

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

0 голосов
/ 20 марта 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...