Отслеживание оконных событий на уровне ОС в Java

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

  •  03-07-2019
  •  | 
  •  

Вопрос

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

В этом приложении нам нужно сделать еще кое-что, что было бы просто на Java.Однако я не программировал графический интерфейс на Java, поэтому не уверен, можно ли получить информацию об окнах уровня ОС через awt API.Возможно ли это вообще?Есть ли другой способ сделать это через JNI или для этого потребуется собственное приложение?

ПС:Я знаю, что это требование звучит немного гнусно, но я здесь только для того, чтобы определить, возможно ли это технически.Пожалуйста, не стреляйте в посланника, это была не моя идея.:)

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

Решение

Фокусные события могут сработать;вы также можете рассмотреть Windows крючки для клавиатуры и мыши.При любом из этих подходов вам потребуется создать DLL (собственный код) и использовать JNI для доступа к ней.

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

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

Вы можете поискать библиотеку для тестирования окон — некоторые из них предназначены для создания и перехвата собственных событий Win32.

Я не думаю, что это возможно с помощью AWT.У Java нет возможности получить доступ к процессам других приложений.

Я думаю, вам следует подумать об использовании другого языка.
Существуют и другие языки, такие как C++, которые предназначены для решения подобных задач :)

По сути, вы просите, чтобы ваше приложение было включено в уведомления ОС других приложений.Вероятно, вам понадобится либо приложение, которое запускает другие приложения как дочерние процессы, либо использовать что-то вроде API-интерфейса руткита для установки разрешений, превышающих те, которые предоставляются обычному приложению.

Если цель состоит в том, чтобы узнать, сколько времени пользователь взаимодействует с вашим приложением, вы можете получить некоторые приблизительные идеи, посмотрев на время ЦП, запланированное для вашего приложения, или на то, как просматривая задержки между событиями ввода-вывода и отображая их в статистике. о том, насколько активен пользователь.

В противном случае, я думаю, вы сможете связаться с некоторыми разработчиками шпионского ПО, чтобы получить то, что вам нужно.

Если вы хотите сделать это на Java и не хотите писать собственный собственный код, вы можете попробовать SWT.Я сомневаюсь, что у него есть независимые от платформы способы достижения того, что вы хотите, но вы можете покопаться в классах, специфичных для Windows, особенно в org.eclipse.swt.internal.win32.OS.

мы также можем отслеживать список задач Windows, чтобы отслеживать приложение, используемое пользователем, и в Java его просто читать с консоли, и вы также можете получить из него данные процесса, но вам понадобится небольшая тяжелая строковая обработка, потому что все данные, которые вы get будет в строковом формате, и вам нужно получить из него необходимые данные, чтобы сделать его полезным. Если вам нужна дополнительная помощь, я могу предоставить код для мониторинга и сохранения этих данных для отслеживания, но это решение не будет переопределять событие окна, оно предоставит информацию о задаче,

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