我希望发生这种情况:
- 启动我的java程序
- 我的 java 程序启动 notepad.exe
- 如果我在记事本中输入一个字母,我的 java 程序应该做出反应并打印出该字母
简而言之:是否可以为另一个进程创建一个关键事件侦听器?java程序不会有焦点。
如果不可能,我希望能够在我的 Java 摆动窗口和记事本进程之间改变焦点。例如:
A)我的 java 程序有焦点(小摆动窗口),我输入字母“A”
B)记事本快速获得焦点,并在那里输入字母 A(例如使用 Robot 类)
C)我的 java 程序再次获得焦点
引用为位于系统托盘中的 Java 程序创建键盘挂钩中给出的答案
所以,创建一个键盘钩子并不像看起来那么容易,java 没有提供直接的方式来与系统事件进行交互以保证安全;因为它可能会导致有关 JVM 、系统内存和 Java 框架的可移植性的严重问题。
你有 4 种方法来制作全局键盘钩子:
- 学习 JNI / JNA,我更喜欢 JNA,因为它比 JNI 容易得多,在这两种情况下你都需要处理 .dll 文件。
- 使用 JIntellitype ,正如您所说,它会产生一些问题。
- Sergei Biletnikov 的优雅解决方案在这里http://biletnikov-dev.blogspot.com/2009/09/global-hotkeys-for-java-applications_25.html
- 忽略 Java,并尝试 Autoit V3(我不是 100% 确定它,但我认为您可以将信号/事件从 Autoit 发送到您的 Java 应用程序,因此 Autoit 可以作为捕捉全局击键的桥梁)
使用数字 3,这是一个很好的教程。如果链接有 404'd 可能项目源仍然存在:gigapeta.com/dl/1917618aba749a