Keys and Key Codes for Windows Mobile
4/8/2010
Windows Mobile maintains a device–independent keyboard model that enables it to support a variety of keyboards. At the lowest level, each key on the keyboard generates a scan code when the key is pressed and released. The scan code is a hardware–dependent number that identifies the key. The keyboard driver translates or maps each scan code to a virtual key code. The virtual key code is a hardware–independent hexadecimal number that identifies the key. Because keyboard layouts vary from language to language, Windows Mobile offers only the core set of virtual key codes that are found on all keyboards. This core set includes English characters, numbers, and a few critical keys, such as the function and arrow keys. Keys that are not included in the core set also have virtual key code assignments, but their values vary from one keyboard layout to the next. You should depend only on the virtual key codes that are in the core set.
Key Codes
The following table shows the symbolic constant names, hexadecimal values, and keyboard equivalents for the virtual key codes used by the Windows Mobile operating system. The codes are listed in numeric order. You can combine any of the codes with a modifier key to create a hot key.
A VK_code is a byte, and so there are only 256 VK_codes total. The virtual key codes listed in the "Virtual key codes" section below are shared with Windows Embedded CE. More virtual keys were required for functionality, and so many hex values are shared between both a traditional Windows Embedded CE value and a Windows Mobile–specific value.
The following table provides a list of the mappings between the traditional VK constants and the additional Windows Mobile–specific value.
Hexadecimal value | Windows Embedded CE constant | Shared Windows Mobile constant | Windows Mobile purpose |
---|---|---|---|
0x08 |
VK_BACK |
VK_TBACK |
Back. |
0x0D |
VK_RETURN |
VK_TACTION |
Action. |
0x25 |
VK_LEFT |
VK_TLEFT |
Left. |
0x26 |
VK_UP |
VK_TUP |
Up. |
0x27 |
VK_RIGHT |
VK_TRIGHT |
Right. |
0x28 |
VK_DOWN |
VK_TDOWN |
Down. |
0x5B |
VK_LWIN |
VK_THOME |
Home screen |
0x70 |
VK_F1 |
VK_TSOFT1 |
Softkey 1. |
0x71 |
VK_F2 |
VK_TSOFT2 |
Softkey 2. |
0x72 |
VK_F3 |
VK_TTALK |
Talk |
0x73 |
VK_F4 |
VK_TEND |
End |
0x75 |
VK_F6 |
VK_TVOLUMEUP |
Volume Up. |
0x76 |
VK_F7 |
VK_TVOLUMEDOWN |
Volume Down. |
0x77 |
VK_F8 |
VK_TSTAR |
* |
0x78 |
VK_F9 |
VK_TPOUND |
# |
0x79 |
VK_F10 |
VK_TRECORD |
Record. |
0x7A |
VK_F11 |
VK_SYMBOL |
Symbol (SYM) key. |
0x7E |
VK_F15 |
VK_END_ALL_DATA_CALLS |
Disconnects all data calls without affecting the status of voice calls. |
0x7F |
VK_F16 |
VK_TSPEAKERPHONE_TOGGLE |
Toggles speakerphone on and off. |
0x80 |
VK_F17 |
VK_TFLIP |
Flip. |
0x81 |
VK_F18 |
VK_TPOWER |
Power. |
0x82 |
VK_F19 |
VK_REDKEY |
Sent by a keypad that has a special red function key. |
0x83 |
VK_F20 |
VK_ROCKER |
Arrow keys came from a Rocker. |
0x84 |
VK_F21 |
VK_DPAD |
Arrow keys came from a d–pad. |
0x85 |
VK_F22 |
VK_KEYLOCK |
Key used to lock device. |
0x86 |
VK_F23 |
VK_ACTION |
Sent with VK_RETURN when doing Action on Windows Mobile Classic rockers. |
0x87 |
VK_F24 |
VK_VOICEDIAL |
Key used to kick off voice dial recognition. |
For more information about the d-pad, see D-pad Virtual Key Code Support. For more information about soft keys, see Soft Key Virtual Key Codes.
Note
Beginning with Windows Mobile 6.5.3, soft keys are replaced by touchable tiles on Windows Mobile Professional phones.
The following keys were undefined for Windows Embedded CE, but are overridden as application keys in Windows Mobile.
Hexadecimal value | Windows Mobile constant |
---|---|
0xC1 |
VK_APP_FIRST |
0xC1 |
VK_APP1 |
0xC2 |
VK_APP2 |
0xC3 |
VK_APP3 |
0xC4 |
VK_APP4 |
0xC5 |
VK_APP5 |
0xC6 |
VK_APP6 |
0xC6 |
VK_APP_LAST |
The VK_APP keys will only be recognized by the system if they are wrapped with VK_LWIN. The following code snippet demonstrates how to do this programmatically.
keybd_event(VK_LWIN, 0, KEYEVENTF_SILENT, 0);
GenKeyEvent(VK_APP1);
keybd_event(VK_LWIN, 0, KEYEVENTF_SILENT | KEYEVENTF_KEYUP, 0);
And finally, the following chorded keys are implemented for Windows Mobile.
Windows Mobile constant | Hexadecimal value | Purpose |
---|---|---|
VK_DONE |
VK_RWIN + VK_F6 |
<OK/Close> hotkey code. See SmartMinimize Button. |
MOD_DONE |
(MOD_WIN | MOD_KEYUP) |
<OK/Close> hotkey modifiers |
VK_MOJI |
VK_RWIN + VK_F7 |
Key used to switch between East Asian language layouts. |
MOD_MOJI |
(MOD_WIN | MOD_KEYUP) |
Modifiers so MOJI goes to the shell. |
VK_A to VK_Z and VK_0 to VK_9 are defined to be the same values as their ASCII counterparts. So VK_A is 0x41 and VK_0 is 0x30. Windows Mobile also defines the following numerical codes.
Hexadecimal value | Windows Embedded CE constant | Windows Mobile constant |
---|---|---|
0x30 |
VK_0 |
VK_T0 |
0x31 |
VK_1 |
VK_T1 |
0x32 |
VK_2 |
VK_T2 |
0x33 |
VK_3 |
VK_T3 |
0x34 |
VK_4 |
VK_T4 |
0x35 |
VK_5 |
VK_T5 |
0x36 |
VK_6 |
VK_T6 |
0x37 |
VK_7 |
VK_T7 |
0x38 |
VK_8 |
VK_T8 |
0x39 |
VK_9 |
VK_T9 |
VK_0 (which is the same as VK_T0) and VK_NUMPAD0 are different keys. On the desktop keyboard, VK_0 is the key just above and to the left of VK_P. VK_NUMPAD0 is the key at the bottom of the number pad on the far right of the keyboard. Windows Mobile applications will always look for VK_0, but can also look for both VK_0 and VK_NUMPAD0 in order to do the correct thing if there was a device with a numpad.
Virtual key codes in Windows Mobile
Symbolic constant | Hexadecimal value | Additional mapping defined for Windows Mobile | Mouse or keyboard equivalent |
---|---|---|---|
VK_LBUTTON |
0x01 |
|
Left mouse button. |
VK_RBUTTON |
0x02 |
|
Right mouse button. |
VK_CANCEL |
0x03 |
|
Control–break processing. |
VK_MBUTTON |
0x04 |
|
Middle mouse button on a three–button mouse. |
|
0x05–0x07 |
|
Undefined. |
VK_BACK |
0x08 |
BACKSPACE key. |
|
VK_TAB |
0x09 |
|
TAB key. |
|
0x0A–0x0B |
|
Undefined. |
VK_CLEAR |
0x0C |
|
CLEAR key. |
VK_RETURN |
0x0D |
|
ENTER key. |
|
0x0E–0x0F |
|
Undefined. |
VK_SHIFT |
0x10 |
|
SHIFT key. |
VK_CONTROL |
0x11 |
|
CTRL key. |
VK_MENU |
0x12 |
|
ALT key. |
VK_PAUSE |
0x13 |
|
PAUSE key. |
VK_CAPITAL |
0x14 |
|
CAPS LOCK key. |
|
0x15–0x19 |
|
Reserved for Kanji systems. |
|
0x1A |
|
Undefined. |
VK_ESCAPE |
0x1B |
|
ESC key. |
|
0x1C–0x1F |
|
Reserved for Kanji systems. |
VK_SPACE |
0x20 |
|
SPACEBAR. |
VK_PRIOR |
0x21 |
|
PAGE UP key. |
VK_NEXT |
0x22 |
|
PAGE DOWN key. |
VK_END |
0x23 |
|
END key. |
VK_HOME |
0x24 |
|
HOME key. |
VK_LEFT |
0x25 |
LEFT ARROW key. |
|
VK_UP |
0x26 |
UP ARROW key. |
|
VK_RIGHT |
0x27 |
RIGHT ARROW key. |
|
VK_DOWN |
0x28 |
DOWN ARROW key. |
|
VK_SELECT |
0x29 |
|
SELECT key. |
|
0x2A |
|
Specific to OEM. |
VK_EXECUTE |
0x2B |
|
EXECUTE key. |
VK_SNAPSHOT |
0x2C |
|
PRINT SCREEN key. |
VK_INSERT |
0x2D |
|
INS key. |
VK_DELETE |
0x2E |
|
DEL key. |
VK_HELP |
0x2F |
|
HELP key. |
|
0x3A–0x40 |
|
Undefined. |
VK_LWIN |
0x5B |
Left Windows key on a Microsoft Natural Keyboard. |
|
VK_RWIN |
0x5C |
|
Right Windows key on a Microsoft Natural Keyboard. |
VK_APPS |
0x5D |
|
Applications key on a Microsoft Natural Keyboard. |
|
0x5E–0x5F |
|
Undefined |
VK_NUMPAD0 |
0x60 |
|
Numeric keypad 0 key. |
VK_NUMPAD1 |
0x61 |
|
Numeric keypad 1 key. |
VK_NUMPAD2 |
0x62 |
|
Numeric keypad 2 key. |
VK_NUMPAD3 |
0x63 |
|
Numeric keypad 3 key. |
VK_NUMPAD4 |
0x64 |
|
Numeric keypad 4 key. |
VK_NUMPAD5 |
0x65 |
|
Numeric keypad 5 key. |
VK_NUMPAD6 |
0x66 |
|
Numeric keypad 6 key. |
VK_NUMPAD7 |
0x67 |
|
Numeric keypad 7 key. |
VK_NUMPAD8 |
0x68 |
|
Numeric keypad 8 key. |
VK_NUMPAD9 |
0x69 |
|
Numeric keypad 9 key. |
VK_MULTIPLY |
0x6A |
|
Multiply key. |
VK_ADD |
0x6B |
|
Add key. |
VK_SEPARATOR |
0x6C |
|
Separator key. |
VK_SUBTRACT |
0x6D |
|
Subtract key. |
VK_DECIMAL |
0x6E |
|
Decimal key. |
VK_DIVIDE |
0x6F |
|
Divide key. |
VK_F1 |
0x70 |
F1 key. |
|
VK_F2 |
0x71 |
F2 key. |
|
VK_F3 |
0x72 |
F3 key. |
|
VK_F4 |
0x73 |
F4 key. |
|
VK_F5 |
0x74 |
|
F5 key. |
VK_F6 |
0x75 |
F6 key. |
|
VK_F7 |
0x76 |
F7 key. |
|
VK_F8 |
0x77 |
F8 key. |
|
VK_F9 |
0x78 |
F9 key. |
|
VK_F10 |
0x79 |
F10 key. |
|
VK_F11 |
0x7A |
F11 key. |
|
VK_F12 |
0x7B |
|
F12 key. |
VK_F13 |
0x7C |
|
F13 key. |
VK_F14 |
0x7D |
|
F14 key. |
VK_F15 |
0x7E |
F15 key. |
|
VK_F16 |
0x7F |
F16 key. |
|
VK_F17 |
0x80 |
F17 key. |
|
VK_F18 |
0x81 |
F18 key. |
|
VK_F19 |
0x82 |
F19 key. |
|
VK_F20 |
0x83 |
F20 key. |
|
VK_F21 |
0x84 |
F21 key. |
|
VK_F22 |
0x85 |
F22 key. Key used to lock device. |
|
VK_F23 |
0x86 |
F23 key. |
|
VK_F24 |
0x87 |
F24 key. |
|
|
0x89–0x8F |
|
Unassigned. |
VK_NUMLOCK |
0x90 |
|
NUM LOCK key. |
VK_SCROLL |
0x91 |
|
SCROLL LOCK key. |
VK_LSHIFT |
0xA0 |
|
Left SHIFT. |
VK_RSHIFT |
0xA1 |
|
Right SHIFT. |
VK_LCONTROL |
0xA2 |
|
Left CTRL. |
VK_RCONTROL |
0xA3 |
|
Right CTRL. |
VK_LMENU |
0xA4 |
|
Left ALT. |
VK_RMENU |
0xA5 |
|
Right ALT. |
|
0xBA–0xC0 |
|
Specific to OEM; reserved. See following tables. |
|
0xC1–0xDA |
0xC1–0xC6 |
Unassigned. |
|
0xDB–0xDE |
|
Specific to OEM; reserved. See following tables. |
VK_OFF |
0xDF |
|
Used to power the device on and off. No keyboard equivalent. |
|
0xE1–0xE4 |
|
Specific to OEM. |
|
0xE5 |
|
Unassigned. |
|
0xE6 |
|
Specific to OEM. |
VK_PACKET |
0xE7 |
|
Used to pass Unicode characters as if they were keystrokes. If VK_PACKET is used with SendInput, then the Unicode character to be delivered should be placed into the lower 16 bits of the scan code. If a keyboard message is removed from the message queue and the virtual key is VK_PACKET, then the Unicode character will be the upper 16 bits of the lparam. |
|
0xE8 |
|
Unassigned. |
|
0xE9–0xF5 |
|
Specific to OEM. |
VK_ATTN |
0xF6 |
|
ATTN key. |
VK_CRSEL |
0xF7 |
|
CRSEL key. |
VK_EXSEL |
0xF8 |
|
EXSEL key. |
VK_EREOF |
0xF9 |
|
Erase EOF key. |
VK_PLAY |
0xFA |
|
PLAY key. |
VK_ZOOM |
0xFB |
|
ZOOM key. |
VK_NONAME |
0xFC |
|
Reserved for future use. |
VK_PA1 |
0xFD |
|
PA1 key. |
VK_OEM_CLEAR |
0xFE |
|
CLEAR key. |
VK_KEYLOCK |
0xF22 |
|
Key used to lock device. |
OEMs should make special note of the VK key ranges reserved for specific OEM use: 2A, DB–E4, E6, and E9–F5.
In addition to the virtual key assignments in the previous table, Microsoft has assigned the following specific OEM virtual keys.
Symbolic constant | Hexadecimal value | Mouse or keyboard equivalent |
---|---|---|
VK_OEM_SCROLL |
0x91 |
None. |
VK_OEM_1 |
0xBA |
";:" for US. |
VK_OEM_PLUS |
0xBB |
"+" any country/region. |
VK_OEM_COMMA |
0xBC |
"," any country/region. |
VK_OEM_MINUS |
0xBD |
"-" any country/region. |
VK_OEM_PERIOD |
0xBE |
"." any country/region. |
VK_OEM_2 |
0xBF |
"/?" for US. |
VK_OEM_3 |
0xC0 |
"`~" for US. |
VK_OEM_4 |
0xDB |
"[{" for US. |
VK_OEM_5 |
0xDC |
"\|" for US. |
VK_OEM_6 |
0xDD |
"]}" for US |
VK_OEM_7 |
0xDE |
"'"" for US. |
VK_OEM_8 |
0xDF |
None. By default, this is equivalent to VK_OFF. |
VK_OEM_AX |
0xE1 |
AX key on Japanese AX keyboard. |
VK_OEM_102 |
0xE2 |
"<>" or "\|" on RT 102-key keyboard. |
For East Asian Input Method Editors (IMEs) the following additional virtual keyboard definitions must be observed.
Symbolic constant | Hexadecimal value | Description |
---|---|---|
VK_DBE_ALPHANUMERIC |
0x0f0 |
Changes the mode to alphanumeric. |
VK_DBE_KATAKANA |
0x0f1 |
Changes the mode to Katakana. |
VK_DBE_HIRAGANA |
0x0f2 |
Changes the mode to Hiragana. |
VK_DBE_SBCSCHAR |
0x0f3 |
Changes the mode to single–byte characters. |
VK_DBE_DBCSCHAR |
0x0f4 |
Changes the mode to double–byte characters. |
VK_DBE_ROMAN |
0x0f5 |
Changes the mode to Roman characters. |
VK_DBE_NOROMAN |
0x0f6 |
Changes the mode to non–Roman characters. |
VK_DBE_ENTERWORDREGISTERMODE |
0x0f7 |
Activates the word registration dialog box. |
VK_DBE_ENTERIMECONFIGMODE |
0x0f8 |
Activates a dialog box for setting up an IME environment. |
VK_DBE_FLUSHSTRING |
0x0f9 |
Deletes the undetermined string without determining it. |
VK_DBE_CODEINPUT |
0x0fa |
Changes the mode to code input. |
VK_DBE_NOCODEINPUT |
0x0fb |
Changes the mode to no-code input. |
OEMs should not use the unassigned portions of the virtual key (VK) mapping tables. Microsoft will assign these values in the future. If manufacturers require additional VK mappings, they should reuse some of the current manufacturer–specific and vendor–specific assignments.
See Also
Reference
Concepts
Other Resources
Keyboard
Navigation Keys
Message Map for Navigation Controls