Как я могу использовать 1x сканкодов в качестве аргумента в SendInput

#c #.net #sendinput #interopservices #scancodes

#c #.net #отправляющий ввод #службы взаимодействия #сканкоды

Вопрос:

Я использую SendInput() (используя службы взаимодействия, C#) со сканкодами в качестве аргумента. Однако мне не удается отправлять комбинации с помощью R-ALT. Я использую Mac с Bootcamp, и R-ALT scancode зарегистрирован как 1×38 (R-ALT L-Control), Но я не могу использовать 138 (1×38?) в качестве аргумента scancode (ushort/int).

Сообщение об ошибке просто «Имя x38 не существует в текущем контексте».

Как правильно использовать сканкоды, такие как 138, в качестве аргумента в SendInput()?

Комментарии:

1. Правый Alt-это расширенный ключ, сканирующий код 0xE0 0x38. Поэтому установите wScan в 0x38 (не x38), dwFlags в KEYEVENTF_EXTENDEDKEY, чтобы указать, что он ожидает префикс 0xE0.

2. Спасибо @HansPassant, он работает для синтеза расширенной комбинации клавиш. Моя проблема сейчас в том, что я не понимаю, как правильно освободить расширенный ключ. Ранее я отправил 4 клавиши, например, shift keydown, 6 клавиш, 6 клавиш, shift keyup (имитация»amp;»), но при смене клавиши на расширенную клавишу клавиша нажимается до перезагрузки. Есть идеи?

3. Я бы предположил, что вы забыли включить оба флага, установите dwFlags в KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP