Java NativeKeyListener不';不能在另一个应用程序中工作
我有一个JavaSwing应用程序,在这个应用程序中,需要为Windows、Mac和Linux操作系统使用全局键盘输入键。为此,我决定使用“2.1.0”版本,因为据说它允许您这样做 目标是在另一个应用程序(即魔兽争霸III的窗口中,捕捉键盘上的按键 这段代码工作得很好,启动应用程序后,键盘、鼠标和鼠标移动按钮上的数据显示在控制台中 下面是它如何在Notepad++中工作的示例。问题结束时,代码本身将显示在下面: 但问题是,当魔兽争霸III应用程序处于聚焦状态且处于活动状态时,当您按键、鼠标并移动鼠标时,什么都不会发生。我的所有活动都不会显示在应用程序控制台中 更新:jnativehook在处于焦点状态时,也不适用于Total Commander窗口 这就是魔兽争霸III应用程序在以管理员身份运行的窗口模式下的外观。 以下是我尝试使用的示例代码,摘自: 问题:为什么jnativehook在魔兽争霸III应用程序受到关注?事实证明,当“总司令”窗口处于焦点位置时,情况也是如此。但当它处于焦点时,它在Notepad++中工作。它是否有选择性地工作 请告诉我有什么问题。我的操作系统是Windows10Java NativeKeyListener不';不能在另一个应用程序中工作,java,swing,java-native-interface,jna,jnativehook,Java,Swing,Java Native Interface,Jna,Jnativehook,我有一个JavaSwing应用程序,在这个应用程序中,需要为Windows、Mac和Linux操作系统使用全局键盘输入键。为此,我决定使用“2.1.0”版本,因为据说它允许您这样做 目标是在另一个应用程序(即魔兽争霸III的窗口中,捕捉键盘上的按键 这段代码工作得很好,启动应用程序后,键盘、鼠标和鼠标移动按钮上的数据显示在控制台中 下面是它如何在Notepad++中工作的示例。问题结束时,代码本身将显示在下面: 但问题是,当魔兽争霸III应用程序处于聚焦状态且处于活动状态时,当您按键、鼠标并移
提前感谢您的建议。请不要发布问题的副本。编辑原始的已关闭问题,以便可以重新打开。@DanielWiddis抱歉,我是新来的。我已经删除了旧问题。这可能是权限问题吗?谁是魔兽争霸流程的所有者?在魔兽争霸密钥绑定优先的情况下,是否存在重复密钥绑定的可能性?@DanielWiddis单击JFrame中的(“玩魔兽争霸III”)按钮后,war3.exe(魔兽争霸III)进程开始。此进程启动时没有挂钩。这是很难复制的,因为不是每个人都安装了这个游戏。但是你可以试着用Total Commander复制它。我的意思是在运行代码后,打开Total Commander和keyhook在Total Commander处于焦点时将无法工作。我甚至不知道现在该怎么办。我读到有必要使用User32.LowLevelKeyboardProc()来实现低级别全局密钥侦听器,而不管哪个应用程序处于焦点位置
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
public class GlobalKeyListenerExample implements NativeKeyListener {
public void nativeKeyPressed(NativeKeyEvent e) {
System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
if (e.getKeyCode() == NativeKeyEvent.VC_ESCAPE) {
try {
GlobalScreen.unregisterNativeHook();
} catch (NativeHookException nativeHookException) {
nativeHookException.printStackTrace();
}
}
}
public void nativeKeyReleased(NativeKeyEvent e) {
System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
}
public void nativeKeyTyped(NativeKeyEvent e) {
System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
}
public static void main(String[] args) {
try {
GlobalScreen.registerNativeHook();
} catch (NativeHookException ex) {
System.err.println("There was a problem registering the native hook.");
System.err.println(ex.getMessage());
System.exit(1);
}
GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample());
}
}