C# MouseKeyHook: некоторые комбинации клавиш и модификаторов не работают

Я работал с пакетом 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, numpad и numbar), поэтому было бы неплохо узнать, почему это происходит.

1 ответ

Решение

Я могу думать о двух возможностях:

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

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)

Другие вопросы по тегам