Определите ключ уникально из сообщения WM_KEYDOWN - PullRequest
0 голосов
/ 05 сентября 2011

Я пытался использовать код виртуальной клавиши, предоставленный wParam, однако он не очень хорошо работал:

  • несколько ключей, сопоставленных с одним и тем же кодом клавиши
  • некоторые ключи быливообще не распознается
  • виртуальные клавиши, кажется, адаптированы к раскладке клавиатуры (что мне не нужно / не нужно)

Затем я увидел, что lParam даст мне скан-кодвместе с «расширенным» флагом, который, по-видимому, выдает различное значение для каждой клавиши на клавиатуре при расчете следующим образом:

value = (lParam & 0x01FF0000) >> 16;

Будет ли это значение всегда одинаковым для одной и той же клавиши на клавиатуре,даже на разных клавиатурах / системах?

1 Ответ

1 голос
/ 07 сентября 2011

Сканкоды могут отличаться для разных клавиатур.Лучше всего использовать виртуальные коды клавиш.От http://msdn.microsoft.com/en-us/library/ms646267(v=vs.85).aspx:

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

Драйвер устройства клавиатуры интерпретирует код сканирования и переводит (отображает) его вкод виртуального ключа, независимое от устройства значение, определенное системой, которое определяет назначение ключа.

...