Прослушиватель событий на Java без фокуса на приложении?(Глобальное обнаружение нажатия клавиш)
-
03-07-2019 - |
Вопрос
Я искал некоторое время, и все, кажется, думают, что это невозможно, используя только Java, поэтому я попробую ТАК;)
Есть ли способ заставить мое Java-приложение прослушивать события (в частности, ключевые события), в то время как другое несвязанное приложение имеет фокус окна?В моей ситуации я хочу определить, когда пользователь нажал клавишу «Пауза» на клавиатуре, даже если мое Java-приложение не имеет фокуса.
Я слышал, как некоторые люди упоминали, что единственный способ — написать код на C и использовать JNI.Просто интересно, знает ли кто-нибудь способ избежать этого?Или, если нет, то хотя бы действительно хороший учебник по c/JNI?
Спасибо
Решение
Я так понимаю, этого сделать нельзя.На фундаментальном уровне JVM генерирует события только для событий O/S, которые она получает, и получает входные события O/S только тогда, когда у нее есть фокус.
Я уверен, что ты мог используйте JNI, чтобы активировать операционную систему для генерации событий для всех входных данных, но это будет очень зависеть от операционной системы.
Другие советы
Вот лучший ответ, который я нашел:
"Есть библиотека для обработки собственной клавиатуры и управления мышью:https://github.com/kwhat/jnativehook) "
Я тоже не знаю, как это обойти.я нашел эта ссылка на форумах Java с хорошим примером того, как настроить JNI и создать глобальный обработчик клавиатуры (слишком много, чтобы добавить сюда).Он немного устаревший (2005 г.), но пример выглядит достаточно подробным, чтобы вы могли начать работу.