Wm keydown коды клавиш

Wm keydown коды клавиш

Виртуальные клавиши

WM_CHARTOITEM

WM_VKEYTOITEM

Если родительское окно получает сообщение WM_CHARTOITEM, параметр wParam содержит код символа, соответствующего нажатой клавише.

Если список имеет стиль LBS_HASSTRINGS, родительское окно будет получать сообщение WM_VKEYTOITEM, а если не имеет — сообщение WM_CHARTOITEM.

Параметр wParam сообщения WM_VKEYTOITEM содержит виртуальный код нажатой клавиши. Например, если пользователь выделит строку в списке и нажмет клавишу , родительское окно получит сообщение WM_VKEYTOITEM со значением параметра wParam, равным VK_RETURN. При этом оно может получить из списка выбранную строку и выполнить над ней необходимые действия.

Паpаметpы:

wParam: Опpеделяет нажатую клавишу.

lParamLo: Описатель блока списка.

lParamHi: Текущая позиция вставки.

Паpаметpы:

wParam: Опpеделяет нажатую клавишу.

lParamLo: Описатель блока списка.

lParamHi: Текущая позиция вставки.

Цифры на цифровой клавиатуре имеют коды, отличные от цифр, расположенных в верхнем ряду обычной клавиатуры. Есть только один код виртуальной клавиши для клавиш Shift. Обе клавиши Shift вырабатывают один и тот же код VK_SHIFT.

Таблица. Коды виртуальных клавиш

