Как определить наличие цифровой клавиатуры и как получить код сканирования для клавиши ввода цифровой клавиатуры? - PullRequest
0 голосов
/ 04 июля 2018

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

По данным Microsoft:

Код сканирования - это значение, которое аппаратное обеспечение клавиатуры генерирует при пользователь нажимает клавишу. Это зависящее от устройства значение, которое идентифицирует клавиша нажата, в отличие от символа, представленного клавишей. Приложение обычно игнорирует коды сканирования. Вместо этого он использует независимые от устройства коды виртуальных клавиш для интерпретации сообщений нажатия клавиш.

(источник)

Я знаю, что на моей клавиатуре это 0x9C (156), но это гарантировано для всех клавиатур.

Я не могу использовать MapVirtualKey() с VK_RETURN и MAPVK_VK_TO_VSC, поскольку это всегда возвращает код сканирования для первичной клавиши возврата в центре клавиатуры.

Как я могу получить эту информацию без какого-либо вмешательства со стороны пользователя?

Мой язык - C / C ++, и только для Win32.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Андерс делает хорошее замечание - я не знаю, как определить, присутствует ли эта клавиша на одной из клавиатур в какой-либо конкретной системе. Также не забывайте об экранной клавиатуре и сенсорных устройствах в целом.

Почему бы просто не связать свою функцию с обеими клавишами, независимо? У вас есть веская причина не сделать это?

0 голосов
/ 04 июля 2018

Код сканирования зависит от аппаратного обеспечения, он может не совпадать в другой системе. Может быть несколько кодов сканирования, которые сопоставляются с виртуальным ключом. Виртуальные ключи должны быть несколько общими и не привязанными к оборудованию.

Вы можете определить разницу в WM_KEYDOWN и WM_KEYUP; WPARAM равно VK_RETURN, и бит 24 устанавливается в LPARAM, когда используется клавиша Enter на цифровой клавиатуре:

Указывает, является ли клавиша расширенной клавишей, например правой клавишей ALT и CTRL, которая появляется на улучшенной клавиатуре с 101 или 102 клавишами. Значение равно 1, если это расширенный ключ; в противном случае это 0.

GetKeyboardType может рассказать вам некоторую информацию о «клавиатуре», но поскольку в наши дни может быть подключено более одной клавиатуры, вам придется углубиться, чтобы выяснить, есть ли какие-либо клавиатуры, которые имеют свойства, которые вы ищете. Возможно, SetupAPI знает.

...