Я хочу, чтобы это произошло:
- Запустить мою Java-программу
- Моя программа java запускает notepad.exe
- Если я наберу письмо в блокноте, моя Java-программа должна отреагировать и распечатать письмо.
Вкратце: можно ли сделать прослушиватель ключевых событий для другого процесса? У программы java не будет фокуса.
Если это невозможно, я хочу иметь возможность переключать фокус между моим окном Java Swing и процессом блокнота. Например:
A) Моя java-программа имеет фокус (маленькое окно поворота), я набираю букву «A»
B) Блокнот быстро получает фокус и там набирается буква A (например, с использованием класса Robot)
C) Моя программа Java снова в фокусе
Цитата из ответа, приведенного в Создание клавиатуры для программы Java, которая находится в системном трее
Итак, создать крючок клавиатуры не так просто, как кажется, java не предоставляет прямого способа взаимодействия с системными событиями в целях безопасности; так как это может привести к серьезным проблемам, связанным с JVM, системной памятью и переносимостью Java Framework.
у вас есть 4 способа сделать глобальные перехватчики клавиатуры:
- Изучите JNI / JNA, и я предпочитаю JNA, поскольку он намного проще, чем JNI, в обоих случаях вы будете иметь дело с файлами .dll.
- Используйте JIntellitype, который, как вы сказали, вызывает некоторые проблемы.
- элегантное решение Сергея Билетникова здесь http://biletnikov-dev.blogspot.com/2009/09/global-hotkeys-for-java-applications_25.html
- игнорируйте Java и попробуйте Autoit V3 (я не уверен на 100%, но я думаю, что вы можете отправлять сигналы / события из Autoit в свое приложение Java, поэтому Autoit будет просто работать как мост, который улавливает нажатия глобальных клавиш)
Выбираю номер 3, который является хорошим учебным пособием. Если по ссылке 404, возможно, исходный код проекта все еще открыт: gigapeta.com/dl/1917618aba749a