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 ответ
Я могу думать о двух возможностях:
Это может быть сочетание клавиш операционной системы.
Многие клавиатуры физически не способны правильно определять каждую возможную комбинацию клавиш. Точные детали различаются в зависимости от расположения печатной платы клавиатуры. Shift-A или Ctrl-X всегда будут работать, удерживая нажатой каждую клавишу одновременно, работает только на самой изящной клавиатуре, между которой есть серая область.