как мне расширить коды виртуальных ключей в Windows API (Win32)?

#windows #winapi #keycode #virtual-keyboard #scancodes

#Windows #winapi #код ключа #виртуальная клавиатура #сканкоды

Вопрос:

Я хочу создать новый код виртуального ключа в Windows API, которому я могу назначать коды сканирования и считывать их с помощью GetKeyState, но я не могу найти способ расширить перечисление.

Я пробовал использовать «неизвестные» коды виртуальных клавиш в sharpkeys, но некоторые приложения в конечном итоге регистрируют эти виртуальные клавиши, что делает мои привязки устаревшими.

https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

Ответ №1:

Эти коды ключей — это просто #define s, а не перечисление.

Конечно, вы можете определить свои собственные. Но как вы планируете их использовать? Что сделало бы их virtual key ? Вы пишете драйвер клавиатуры?

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

1. Спасибо за ваш ответ. Я пишу программу для клавиш мыши в Rust, и мне нужно, чтобы цифровая клавиатура не вводила значения по умолчанию, но мне все равно нужно обрабатывать нажатие клавиши. использование системы сообщений о событиях не позволяет мне получить опрокидывание n ключей, поскольку по какой-то причине я могу обрабатывать только одно сообщение за раз. Я добился успеха, используя неиспользуемые привязки клавиш и win32 api getkeystate для виртуальных ключей, но некоторые приложения, отличные от UWP, по какой-то причине пытаются использовать эти привязки, а затем моя клавиша мыши выходит из строя.

2. Вы пробовали NumLock key?

3. Я хочу иметь возможность переключаться в режим стрелки с помощью numlock. Также это приведет к перемещению стрелок с помощью клавиш мыши.

4. @BotsFab » Мне нужно, чтобы цифровая клавиатура не вводила значения по умолчанию, но мне все равно нужно обрабатывать нажатие клавиши » — используйте WH_KEYBOARD/_LL перехват via SetWindowsHookEx() для обнаружения и отмены нажатий клавиш, прежде чем Windows отправит их в приложения для обработки.

5. Спасибо, я вернусь к этой попытке и рассмотрю ее дальше. Это более низкий уровень, чем GetKeyState? Я пробовал что-то подобное (почти точно), но не получаю n опрокидывания клавиш (одновременные нажатия клавиш), если я не использую GetKeyState.

Ответ №2:

Вы не можете определить новые коды виртуальных ключей. Это фиксированные значения, определенные внутри операционной системы, которым должны следовать драйверы клавиатуры. Только Microsoft может определять новые коды ключей.