有没有办法获得系统范围(全局)键盘快捷方式在Java应用程序中执行操作?
任何AWT/Swing绑定?
我是JIntellitype的作者,我可以告诉你一个事实,这必须在DLL中本地完成,并从Java JNI调用,就像JIntellitype一样.这是一个未在JDK中实现的OS级别挂钩,因此必须使用JIntellitype和jxGrabKey之类的库.据我所知,还没有人为OSX写过一个.
JIntellitype是Github上的开源软件,所以如果你想知道它是如何工作的,请查看源代码
没有,但在Windows中你可以使用这个:
jintellitype
不幸的是,对于Linux和OSX我没有任何意识,这可能就是为什么它没有开箱即用的java.
如果你发现其他平台发布在这里请:)
只是为了咳嗽,你在做什么呢?
我刚刚找到https://github.com/kwhat/jnativehook
似乎是跨平台的.
这是他们用于监听按键的示例代码:
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) { GlobalScreen.unregisterNativeHook(); } } 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()); } }
检查修饰符是基于位掩码(我们都应该知道的东西,但总是忘记:-P):
boolean isAltPressed = (e.getModifiers() & NativeKeyEvent.ALT_MASK) != 0; boolean isShiftPressed = (e.getModifiers() & NativeKeyEvent.SHIFT_MASK) != 0;
这可以与KeyCode结合使用:
if (e.getKeyCode() == NativeKeyEvent.VK_2 && isShiftPressed && isAltPressed){...}
这是从这里修改的例子
您还应该修改默认的日志记录行为,否则它将垃圾邮件控制台:
// Get the logger for "org.jnativehook" and set the level to warning. Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName()); logger.setLevel(Level.WARNING); // Don't forget to disable the parent handlers. logger.setUseParentHandlers(false);
代码示例来自这里