C # MouseKeyHook: некоторые комбинации клавиш и модификаторов не работают - PullRequest
0 голосов
/ 22 ноября 2018

Я работал с пакетом MouseKeyHook NuGet, и он отлично работает для сбора большей части входных данных.Но у меня возникают некоторые проблемы с перехватом определенных комбинаций клавиш + модификаторов.

public static class InputHandler
{
    private static IKeyboardMouseEvents _GlobalHook;
    public static IKeyboardMouseEvents GlobalHook => _GlobalHook;

    public static void Subscribe()
    {
        _GlobalHook = Hook.AppEvents();
        _GlobalHook.KeyDown += KeyDown;
    }

    private static void KeyDown(object sender, KeyEventArgs e)
    {
        Console.WriteLine("Output: " + e.Modifiers + " + " + e.KeyCode);
    }
}


Давайте попробуем нажать несколько клавиш и посмотреть, что получится:

Key: A
> Output: None + A

Key: Shift & A
> Output: Shift + A

Key: Shift & Control & Alt & A
> Output: Shift, Control, Alt + A

Фантастика!Именно то, что вы ожидаете.А как насчет цифровой клавиатуры в верхней части клавиатуры?

Key: 1
> Output: None + D1

Key: Shift & Control & Alt & 3
> Output: Shift, Control, Alt + D3

Хорошо, опять же, именно то, что вы ожидаете.Нет проблем ... А как же клавиша 0?

Key: 0
> Output: None + D0

Key: Shift & 0
> Output: Shift + D0

Key: Shift & Control & 0
> Output: Shift, Control + ShiftKey    <---- What????

Key: Shift & Control & Alt & 0
> Output: Shift, Control, Alt + D0


Так что здесь происходит?Почему событие не срабатывает должным образом при нажатии точно D0 + Control + Shift?Также стоит отметить, что это событие KeyDown, поэтому вывод повторяется до тех пор, пока вы удерживаете клавиши нажатыми, но когда вывод этого «ShiftKey» печатается, он никогда не повторяется, что ... странно.

В худшем случае, я всегда могу переключить свои привязки, но я заметил эту странность по ряду различных комбинаций клавиш + модификаторов (в основном, клавиш oem, цифровой клавиатуры и цифровой клавиатуры), поэтому было бы неплохо узнать, почему это происходит.

1 Ответ

0 голосов
/ 22 ноября 2018

Я могу представить себе две возможности:

Это может быть комбинация клавиш операционной системы.

https://support.microsoft.com/en-au/help/967893/input-method-editor-keyboard-shortcut-ctrl-shift-0-switches-the-input

Многие клавиатуры физически не способны правильно определять каждоевозможная комбинация клавиш.Точные детали варьируются в зависимости от расположения печатной платы клавиатуры.Shift-A или Ctrl-X всегда будут работать, удерживая нажатой каждую клавишу одновременно, можно работать только на самых изящных клавиатурах, между которыми есть серая область.

https://en.wikipedia.org/wiki/Rollover_(key)#Key_jamming_and_ghosting

...