Слушатель событий на Java без приложения фокуса? (Глобальное обнаружение нажатия клавиш)
Я искал какое-то время, и все, кажется, думают, что это невозможно, используя только Java, поэтому я дам SO выстрел;)
Есть ли способ заставить приложение Java прослушивать события (в частности, ключевые события), а другое несвязанное приложение имеет фокус окна? В моей ситуации я ищу, чтобы определить, когда пользователь нажал клавишу "Пауза" на клавиатуре, хотя мое приложение Java не имеет фокуса.
Я слышал, что некоторые люди упоминают, что единственный способ - написать код C и использовать JNI. Просто любопытно, знает ли кто-нибудь, как избежать этого? Или, если нет, по крайней мере, действительно хороший учебник по материалам c/JNI?
Спасибо
Ответы
Ответ 1
Я понимаю, что этого нельзя сделать. На базовом уровне JVM генерирует только события для событий O/S, которые он получает, и он принимает только входные события O/S, когда он имеет фокус.
Я уверен, что вы можете использовать JNI для запуска O/S для генерации событий для всех входных данных, но это будет очень зависимым от O/S.
Ответ 2
Вот лучший ответ, который я нашел:
"
Существует библиотека для управления встроенной клавиатурой и мышью:
https://github.com/kwhat/jnativehook)
"
Ответ 3
Я тоже не знаю, как обойти это. Я нашел эту ссылку на форумах Java с хорошим примером того, как настроить материал JNI и сделать глобальный обработчик клавиатуры (слишком много для добавления Вот). Это немного датировано (2005), но пример выглядит достаточно тщательно, чтобы вы начали.