我希望这种情况发生:
简而言之:是否可以为另一个进程创建一个关键事件监听器? java程序没有焦点。
如果不可能,我希望能够在我的Java swing窗口和记事本过程之间改变焦点。例如:
A)我的java程序有焦点(小摆动窗口),我输入字母“A”
B)记事本快速获得焦点并在那里输入字母A(例如使用Robot类)
C)我的java程序再次获得关注
引用Creating a keyboard hook for a Java program that sits in the System Tray
中给出的答案所以,创建一个键盘钩并不像它看起来那么容易,为了安全起见,java没有提供与系统事件交互的直接方法;因为它可能导致有关JVM,系统内存和Java Framework可移植性的严重问题。
你有四种方法来制作全局键盘钩子:
使用数字3,这是一个很好的教程。如果链接有404'd,那么项目源可能仍在运行:gigapeta.com/dl/1917618aba749a
答案 0 :(得分:2)
使用您提供的解决方案#1:
学习JNI / JNA,我更喜欢JNA,因为它比JNI容易得多,在这两种情况下你都应该处理.dll文件。
你应该看看这个stackoverflow线程:
有一个演示JNA密钥钩子的copy / pastable代码。您需要从http://jna.java.net/下载JNA依赖项才能使示例正常工作。你甚至不需要摆弄愚蠢的DLL。
此外,您可能想尝试使用此库。虽然我没有使用它的经验,但它在我的谷歌搜索中出现了“java keyboard hook”。它似乎完成了拦截键击的目标:
http://code.google.com/p/jnativehook/
请注意,您需要一些额外的本机代码才能查看当前“活动窗口”的内容。如果活动窗口与“Notepad.exe”匹配,则应记录本机键事件。
祝你好运!