【问题标题】:KeyEvents for jnativehookjnativehook 的 KeyEvents
【发布时间】:2018-10-06 12:49:36
【问题描述】:

我正在尝试将jnativehook 用于全局键盘侦听器,但似乎键码不同。例如,我想检查 ALT + I 是否被按下:

addNativeKeyListener(new NativeKeyAdapter()
{
    @Override
    public void nativeKeyReleased(NativeKeyEvent keyEvent)
    {
        val modifiers = keyEvent.getModifiers();
        val altPressed = modifiers == ALT_L_MASK;
        LOGGER.log(INFO, "Modifiers: " + modifiers + " ALT: " + ALT_L_MASK);

        if (!altPressed)
        {
            return;
        }

        val keyCode = keyEvent.getKeyCode();
        LOGGER.log(INFO, "Key code: " + keyCode + " VK_I: " + VK_I);
        if (keyCode != VK_I)
        {
            return;
        }

        LOGGER.log(INFO, "Button combination recognized...");
    }
});

检查要按下的 ALT 修饰符按预期工作,但检查 I 按钮没有按预期工作:

INFO: Modifiers: 8 ALT: 8
Oct 06, 2018 2:38:44 PM com.myCompany.Main nativeKeyReleased
INFO: Key code: 23 VK_I: 73

为什么当我松开 I 按钮时,键码是23?如何在不硬编码那些看似随机的整数常量的情况下检查 I 按钮? Java 为关键代码提供了 KeyEvent 类,但它们在这里不适用,是吗?

【问题讨论】:

    标签: java windows keyboard-shortcuts keyboard-events jnativehook


    【解决方案1】:

    使用NativeKeyEvent.getKeyText() 然后与字符串按钮进行比较就可以了,但按钮必须存储为字符串,这没关系:

    public boolean isPressed(NativeKeyEvent keyEvent)
    {
        val modifiers = keyEvent.getModifiers();
        val isModifierPressed = modifiers == modifier;
    
        if (!isModifierPressed)
        {
            return false;
        }
    
        val keyCode = keyEvent.getKeyCode();
        val keyText = NativeKeyEvent.getKeyText(keyCode);
        return keyText.equals(this.keyText);
    }
    

    注意:val is from Lombok.

    【讨论】:

    • 你能举一个更具体的代码的例子吗?请
    • @VũĐạt:是的,我添加了我使用的isPressed()方法
    • HI 你可以查看图片代码imgur.com/a/LXD0VRK。我想知道修饰符来自哪里
    • modifierNativeInputEvent.ALT_L_MASK
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2022-08-16
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多