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

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

Вопрос

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

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

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

Спасибо

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

Решение

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

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

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

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

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

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

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