当前位置:  开发笔记 > 编程语言 > 正文

Java系统范围的键盘快捷方式

如何解决《Java系统范围的键盘快捷方式》经验,为你挑选了3个好方法。

有没有办法获得系统范围(全局)键盘快捷方式在Java应用程序中执行操作?

任何AWT/Swing绑定?



1> Melloware..:

我是JIntellitype的作者,我可以告诉你一个事实,这必须在DLL中本地完成,并从Java JNI调用,就像JIntellitype一样.这是一个未在JDK中实现的OS级别挂钩,因此必须使用JIntellitype和jxGrabKey之类的库.据我所知,还没有人为OSX写过一个.

JIntellitype是Github上的开源软件,所以如果你想知道它是如何工作的,请查看源代码



2> OscarRyz..:

没有,但在Windows中你可以使用这个:

jintellitype

不幸的是,对于Linux和OSX我没有任何意识,这可能就是为什么它没有开箱即用的java.

如果你发现其他平台发布在这里请:)

只是为了咳嗽,你在做什么呢?



3> dermoritz..:

我刚刚找到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);

代码示例来自这里

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有