Каков правильный способ преобразования сообщения от SetWindowsHookEx
с WH_KEYBOARD_LL
в полезное представление нажатой клавиши?Правильная логика для интерпретации SetWindowsHookEx/WH_KEYBOARD_LL
Я знаю, что это, скорее всего, связано с пониманием сопоставлений локальной клавиатуры. (NB: Я только учитывая при нажатии клавиши, не тогда, когда она будет выпущена для простоты)
Грубо говоря там, кажется, три сценария:
- Специальная клавиша нажата (Ctrl/Бегство/Shift/Alt)
- Стандартный ключ нажат (
A-Z
,0-9
и т.д ... Обратите внимание, чтоa
иA
как читатьA
) - Некоторые трудно определить случаи, как цифровая клавиатура и F1 - F12
Специальные клавиши могут быть рассмотрены по мере необходимости и есть некоторые полезные поиски в System.Windows.Forms.Keys
, но если бы я должен был сделать (по Великобритании английской клавиатуры) восклицательный знак, она определяется как Shift-внизсдвиг вверх
Поскольку я перекинув на слишком низком уровне (я считаю), чтобы получить коды после того, как они прошли через слой клавиатуры «преобразование», я антикварная вещь нас, как бы я правильно их интерпретировал.
Относительно того, почему я это делаю. Это началось как способ предоставить удобные ярлыки для медиаплеера, который я написал, который будет работать где угодно, даже внутри игр (некоторые игры, похоже, перехватывают нажатия клавиш и предотвращают их распространение в ОС). У меня на самом деле достаточно для того, что мне нужно, если только я использую приложение (только вероятный пользователь), но мое любопытство задевает насчет того, как я могу принять это дальше, если захочу.
Проверьте функцию «ToAsciiEx». –
Будет ли [RegisterHotKey] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309.aspx) предоставить функциональность, которую вы ищете, или это не очень хорошо справится с играми/DirectInput? – IInspectable
Спасибо за предложение @Tim, это на самом деле я начал. К сожалению, с этой страницы «RegisterHotKey терпит неудачу, если нажатые клавиши для горячей клавиши уже зарегистрированы другой горячей клавишей». И некоторые игры, похоже, используют эту технику (или, по крайней мере, используют аналогичный метод, который также блокирует его). Двигатель источника IIRC Valve делает это. Я согласен, что это облегчит жизнь. – Basic