JavaNativeKeyListener不能在另一个应用程序中工作

piztneat  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(376)

我有一个javaswing应用程序,在这个应用程序中,需要使用windows、mac和linux操作系统的全局键盘输入键。为此,我决定使用jnativehook库版本:“2.1.0”,因为据说它允许您这样做。
我们的目标是当你在另一个应用程序(即魔兽争霸iii)的窗口中时,捕捉到键盘上的按键。
这段代码工作得很好,启动应用程序后,键盘、鼠标和鼠标移动按钮上的数据都显示在控制台中。
下面是它如何在notepad++中工作的示例。代码本身将在问题结束时显示如下:

但问题是,当魔兽争霸iii应用程序是集中和活跃的,没有任何事情发生时,你按下一个键,鼠标,并移动你的鼠标。我的所有活动都不会显示在应用程序控制台中。
更新:当jnativehook处于焦点时,它对整个commander窗口也不起作用。
这就是魔兽争霸iii应用程序在以管理员身份运行的窗口模式下的样子。

以下是我尝试使用的示例代码,摘自官方来源:

  1. import org.jnativehook.GlobalScreen;
  2. import org.jnativehook.NativeHookException;
  3. import org.jnativehook.keyboard.NativeKeyEvent;
  4. import org.jnativehook.keyboard.NativeKeyListener;
  5. public class GlobalKeyListenerExample implements NativeKeyListener {
  6. public void nativeKeyPressed(NativeKeyEvent e) {
  7. System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
  8. if (e.getKeyCode() == NativeKeyEvent.VC_ESCAPE) {
  9. try {
  10. GlobalScreen.unregisterNativeHook();
  11. } catch (NativeHookException nativeHookException) {
  12. nativeHookException.printStackTrace();
  13. }
  14. }
  15. }
  16. public void nativeKeyReleased(NativeKeyEvent e) {
  17. System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
  18. }
  19. public void nativeKeyTyped(NativeKeyEvent e) {
  20. System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
  21. }
  22. public static void main(String[] args) {
  23. try {
  24. GlobalScreen.registerNativeHook();
  25. } catch (NativeHookException ex) {
  26. System.err.println("There was a problem registering the native hook.");
  27. System.err.println(ex.getMessage());
  28. System.exit(1);
  29. }
  30. GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample());
  31. }
  32. }

问题:为什么jnativehook在​​魔兽争霸iii的应用是焦点?事实证明,当“总司令”窗口处于焦点时,情况也是如此。但它在记事本++中聚焦时工作。它有选择性地工作吗?
请告诉我有什么问题。我的操作系统是Windows10。
事先谢谢你的建议。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题