Прослушиватель событий в Java без приложения с фокусом? (Глобальное обнаружение нажатия клавиш)

Я искал некоторое время, и все, кажется, думают, что это невозможно, используя только Java, поэтому я дам так выстрел ;)

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

Я слышал, что некоторые люди упоминают что единственный способ-написать код C и использовать JNI. Просто любопытно, знает ли кто-нибудь способ избежать этого? Или, если нет, по крайней мере, действительно хороший учебник по c/JNI?

спасибо

3 ответов


насколько я понимаю,это невозможно. На фундаментальном уровне JVM генерирует события только для событий O/S, которые он получает, и получает только события ввода O / S, когда у него есть фокус.

Я уверен, что вы может используйте JNI для запуска O/S для генерации событий для всех входных данных, но это будет очень зависеть от O / S.


вот лучший ответ, который я нашел:

" Есть библиотека для обработки родной клавиатуры и мыши : https://github.com/kwhat/jnativehook) "


Я тоже не знаю, как это обойти. Я нашел эта ссылка на форумах Java С хорошим примером того, как настроить материал JNI и сделать глобальный обработчик клавиатуры (слишком много, чтобы добавить здесь). Это немного датировано (2005), но пример выглядит достаточно тщательным, чтобы вы начали.