Имя символической константы Значение (16-ричное) Эквивалент аля мыши или клавиатуры
VK_LBUTTON Левая кнопка мыши.
VK_RBUTTON Правая кнопка мыши.
VK_CANCEL Обработка комбинации клавиш Control-Break.
VK_MBUTTON Средняя кнопка мыши (мышь с тремя кнопками) или одновременно левая и правая кнопки мыши.
VK_BACK Клавиша возврата на позицию (Backspace).
VK_TAB Клавиша Tab.
VK_CLEAR ОС Клавиша Clear.
VK_RETURN 0D Клавиша Enter.
VK_SHIFT Клавиша Shift.
VK_CONTROL Клавиша Ctrl.
VK_MENU Клавиша Alt.
VK_PAUSE Клавиша Pause.
VK_CAPITAL Клавиша Caps Lock.
VK_KANA Режим IME Капа.
VK_HANGUL IS Режим IME Hangul.
VKJUNJA Режим IME Junja.
VKJWAL Заключительный режим IME.
VK_HANJA Режим IME Hanja.
VK_KANJI Режим IME Kanji.
VK_ESCAPE IB Клавиша Esc.
VK_CONVERT 1C Преобразование IME.
VK_NONCONVERT ID Отсутствие преобразования IME.
VK_ACCEPT IE Подтверждение IME.
VK_MODECHANGE IF Запрос смены режима IME.
VK_SPACE 70 Клавиша пробела.
VK_PRIOR Клавиша PgUp.
VK_NEXT Клавиша PgDn.
VK_END Клавиша End.
VK_HOME Клавиша Ноmе.
VK_LEFT Клавиша стрелки влево.
VK_UP Клавиша стрелки вверх.
VK_RIGHT Клавиша стрелки вправо.
VK_DOWN Клавиша стрелки вниз.
VK_SELECT Клавиша Select.
VK_PRINT 2A Клавиша Print.
VK_EXECUTE Клавиша Execute.
VK_SNAPSHOT 2C Клавиша Print Screen.
VK INSERT 2D Клавиша Insert.
VK_DELETE 2E Клавиша Delete.
VK_HELP 2F Клавиша Help.
VK_0-VK_9 30-39 Клавиши 0—9.
VK_A-VK_Z 41-SA Клавиши A— Z.
VK_LWIN SB Левая клавиша Windows.
VK_RWIN SC Правая клавиша Windows.
VK_APPS SO Клавиша приложений.
VK_SLEEP SF Клавиша перевода компьютера в состояние простоя.
VK_NUMPADO Клавиша 0 цифровой клавиатуры.
VK_NUMPAD1 Клавиша 1 цифровой клавиатуры
VK_NUMPAD2 62 Клавиша 2 цифровой клавиатуры
VK_NUMPAD3 Клавиша 3 цифровой клавиатуры
VK_NUMPAD4 Клавиша 4 цифровой клавиатуры
VK_NUMPAD5 Клавиша 5 цифровой клавиатуры
VK_NUMPAD6 Клавиша 6 цифровой клавиатуры
VK_NUMPAD7 Клавиша 7 цифровой клавиатуры
VK_NUMPAD8 Клавиша 8 цифровой клавиатуры
VK_NUpAD8 Клавиша 9 цифровой клавиатуры
VK_MULTIPLY 6A Клавиша умножения.
VK ADD 6B Клавиша сложения.
VK_SEPARATOR 6C Клавиша разделителя.
VK_SUBTRACT 6D Клавиша вычитания.
УК_DЕCIMAL 6E Клавиша десятичной точки.
VK_DIVIDE 6F Клавиша деления.
VK_F1-VK_F24 70-87 Клавиша F1 — F24.
VK_NUMLOCK Клавиша Mum Lock.
VK_SCROLL Клавиша Scroll Lock.
VK_LSWFT А0 Левая клавиша Shift. Применяется только в функциях GetKeyState и GetAsyncKey State.
VK_RSHIFT A1 Правая клавиша Shift. Применяется только в функциях GetKeyState и GetAsyncKey State.
VK_LCONTROL A2 Левая клавиша Ctrl. Применяется только в функциях GetKeyState и GetAsyncKey State.
VK_RCONTROL A3 Правая клавиша Ctrl. Применяется только в функциях GetKeyState и GetAsyncKeyState.
VK_LMENU A4 Левая клавиша Alt. Применяется только в функциях GetKeyState и GetAsyncKeyState.
VK_RMENU A5 Правая клавиша Alt. Применяется только в функциях GetKeyState и GetAsyncKeyState.
VK_BROSER BACK A6 Клавиша Back браузера.
VK_BROWSER FORWARD A7 Клавиша Forward браузера.
VK_BROWSER _REFRESH A8 Клавиша Refresh браузера.
VK_BROWSER_STOP A9 Клавиша Stop браузера.
VK_BROWSER _SEARCH AA Клавиша Search браузера.
VK_BROWSER _FAVORITES AB Клавиша Favorites браузера.
VK_BROWSER _HOME AC Клавиша Ноте браузера.
VK_VOLUME _MUTE AD Клавиша Volume Mute.
VK_VOLUME _DOWN AE Клавиша Volume Down.
VK_OEM_1 BA Клавиша ";" и ":" американской стандартной клавиатуры.
VK_OEM_PLUS BB Клавиша "+" американской стандартной клавиатуры.
VK_OEM_COMMA BC Клавиша "," американской стандартной клавиатуры.
VK_OEM_MINUS BD Клавиша "-" американской стандартной клавиатуры.
VK_OEM_PERIOD BE Клавиша "." американской стандартной клавиатуры.
VK_OEM_2 BF Клавиша "/" и "?" американской стандартной клавиатуры.
VK_OEM_3 CO Клавиша """ американской стандартной клавиатуры.
VK_OEM_4 DB Клавиша "[" и " <" американской стандартной клавиатуры.
VK_OEM_5 DC Клавиша "" и "|" американской стандартной клавиатуры.
VK_OEM_6 D0 Клавиша "]" и ">" американской стандартной клавиатуры.
VK_OEM_7 DE Клавиша " " и ‘ американской стандартной клавиатуры.
VK_PACKET E7 Применяется для передачи символов Unicode в виде комбинации клавиш. Клавиша VK_PACKET представляет собой младшее слово 32-разрядного значения виртуальной клавиши, используемой для неклавиатурных методов ввода.
VK_ATTN F6 Клавиша Attn.
VK_CRSEL F7 Клавиша CrSel.
VK_EXSEL F8 Клавиша ExSel._____
VK_EREOF F9 Клавиша Erase EOF.
VK_PLAY FA Клавиша Play.
VK_ZOOM FB Клавиша Zoom
VK_PA1 FD Клавиша PA1
VK_OEM_CLEAR FE Клавиша Clear
Читайте также:  Context перевод с английского

Не нашли то, что искали? Воспользуйтесь поиском:

Работа с клавиатурой.

Каждое окно в системе устроено таким образом, что может получать сообщения при нажатии клавиш на клавиатуре. Эти сообщения имеют два типа: виртуальные коды и символьные сообщения. Для того, чтобы преобразовывать виртуальные коды клавиш в соответствующием им символьные, к окну должен быть прикреплён цикл трансляции сообщений. Если окно отображает ввод с клавиатуры, то оно должно создавать и отображать каретку для указания места появления следующего символа.

Обработка нажатия клавиш

При нажатии клавиш на клавиатуре в окно (а точнее в оконную процедуру), которое имеет фокус поступают сообщения WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, и WM_SYSKEYUP. Основное сообщение, которое система отправляет окну при нажатии клавиши — WM_KEYDOWN.

При поступлении сообщения WM_KEYDOWN, оконная процедура должна проверить виртуальный код (который содержится в параметре wParam сообщения) и решить что дальше с ним делать. Обычно приложения обрабатывают только функциональные клавиши, стрелки, а так же специальные клавиши, такие как INS, DEL, HOME, и END, то есть все клавиши кроме букв и цифр.

Следующий пример демонстрирует работу обычной оконной процедуры, получающей и обрабатывающей нажатия клавиш:

Трансляция символьных сообщений

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

Вообще, цикл сообщений использует функцию TranslateMessage для трансляции всех сообщений, а не только для клавиатуры. Однако, применение TranslateMessage к другим типам сообщений не несёт никакого эффекта, зато гарантирует корректную трансляцию ввода с клавиатуры.

Читайте также:  145828 Московский асц дти

Обработка буквенных сообщений

Если функция TranslateMessage перевела виртуальный код клавиши в буквенное значение, то оконная процедура получит одно из следующих сообщений: WM_CHAR, WM_DEADCHAR, WM_SYSCHAR, и WM_SYSDEADCHAR. По умолчанию, оконная процедура получает только сообщение WM_CHAR игнорируя при этом остальные буквенные сообщения. Функция TranslateMessage генерирует сообщение WM_CHAR если была нажата одна из следующих клавиш:

  • Любая буквенная клавиша
  • BACKSPACE
  • ENTER (возврат каретки)
  • ESC
  • SHIFT+ENTER (перевод строки)
  • TAB

При поступлении сообщения WM_CHAR, код символа содержится в параметре wParam.

Обычно, каретка (текстовый курсор) используется для отображения позиции, в которой появится следующий символ. Если окно позволяет вводить текст, то при получении фокуса, оно должно создать и отобразить каретку и наоборот, при потере фокуса, необходимо скрыть и удалить каретку. Делается это в обработчиках сообщений WM_SETFOCUS и WM_KILLFOCUS.

Отображение ввода с клавиатуры

Ниже представлен пример, который демонстрирует, как приложение может получать введённые символы с клавиатуры, отображать их в клиентской области окна, и обновлять положение текстового курсора с каждым введённым символом. Так же в примере показывается как перемещать каретку в ответ на следующие клавиши: СТРЕЛКА ВЛЕВО, СТРЕЛКА ВПРАВО, HOME, и END, а так же как подсветить выделенный текст в ответ на комбинацию клавиш SHIFT+СТРЕЛКА ВПРАВО.

В обработчике сообщения WM_CREATE оконная процедура выделяет буфер объёмом 64K для хранения ввода с клавиатуры. Так же, пример получает текущие настройки шрифта, сохраняя высоту и среднюю ширину символов. Высота и ширина используются в обработчике WM_SIZE, чтобы вычислить длину строки и максимальное количество строк в клиентской области.

В обработчике WM_SETFOCUS, оконная процедура создаёт и отображает каретку, а в обработчике WM_KILLFOCUS скрывает и удаляет её.

В обработчике WM_CHAR, отображаются символы из буфера ввода, и изменение координаты каретки. Так же оконная процедура преобразует символы табуляции в четыре последовательных пробела. Символы Backspace, перевод строки и escape генерируют звуковой сигнал (beep).

Читайте также:  Php length of array

В обработчике сообщения WM_KEYDOWN обрабатываются перемещения каретки влево, вправо, в конец (end) и в начало (home). При обработке правой стрелки, оконная процедура проверяет состояние клавиши SHIFT и, если она нажата, то выделяет символ справа от кратки при её перемещении.

Обратите внимание, что приведённый код будет работать как в Unicode, так и в ANSI кодировках.

применяется сообщение WM_KEYDOWN. Нажатие этих клавиш лучше всего обрабатывать с использованием кодов виртуальных клавиш. Для получения с клавиатуры ввода кодов ASCII, таких как буквы, числа и печатаемые символы, следует использовать сообщение WM_CHAR. Использование сообщения VM_CHAR— лучший способ работы с буквами, поскольку буквы верхнего и нижнего регистра имеют разные значения ASCII. При использовании для этой цели сообщения WM_KEYDOWNв приложении приходится проверять состояние клавиши Shift для определения того, нажата ли клавиша в верхнем или нижнем регистре. Если пользователь удерживает клавишу Alt, нажимая другую клавишу, приложение получает последовательность сообщений WM_SYSKEYDOWN, WM_SYSCHARи WM_SYSKEYUP. Эти сообщения редко приходится обрабатывать непосредственно, поскольку они обычно применяются в качестве клавиатурных оперативных клавиш.

Применение виртуальных клавиш освобождает программиста от необходимости определять, с клавиатурой какого типа работает пользователь, поскольку код виртуальной клавиши для первой функциональной клавиши всегда остается тем же самым, независимо от изготовителя или модели клавиатуры. Сообщения WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWNи WM_SYSKEYUPсодержат коды виртуальных клавиш в виде параметра wParam.

В табл. 9.3 перечислены все коды и их значения в том виде, как они определены в API Win32. Виртуальные коды для символьных и цифровых клавиш совпадают с их эквивалентами в коде ASCII (в верхнем регистре). Обратите внимание, что цифры на цифровой клавиатуре имеют коды, отличные от цифр, расположенных в верхнем ряду обычной клавиатуры. Обратите также внимание, что есть только один код виртуальной клавиши для клавиш Shift. Обе клавиши Shift вырабатывают один и тот же код VK SHIFT.

Ссылка на основную публикацию
Adblock detector