Ключевые события для jnativehook - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь использовать 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

Почему код клавиши 23 появляется, когда я отпускаю кнопку I ?Как проверить кнопку I без жесткого кодирования этих, казалось бы, случайных целочисленных констант?Java предлагает класс KeyEvent для кодов клавиш, но они здесь не применимы, не так ли?

1 Ответ

0 голосов
/ 07 октября 2018

Использование 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 от Lombok.

...