gpt4 book ai didi

java - 在不停用窗口的情况下捕获 JFrame 中的所有事件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:12 26 4
gpt4 key购买 nike

我正在尝试开发类似远程桌面/VNC 客户端的东西。我有必要在客户端窗口中捕获所有事件。我使用的方法是覆盖 JFrameprocessEvent 方法:

@Override
protected void processEvent(AWTEvent e) {
...
}

但是在诸如 Windows 键或 Alt+Tab 之类的事件中,窗口将被停用:

...    
00000191 KEY_PRESSED,keyCode=524,keyText=Windows,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=91,primaryLevelUnicode=0,scancode=91,extendedKeyCode=0x20c
00000192 KEY_RELEASED,keyCode=524,keyText=Windows,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=91,primaryLevelUnicode=0,scancode=91,extendedKeyCode=0x20c
000000ce WINDOW_DEACTIVATED,opposite=null,oldState=0,newState=0
...

如何让窗口在此类事件中保持 Activity 状态?

对此,我更喜欢纯 Java 解决方案。如果没有纯 Java 解决方案,有人可以指出 JNA 解决方案(或针对该事实的任何其他解决方案)吗?

编辑 1:*解决了窗口停用的模糊术语“焦点”* 强调非纯 Java 解决方案是可以接受的

最佳答案

1.) JNA 附带了一个几乎可以满足您要求的示例:

http://java.net/projects/jna/sources/svn/content/trunk/jnalib/contrib/w32keyhook/KeyHook.java

为了阻止一个键,只需返回 1 而不是调用 CallNextHookEx - cf. MSDN documenttaion .

2.) JNativeHook允许您连接到全局事件处理中,但是现在没有办法阻止事件的传递——例如Windows 键仍会激活开始菜单。然而,它仍然值得一看,因为它的开销要少得多,并且您可以修改它(从 CallNextHookEx here 开始)以按照您想要的方式运行。不过,它是根据 GPL 许可的。

3.) 另一种简洁的方法是切换到 SWT 并使用 SWT Win32 Extensions拦截键盘事件。

关于java - 在不停用窗口的情况下捕获 JFrame 中的所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13836021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com