empr
@empr

Каким образом отличить нажатие клавиши «влево» от Num 4 с отключенным Num Lock?

Приветствую! Использую jnativehook, однако дело, пожалуй, не в инструменте.
Каким образом я могу отличить нажатие на Num 4 от нажатия на кнопку "влево" при выключенном Num Lock? Вот что пишется у меня по этому поводу в логе:


Raw code: 37
Key code: 57419
Key location: 1
Modifiers: 0

Raw code: 37
Key code: 57419
Key location: 1
Modifiers: 0


В то же время программка PassMark KeyboardTest умудряется выдавать для этой клавиши BIOS Key Code 75 вне зависимости от состояния NumLock. Или она просто проверяет, включен ли NumLock? Но этот вариант для меня наименее желателен.
  • Вопрос задан
  • 345 просмотров
Решения вопроса 2
@exenza
В моем случае jnativehook отдает одинаковае keyCode, но keyRawCode - разные (версия 2.0.2):
  • Key code: 75, raw code: 65430 без NUM LOCK
  • Key code: 75, raw code: 65460 с нажатым NUM LOCK


Пример:
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class KeyEventDemo implements NativeKeyListener {

    public static void main(String[] args) {
        try {
            GlobalScreen.registerNativeHook();
        }
        catch (NativeHookException ex) {
            System.err.println(ex.getMessage());
            System.exit(1);
        }

        GlobalScreen.addNativeKeyListener(new KeyEventDemo());
    }

    @Override
    public void nativeKeyPressed(final NativeKeyEvent nativeKeyEvent) {
        System.out.println("Key code: " + nativeKeyEvent.getKeyCode()
                + ", raw code: " + nativeKeyEvent.getRawCode());
    }

    @Override
    public void nativeKeyReleased(final NativeKeyEvent nativeKeyEvent) {}

    @Override
    public void nativeKeyTyped(final NativeKeyEvent nativeKeyEvent) {}
}

@param rawCode the hardware code associated with the native key in this event.
Ответ написан
empr
@empr Автор вопроса
Итак, проблема оказалась на стороне jNativeHook.
Баг исправлен в версии 2.1 (на данный момент релиза ещё не было, см. ночные сборки).

Выражаю огромную благодарность юзернейму exenza - без него ничего не получилось бы. Спасибо :) И оперативно отреагировавшему автору jNativeHook, разумеется!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы