使用JNA的“全局” KeyListener
|
我正在计划在Windows下运行的Java程序的计划制定工作,该程序可以在背景的不同键runnig上映射差异\“ macros \”。问题是-如何使Java在应用程序未聚焦时监听按键。
我发现很多观点认为这是不可能的。但是我也发现Stefano在SO上写的这本书。这种解决方案对我来说还不够好,至少没有一个重要的信息。如果未按下该键,功能“ 0”将返回一个值。按键后,它会返回不同的值...如果函数在按键事件后不会返回相同的值,则可以。
这是测试的线程:
public class KeyListener extends Thread {
/**
* Constructor
*/
public KeyListener() {
super();
}
/**
* RUN method
*/
@Override
public void run() {
int x;
User32 user32 = User32.INSTANCE;
boolean res = user32.RegisterHotKey(Pointer.NULL, 1, User32.MOD_ALT | User32.MOD_CONTROL, WinKeys.VK_X);
if (!res) {
System.out.println(\"Couldn\'t register hotkey\");
}
System.out.println(\"Starting and waiting\");
while (!isInterrupted()) {
x = user32.MsgWaitForMultipleObjects(0, Pointer.NULL, true, 1000, User32.QS_HOTKEY);
if (x == 0) {
System.out.println(\"Key pressed\");
}
}
}
}
这个小程序(使用该线程)在按ALT+X
时作出反应。按下此键后,将文本“ 3”写到控制台,直到程序停止(该函数始终返回0)。在我看来,可能的解决方案是该功能的某些“复位”,因此它将再次等待按键并再次返回258
(258
==等待)。但是我不知道该怎么做。
如果有人知道如何执行此操作,或者还有其他解决方案,我将不胜感激。
没有找到相关结果
已邀请:
1 个回复
掏得透垦滩