Коды виртуальных клавиш
Нижеследующая таблица показывает названия именованных констант, шестнадцатеричные значения, и эквиваленты мыши или клавиатуры для кодов виртуальных клавиш, используемых системой. Коды перечисляются в нарастающем порядке.
| Константа | Значение | Предназначение |
| VK_LBUTTON | 01 | Левая кнопка мыши. |
| VK_RBUTTON | 02 | Правая кнопка мыши. |
| VK_CANCEL | 03 | Обработка комбинации клавиш Control-Break. |
| VK_MBUTTON | 04 | Средняя кнопка мыши (трехкнопочная мышь). |
| VK_XBUTTON1 | 05 | Windows 2000/XP: кнопка X1 мыши. |
| VK_XBUTTON2 | 06 | Windows 2000/XP: кнопка X2 мыши. |
| — | 07 | Не определен. |
| VK_BACK | 08 | Клавиша BACKSPACE (возврата на позицию). |
| VK_TAB | 09 | Клавиша TAB (табуляции). |
| — | 0A-0B | Зарезервированы. |
| VK_CLEAR | 0C | Клавиша CLEAR. |
| VK_RETURN | 0D | Клавиша ENTER (ввод). |
| — | 0E-0F | Не определены. |
| VK_SHIFT | 10 | Клавиша SHIFT (вспомогательная). |
| VK_CONTROL | 11 | Клавиша CTRL (управления). |
| VK_MENU | 12 | Клавиша ALT (навигации по меню). |
| VK_PAUSE | 13 | Клавиша PAUSE (останов работы). |
| VK_CAPITAL | 14 | Клавиша CAPS LOCK (переключатель регистра символов). |
| VK_KANA | 15 | Редактор метода ввода (IME)) режим Kana. |
| VK_HANGUEL | 15 | Редактор метода ввода (IME) режим Hanguel (поддерживается для совместимости; используется VK_HANGUL ). |
| VK_HANGUL | 15 | Редактор метода ввода (IME) режим Hangul. |
| — | 16 | Не определен. |
| VK_JUNJA | 17 | Редактор метода ввода (IME) режим Junja. |
| VK_FINAL | 18 | Редактор метода ввода (IME) заключительный режим. |
| VK_HANJA | 19 | Редактор метода ввода (IME) режим Hanja. |
| VK_KANJI | Редактор метода ввода (IME) режим Kanji. | |
| — | 1A | Не определен. |
| VK_ESCAPE | 1B | Клавиша ESC (отмены). |
| VK_CONVERT | 1C | Преобразованный IME. |
| VK_NONCONVERT | 1D | Не преобразованный IME. |
| VK_ACCEPT | 1E | Принятый IME. |
| VK_MODECHANGE | 1F | Запрос изменить режим IME. |
| VK_SPACE | 20 | Клавиша SPACEBAR (пробел). |
| VK_PRIOR | 21 | Клавиша PAGE UP (страницей выше). |
| VK_NEXT | 22 | Клавиша PAGE DOWN (страницей ниже). |
| VK_END | 23 | Клавиша END (в конец текста). |
| VK_HOME | 24 | Клавиша HOME (в начало текста). |
| VK_LEFT | 25 | Клавиша LEFT ARROW (стрелка влево). |
| VK_UP | 26 | Клавиша UP ARROW (стрелка вверх). |
| VK_RIGHT | 27 | Клавиша RIGHT ARROW (стрелка вправо). |
| VK_DOWN | 28 | Клавиша DOWN ARROW (стрелка вниз). |
| VK_SELECT | 29 | Клавиша SELECT (выбор). |
| VK_PRINT | 2A | Клавиша PRINT (печать). |
| VK_EXECUTE | 2B | Клавиша EXECUTE (исполнить). |
| VK_SNAPSHOT | 2C | Клавиша PRINT SCREEN (печать экрана). |
| VK_INSERT | 2D | Клавиша INS (вставить). |
| VK_DELETE | 2E | Клавиша DEL (удалить). |
| VK_HELP | 2F | Клавиша HELP (справка). |
| 30 | Клавиша 0. | |
| 31 | Клавиша 1. | |
| 32 | Клавиша 2. | |
| 33 | Клавиша 3 | |
| 34 | Клавиша 4. | |
| 35 | Клавиша 5. | |
| 36 | Клавиша 6. | |
| 37 | Клавиша 7. | |
| 38 | Клавиша 8. | |
| 39 | Клавиша 9. | |
| — | 3A-40 | Не определены. |
| 41 | Клавиша A. | |
| 42 | Клавиша B. | |
| 43 | Клавиша C. | |
| 44 | Клавиша D. | |
| 45 | Клавиша E. | |
| 46 | Клавиша F. | |
| 47 | Клавиша G. | |
| 48 | Клавиша H. | |
| 49 | Клавиша I. | |
| 4A | Клавиша J. | |
| 4B | Клавиша K. | |
| 4C | Клавиша L. | |
| 4D | Клавиша M. | |
| 4E | Клавиша N. | |
| 4F | Клавиша O. | |
| 50 | Клавиша P. | |
| 51 | Клавиша Q. | |
| 52 | Клавиша R. | |
| 53 | Клавиша S. | |
| 54 | Клавиша T. | |
| 55 | Клавиша U. | |
| 56 | Клавиша V. | |
| 57 | Клавиша W. | |
| 58 | Клавиша X. | |
| 59 | Клавиша Y. | |
| 5A | Клавиша Z. | |
| VK_LWIN | 5B | Левая клавиша Windows (Клавиатура Microsoft® Natural® ). |
| VK_RWIN | 5C | Правая клавиша Windows (Клавиатура Microsoft® Natural® ). |
| VK_APPS | 5D | Клавиша приложения (Клавиатура Microsoft® Natural® ). |
| — | 5E | Зарезервирован. |
| VK_SLEEP | 5F | Клавиша Sleep (сна) компьютера. |
| VK_NUMPAD0 | 60 | Клавиша 0 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD1 | 61 | Клавиша 1 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD2 | 62 | Клавиша 2 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD3 | 63 | Клавиша 3 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD4 | 64 | Клавиша 4 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD5 | 65 | Клавиша 5 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD6 | 66 | Клавиша 6 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD7 | 67 | Клавиша 7 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD8 | 68 | Клавиша 8 вспомогательной цифровой клавиатуры. |
| VK_NUMPAD9 | 69 | Клавиша 9 вспомогательной цифровой клавиатуры. |
| VK_MULTIPLY | 6A | Клавиша умножения (*). |
| VK_ADD | 6B | Клавиша сложения (+). |
| VK_SEPARATOR | 6C | Клавиша разделения (\). |
| VK_SUBTRACT | 6D | Клавиша вычитания (—). |
| VK_DECIMAL | 6E | Клавиша десятичная. |
| VK_DIVIDE | 6F | Клавиша деления (/). |
| VK_F1 | 70 | Клавиша F1. |
| VK_F2 | 71 | Клавиша F2. |
| VK_F3 | 72 | Клавиша F3. |
| VK_F4 | 73 | Клавиша F4. |
| VK_F5 | 74 | Клавиша F5. |
| VK_F6 | 75 | Клавиша F6. |
| VK_F7 | 76 | Клавиша F7. |
| VK_F8 | 77 | Клавиша F8. |
| VK_F9 | 78 | Клавиша F9. |
| VK_F10 | 79 | Клавиша F10. |
| VK_F11 | 7A | Клавиша F11. |
| VK_F12 | 7B | Клавиша F12. |
| VK_F13 | 7C | Клавиша F13. |
| VK_F14 | 7D | Клавиша F14. |
| VK_F15 | 7E | Клавиша F15. |
| VK_F16 | 7F | Клавиша F16. |
| VK_F17 | 80 | Клавиша F17. |
| VK_F18 | 81 | Клавиша F18. |
| VK_F19 | 82 | Клавиша F19. |
| VK_F20 | 83 | Клавиша F20. |
| VK_F21 | 84 | Клавиша F21. |
| VK_F22 | 85 | Клавиша F22. |
| VK_F23 | 86 | Клавиша F23. |
| VK_F24 | 87 | Клавиша F24. |
| — | 88-8F | Предназначения нет. |
| VK_NUMLOCK | 90 | Клавиша NUM LOCK. |
| VK_SCROLL | 91 | Клавиша SCROLL LOCK. |
| 92-96 | Определяет OEM. | |
| — | 97-9F | Предназначения нет. |
| VK_LSHIFT | A0 | Левая клавиша SHIFT. |
| VK_RSHIFT | A1 | Правая клавиша SHIFT. |
| VK_LCONTROL | A2 | Левая клавиша CONTROL. |
| VK_RCONTROL | A3 | Правая клавиша CONTROL. |
| VK_LMENU | A4 | Левая клавиша MENU |
| VK_RMENU | A5 | Правая клавиша MENU. |
| VK_BROWSER_BACK | A6 | Windows 2000/XP: клавиша Browser Back (просмотр вперед). |
| VK_BROWSER_FORWARD | A7 | Windows 2000/XP: клавиша Browser Forward (просмотр назад). |
| VK_BROWSER_REFRESH | A8 | Windows 2000/XP: клавиша Browser Refresh (обновить экран просмотра). |
| VK_BROWSER_STOP | A9 | Windows 2000/XP: клавиша Browser Stop (остановить просмотр). |
| VK_BROWSER_SEARCH | AA | Windows 2000/XP: клавиша Browser Search (поиск в окне просмотра). |
| VK_BROWSER_FAVORITES | AB | Windows 2000/XP: клавиша Browser Favorites (предпочтительного просмотра). |
| VK_BROWSER_HOME | AC | Windows 2000/XP: клавиша Browser Start и Home (эапуск брузера и на главную страницу). |
| VK_VOLUME_MUTE | AD | Windows 2000/XP: клавиша Volume Mute (временно выключить звук). |
| VK_VOLUME_DOWN | AE | Windows 2000/XP: клавиша Volume Down (понизить громкость звука). |
| VK_VOLUME_UP | AF | Windows 2000/XP: клавиша Volume Up (повысить громкость звука). |
| VK_MEDIA_NEXT_TRACK | B0 | Windows 2000/XP: Клавиша Next Track (следующая дорожка). |
| VK_MEDIA_PREV_TRACK | B1 | Windows 2000/XP: Клавиша Previous Track (предыдущая дорожка). |
| VK_MEDIA_STOP | B2 | Windows 2000/XP: Клавиша Stop Media (останов проигрывателя). |
| VK_MEDIA_PLAY_PAUSE | B3 | Windows 2000/XP: Клавиша Play/Pause Media (воспроизведение/пауза проигрывателя). |
| VK_LAUNCH_MAIL | B4 | Windows 2000/XP: Клавиша Start Mail (запуск почтовой программы). |
| VK_LAUNCH_MEDIA_SELECT | B5 | Windows 2000/XP: Клавиша Select Media (выбора медиа). |
| VK_LAUNCH_APP1 | B6 | Windows 2000/XP: Клавиша Start Application 1 (запуск приложения 1). |
| VK_LAUNCH_APP2 | B7 | Windows 2000/XP: Клавиша Start Application 2 (запуск приложения 2). |
| — | B8-B9 | Зарезервированы. |
| VK_OEM_1 | BA | Используется для разных знаков; он может изменяться клавиатурой. |
Windows 2000/XP: для американской стандартной клавиатуры это клавиша ‘`
Аппаратные сообщения
Когда вы нажимаете клавишу, Windows помещает либо сообщение WM_KEYDOWN, либо сообщение WM_SYSKEYDOWN в очередь сообщений окна, имеющего фокус ввода. Когда вы отпускаете клавишу, Windows помещает либо сообщение WM_KEYUP, либо сообщение WM_SYSKEYUP в очередь сообщений.
Несистемные аппаратные сообщения
Системные аппаратные сообщения
Обычно сообщения о «нажатии» (down) и «отпускании» (up) появляются парами. Однако, если вы оставите клавишу нажатой так, чтобы включился автоповтор, то Windows посылает оконной процедуре серию сообщений
WM_KEYDOWN (или WM_SYSKEYDOWN) и одно сообщение WM_KEYUP (или WM_SYSKEYUP), когда в конце концов клавиша будет отпущена. Также как и все синхронные сообщения, аппаратные сообщения клавиатуры также становятся в очередь. Вы можете с помощью функции GetMessageTime получить время нажатия и отпускания клавиши относительно старта системы.
Системные и несистемные аппаратные сообщения клавиатуры
Префикс «SYS» в WM_SYSKEYDOWN и WM_SYSKEYUP означает «системное» (system) и относится к аппаратным сообщениям клавиатуры, которые больше важны для Windows, чем для приложений Windows. Сообщения WM_SYSKEYDOWN и WM_SYSKEYUP обычно вырабатываются при нажатии клавиш в сочетании с клавишей <Alt>. Эти сообщения вызывают опции меню программы или системного меню, или используются для системных функций, таких как смена активного окна (<Alt>+<Tab> или <Alt>+<Esc>), или как быстрые клавиши системного меню (<Alt> в сочетании с функциональной клавишей). Программы обычно игнорируют сообщения WM_SYSKEYDOWN и WM_SYSKEYUP и передают их DefWindowProc . Поскольку Windows отрабатывает всю логику Alt-клавиш, то вам фактически не нужно обрабатывать эти сообщения. Ваша оконная процедура в конце концов получит другие сообщения, являющиеся результатом этих аппаратных сообщений клавиатуры (например, выбор меню). Если вы хотите включить в код вашей оконной процедуры инструкции для обработки аппаратных сообщений клавиатуры (как мы это сделаем в программе KEYLOOK, представленной далее в этой главе), то после обработки этих сообщений передайте их в DefWindowProc , чтобы Windows могла по-прежнему их использовать в обычных целях.
Но подумайте немного об этом. Почти все, что влияет на окно вашей программы, в первую очередь проходит через вашу оконную процедуру. Windows каким-то образом обрабатывает сообщения только в том случае, если они передаются в DefWindowProc . Например, если вы добавите строки:
case WM_SYSKEYDOWN; case WM_SYSKEYUP; case WM_SYSCHAR;
в оконную процедуру, то запретите все операции с клавишей <Alt> (команды меню, <Alt>+<Tab>, <Alt>+<Esc> и т. д.), когда ваша программа имеет фокус ввода. Маловероятно, что вы захотели бы так сделать, тем не менее есть надежда, что вы начинаете понимать мощь вашей оконной процедуры.
Сообщения WM_KEYDOWN и WM_KEYUP обычно вырабатываются для клавиш, которые нажимаются и отпускаются без участия клавиши <Alt>. Ваша программа может использовать или не использовать эти сообщения клавиатуры. Сама Windows их игнорирует.
Переменная lParam
Для всех аппаратных сообщений клавиатуры, 32-разрядная переменная lParam , передаваемая в оконную процедуру, состоит из шести полей: счетчика повторений (Repeat Count), cкан-кода OEM (Original Equipment Manufacturer Scan Code), флага расширенной клавиатуры (Extended Key Flag), кода контекста (Context Code), флага предыдущего состояния клавиши (Previous Key State) и флага состояния клавиши (Transition State). (См. рис. 5.1)
Extended Key Flag
Previos Key State
Рис. 5.1 Шесть полей переменной lParam аппаратных сообщений клавиатуры
Счетчик повторений равен числу нажатий клавиши, которое отражено в сообщении. В большинстве случаев он устанавливается в 1. Однако, если клавиша остается нажатой, а ваша оконная процедура недостаточно быстра, чтобы обрабатывать эти сообщения в темпе автоповтора (по умолчанию это приблизительно 10 символов в секунду), то Windows объединяет несколько сообщений WM_KEYDOWN или WM_SYSKEYDOWN в одно сообщение и соответственно увеличивает счетчик повторений. Для сообщения WM_KEYUP или WM_SYSKEYUP счетчик повторений всегда равен 1.
Поскольку значение счетчика большее 1 показывает, что имеющийся темп автоповтора превышает возможности вашей программы по обработке, вы можете игнорировать счетчик повторений при обработке сообщений клавиатуры. Почти каждый из вас имел опыт работы с документами в программах текстовых редакторов или электронных таблиц, и видел, как строки или страницы продолжают перелистываться и после отпускания соответствующей клавиши. Это происходит из-за дополнительных сообщений в буфере клавиатуры, которые накапливаются там, если некоторое время удерживать клавишу. Игнорирование счетчика повторений в вашей программе существенно снизит вероятность проявления этого эффекта. Тем не менее, счетчик повторений может быть использован. Вероятно, вам следует протестировать в ваших программах обе эти возможности и выбрать наиболее подходящий вариант.
Скан-код OEM является кодом клавиатуры, генерируемым аппаратурой компьютера. (Если вы хорошо знакомы с программированием на языке ассемблера, то скан-код — это код, передаваемый программе в регистре AH при вызове прерывания 16H BIOS.) Приложения Windows обычно игнорируют скан-код OEM, поскольку имеют более совершенные способы расшифровки информации от клавиатуры.
Флаг расширенной клавиатуры
Флаг расширенной клавиатуры устанавливается в 1, если сообщение клавиатуры появилось в результате работы с дополнительными клавишами расширенной клавиатуры IBM. (Расширенная клавиатура IBM имеет функциональные клавиши сверху и отдельную комбинированную область клавиш управления курсором и цифр.) Этот флаг устанавливается в 1 для клавишей <Alt> и <Ctrl> на правой стороне клавиатуры, клавиш управления курсором (включая <Insert> и <Delete>), которые не являются частью числовой клавиатуры, клавиш наклонной черты (</>) и <Enter> на числовой клавиатуре и клавиши <NumLock>. Программы для Windows обычно игнорируют флаг расширенной клавиатуры.
Код контекста устанавливается в 1, если нажата клавиша <Alt>. Этот разряд всегда равен 1 для сообщений
WM_SYSKEYDOWN и WM_SYSKEYUP и 0 для сообщений WM_KEYDOWN и WM_KEYUP с двумя исключениями:
• Если активное окно минимизировано, оно не имеет фокус ввода. Все нажатия клавиш вырабатывают сообщения WM_SYSKEYDOWN и WM_SYSKEYUP. Если не нажата клавиша <Alt>, поле кода контекста устанавливается в 0. (Windows использует SYS сообщения клавиатуры так, чтобы активное окно, которое минимизировано, не обрабатывало эти сообщения.)
• На некоторых иноязычных клавиатурах некоторые символы генерируются комбинацией клавиш <Shift>, <Ctrl> или <Alt> с другой клавишей. В этих случаях, у переменной lParam , которая сопровождает сообщения WM_KEYDOWN и WM_KEYUP, в поле кода контекста ставится 1, но эти сообщения не являются системными сообщениями клавиатуры.
Флаг предыдущего состояния клавиши
Флаг предыдущего состояния клавиши равен 0, если в предыдущем состоянии клавиша была отпущена, и 1, если в предыдущем состоянии она была нажата. Он всегда устанавливается в 1 для сообщения WM_KEYUP или WM_SYSKEYUP, но для сообщения WM_KEYDOWN или WM_SYSKEYDOWN он может устанавливаться как в 1, так и в 0. В этом случае 1 показывает наличие второго и последующих сообщений от клавиш в результате автоповтора.
Флаг состояния клавиши
Флаг состояния клавиши равен 0, если клавиша нажимается, и 1, если клавиша отпускается. Это поле устанавливается в 0 для сообщения WM_KEYDOWN или WM_SYSKEYDOWN и в 1 для сообщения WM_KEYUP
Виртуальные коды клавиш
Хотя некоторая информация в lParam при обработке сообщений WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP и WM_SYSKEYDOWN может оказаться полезной, гораздо более важен параметр wParam . В этом параметре содержится «виртуальный код клавиши» (virtual key code), идентифицирующий нажатую или отпущенную клавишу. Разработчики Windows попытались определить виртуальные клавиши независимым от аппаратуры способом. По этой причине, некоторые виртуальные коды клавиш не могут вырабатываться на персональных компьютерах IBM и совместимых с ними, но их можно встретить на клавиатурах других производителей.
Виртуальные коды клавиш, которые вы используете, наиболее часто имеют имена, определенные в заголовочных файлах Windows. В показанной ниже таблице представлены эти имена, числовые коды клавиш, а также клавиши персональных компьютеров IBM, соответствующие виртуальным клавишам. Хотя все клавиши вызывают аппаратные сообщения клавиатуры, в таблицу не включены клавиши символов (например, клавиши символов / или ?). Эти клавиши имеют виртуальные коды от 128 и выше, и они в международных клавиатурах часто определяются по-другому. Вы можете определить значения этих виртуальных кодов клавиш с помощью программы KEYLOOK, представленной далее в этой главе, но обычно вам не нужно обрабатывать аппаратные сообщения клавиатуры для этих клавиш.
Virtual Key Codes
The following table shows the symbolic constant names, decimal values (in brackets), and mouse or keyboard equivalents for the virtual-key codes used by the system. The codes are listed in numeric order.
VK_LBUTTON (1): Left mouse button
VK_RBUTTON (2): Right mouse button
VK_CANCEL (3): Control-break processing
VK_MBUTTON (4): Middle mouse button (three-button mouse)
VK_XBUTTON1 (5): Windows 2000/XP: X1 mouse button
VK_XBUTTON2 (6): Windows 2000/XP: X2 mouse button
— (7): Undefined
VK_BACK (8): BACKSPACE key
VK_TAB (9): TAB key
— (10-11): Reserved
VK_CLEAR (12): CLEAR key
VK_RETURN (13): ENTER key
— (14-15): Undefined
VK_SHIFT (16): SHIFT key
VK_CONTROL (17): CTRL key
VK_MENU (18): ALT key
VK_PAUSE (19): PAUSE key
VK_CAPITAL (20): CAPS LOCK key
VK_KANA (21): Input Method Editor (IME) Kana mode
VK_HANGUEL (21): IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
VK_HANGUL (21): IME Hangul mode
— (22): Undefined
VK_JUNJA (23): IME Junja mode
VK_FINAL (24): IME final mode
VK_HANJA (25): IME Hanja mode
VK_KANJI (25): IME Kanji mode
— (26): Undefined
VK_ESCAPE (27): ESC key
VK_CONVERT (28): IME convert
VK_NONCONVERT (29): IME nonconvert
VK_ACCEPT (30): IME accept
VK_MODECHANGE (31): IME mode change request
VK_SPACE (32): SPACEBAR
VK_PRIOR (33): PAGE UP key
VK_NEXT (34): PAGE DOWN key
VK_END (35): END key
VK_HOME (36): HOME key
VK_LEFT (37): LEFT ARROW key
VK_UP (38): UP ARROW key
VK_RIGHT (39): RIGHT ARROW key
VK_DOWN (40): DOWN ARROW key
VK_SELECT (41): SELECT key
VK_PRINT (42): PRINT key
VK_EXECUTE (43): EXECUTE key
VK_SNAPSHOT (44): PRINT SCREEN key
VK_INSERT (45): INS key
VK_DELETE (46): DEL key
VK_HELP (47): HELP key
(48): 0 key
(49): 1 key
(50): 2 key
(51): 3 key
(52): 4 key
(53): 5 key
(54): 6 key
(55): 7 key
(56): 8 key
(57): 9 key
— (58-64): Undefined
(65): A key
(66): B key
(67): C key
(68): D key
(69): E key
(70): F key
(71): G key
(72): H key
(73): I key
(74): J key
(75): K key
(76): L key
(77): M key
(78): N key
(79): O key
(80): P key
(81): Q key
(82): R key
(83): S key
(84): T key
(85): U key
(86): V key
(87): W key
(88): X key
(89): Y key
(90): Z key
VK_LWIN (91): Left Windows key (Microsoft� Natural� keyboard)
VK_RWIN (92): Right Windows key (Natural keyboard)
VK_APPS (93): Applications key (Natural keyboard)
— (94): Reserved
VK_SLEEP (95): Computer Sleep key
VK_NUMPAD0 (96): Numeric keypad 0 key
VK_NUMPAD1 (97): Numeric keypad 1 key
VK_NUMPAD2 (98): Numeric keypad 2 key
VK_NUMPAD3 (99): Numeric keypad 3 key
VK_NUMPAD4 (100): Numeric keypad 4 key
VK_NUMPAD5 (101): Numeric keypad 5 key
VK_NUMPAD6 (102): Numeric keypad 6 key
VK_NUMPAD7 (103): Numeric keypad 7 key
VK_NUMPAD8 (104): Numeric keypad 8 key
VK_NUMPAD9 (105): Numeric keypad 9 key
VK_MULTIPLY (106): Multiply key
VK_ADD (107): Add key
VK_SEPARATOR (108): Separator key
VK_SUBTRACT (109): Subtract key
VK_DECIMAL (110): Decimal key
VK_DIVIDE (111): Divide key
VK_F1 (112): F1 key
VK_F2 (113): F2 key
VK_F3 (114): F3 key
VK_F4 (115): F4 key
VK_F5 (116): F5 key
VK_F6 (117): F6 key
VK_F7 (118): F7 key
VK_F8 (119): F8 key
VK_F9 (120): F9 key
VK_F10 (121): F10 key
VK_F11 (122): F11 key
VK_F12 (123): F12 key
VK_F13 (124): F13 key
VK_F14 (125): F14 key
VK_F15 (126): F15 key
VK_F16 (127): F16 key
VK_F17 (128): F17 key
VK_F18 (129): F18 key
VK_F19 (130): F19 key
VK_F20 (131): F20 key
VK_F21 (132): F21 key
VK_F22 (133): F22 key
VK_F23 (134): F23 key
VK_F24 (135): F24 key
— (136-143): Unassigned
VK_NUMLOCK (144): NUM LOCK key
VK_SCROLL (145): SCROLL LOCK key
(146-150): OEM specific
— (151-159): Unassigned
VK_LSHIFT (160): Left SHIFT key
VK_RSHIFT (161): Right SHIFT key
VK_LCONTROL (162): Left CONTROL key
VK_RCONTROL (163): Right CONTROL key
VK_LMENU (164): Left MENU key
VK_RMENU (165): Right MENU key
VK_BROWSER_BACK (166): Windows 2000/XP: Browser Back key
VK_BROWSER_FORWARD (167): Windows 2000/XP: Browser Forward key
VK_BROWSER_REFRESH (168): Windows 2000/XP: Browser Refresh key
VK_BROWSER_STOP (169): Windows 2000/XP: Browser Stop key
VK_BROWSER_SEARCH (170): Windows 2000/XP: Browser Search key
VK_BROWSER_FAVORITES (171): Windows 2000/XP: Browser Favorites key
VK_BROWSER_HOME (172): Windows 2000/XP: Browser Start and Home key
VK_VOLUME_MUTE (173): Windows 2000/XP: Volume Mute key
VK_VOLUME_DOWN (174): Windows 2000/XP: Volume Down key
VK_VOLUME_UP (175): Windows 2000/XP: Volume Up key
VK_MEDIA_NEXT_TRACK (176): Windows 2000/XP: Next Track key
VK_MEDIA_PREV_TRACK (177): Windows 2000/XP: Previous Track key
VK_MEDIA_STOP (178): Windows 2000/XP: Stop Media key
VK_MEDIA_PLAY_PAUSE (179): Windows 2000/XP: Play/Pause Media key
VK_LAUNCH_MAIL (180): Windows 2000/XP: Start Mail key
VK_LAUNCH_MEDIA_SELECT (181): Windows 2000/XP: Select Media key
VK_LAUNCH_APP1 (182): Windows 2000/XP: Start Application 1 key
VK_LAUNCH_APP2 (183): Windows 2000/XP: Start Application 2 key
— (184-185): Reserved
VK_OEM_1 (186): Used for miscellaneous characters; it can vary by keyboard.Windows 2000/XP: For the US standard keyboard, the ‘;:’ key
VK_OEM_PLUS (187): Windows 2000/XP: For any country/region, the ‘+’ key
VK_OEM_COMMA (188): Windows 2000/XP: For any country/region, the ‘,’ key
VK_OEM_MINUS (189): Windows 2000/XP: For any country/region, the ‘-‘ key
VK_OEM_PERIOD (190): Windows 2000/XP: For any country/region, the ‘.’ key
VK_OEM_2 (191): Used for miscellaneous characters; it can vary by keyboard.Windows 2000/XP: For the US standard keyboard, the ‘/?’ key
VK_OEM_3 (192): Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the ‘`
‘ key
— (193-215): Reserved
— (216-218): Unassigned
VK_OEM_4 (219): Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the ‘[<' key
VK_OEM_5 (220): Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the ‘\|’ key
VK_OEM_6 (221): Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the ‘]>’ key
VK_OEM_7 (222): Used for miscellaneous characters; it can vary by keyboard.
Windows 2000/XP: For the US standard keyboard, the ‘single-quote/double-quote’ key
VK_OEM_8 (223): Used for miscellaneous characters; it can vary by keyboard.
— (224): Reserved
(225): OEM specific
VK_OEM_102 (226): Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
(227-228): OEM specific
VK_PROCESSKEY (229): Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
(230): OEM specific
VK_PACKET (231): Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods.
— (232): Unassigned
(233-245): OEM specific
VK_ATTN (246): Attn key
VK_CRSEL (247): CrSel key
VK_EXSEL (248): ExSel key
VK_EREOF (249): Erase EOF key
VK_PLAY (250): Play key
VK_ZOOM (251): Zoom key
VK_NONAME (252): Reserved for future use
VK_PA1 (253): PA1 key
VK_OEM_CLEAR (254): Clear key