СЦЕНАРИЙ
Я написал простой метод, который действует как оболочка функции PostMessage для отправки нажатий клавиш в неактивное окно. Этот метод принимает код виртуальной клавиши в качестве одного из параметров.
ПРОБЛЕМА
Теоретически, клавиши-модификаторы и расширенные ключи не могут быть отправлены через эту функцию (как прокомментировали многие профессиональные программисты, например этот комментарий от @Hans Passant), поэтому Я хотел бы программно определить, относится ли аргумент кода виртуальной клавиши, который получает мой метод, к «нормальному» ключу, ключу-модификатору или расширенному ключу, таким образом я бы смог обработать эти два последних типа ключа с помощью keybd_event или Функция SendInput вместо PostMessage .
Вопрос
Как этого добиться в C # или VB.NET? Я всегда мог написать маленькое if или switch , чтобы обнаружить клавиши-модификаторы, потому что их всего несколько, но я не могу найти любая функция Win32, которая может сказать мне, является ли код виртуальной клавиши расширенным ключом или нет.
Если честно, я не знаю точно, что означает "расширенный" ключ, единственная информация, которую я нашел об этой терминологии, находится на WM_KEYDOWN / WM_KEYUP документах, где это говорит что-то очень поверхностно:
расширенная клавиша, такая как правая клавиша ALT и CTRL, которые появляются
на улучшенной 101- или 102-клавишной клавиатуре.