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

StackOverflow https://stackoverflow.com/questions/667233

Вопрос

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

8:00 - 8:15 активность

9:12 - 10:29 активность

12:24 - 15:34 активность

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

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


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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top