Определите, принадлежит ли код виртуального ключа к расширенному ключу или ключу-модификатору в .NET - PullRequest
0 голосов
/ 12 января 2019

СЦЕНАРИЙ

Я написал простой метод, который действует как оболочка функции PostMessage для отправки нажатий клавиш в неактивное окно. Этот метод принимает код виртуальной клавиши в качестве одного из параметров.

ПРОБЛЕМА

Теоретически, клавиши-модификаторы и расширенные ключи не могут быть отправлены через эту функцию (как прокомментировали многие профессиональные программисты, например этот комментарий от @Hans Passant), поэтому Я хотел бы программно определить, относится ли аргумент кода виртуальной клавиши, который получает мой метод, к «нормальному» ключу, ключу-модификатору или расширенному ключу, таким образом я бы смог обработать эти два последних типа ключа с помощью keybd_event или Функция SendInput вместо PostMessage .

Вопрос

Как этого добиться в C # или VB.NET? Я всегда мог написать маленькое if или switch , чтобы обнаружить клавиши-модификаторы, потому что их всего несколько, но я не могу найти любая функция Win32, которая может сказать мне, является ли код виртуальной клавиши расширенным ключом или нет.

Если честно, я не знаю точно, что означает "расширенный" ключ, единственная информация, которую я нашел об этой терминологии, находится на WM_KEYDOWN / WM_KEYUP документах, где это говорит что-то очень поверхностно:

расширенная клавиша, такая как правая клавиша ALT и CTRL, которые появляются на улучшенной 101- или 102-клавишной клавиатуре.

1 Ответ

0 голосов
/ 19 марта 2019

AFAIK, клавиши-модификаторы на клавиатурах ПК с константами VK - это клавиши Control, Alt, Shift и Windows.

Расширенные ключи нигде не документированы должным образом, но тестирование подтверждает, что, кроме перечисленных здесь :

Клавиши ALT и CTRL на правой стороне клавиатуры; ИНС, DEL, HOME, END, PAGE UP, PAGE DOWN и клавиши со стрелками в кластерах для слева от цифровой клавиатуры; клавиша NUM LOCK; перерыв Клавиша (CTRL + PAUSE); клавиша PRINT SCRN; и разделить (/) и ENTER клавиши на цифровой клавиатуре

это VK_APPS, VK_LWIN, VK_RWIN, VK_BROWSER_*, VK_VOLUME_*, VK_MEDIA_* и VK_LAUNCH_*.

...