虚拟键值和扫描码
扫描码和虚拟键值是处理键盘输入时使用的两种不同概念:
- 
扫描码(Scan Code):
- 扫描码是硬件级的键盘输入信号。
 - 每个键在键盘上都有一个唯一的扫描码。
 - 键盘将按键转换为扫描码发送给操作系统。
 - 扫描码表示的是物理键的位置,与具体的字符或功能无关。
 
 - 
虚拟键值(Virtual Key Code):
- 虚拟键值是操作系统级别的抽象。
 - 操作系统将扫描码转换为虚拟键值,用于识别键的功能。
 - 虚拟键值与具体的字符或功能关联,而不是键的位置。
 - 例如,字母 'A' 和小键盘的 'A' 可能有相同的虚拟键值,但不同的扫描码。
 
 
总结来说,扫描码与键盘硬件直接相关,而虚拟键值则是操作系统用于处理键盘输入的抽象表示。
Windows 下的虚拟键值(Virtual Key Codes)有很多,这里列出一些常用的:
VK_LBUTTON(0x01): 左鼠标按钮VK_RBUTTON(0x02): 右鼠标按钮VK_CANCEL(0x03): 控制中断VK_MBUTTON(0x04): 中鼠标按钮VK_XBUTTON1(0x05): 第一个 X 鼠标按钮VK_XBUTTON2(0x06): 第二个 X 鼠标按钮VK_BACK(0x08): Backspace 键VK_TAB(0x09): Tab 键VK_CLEAR(0x0C): Clear 键VK_RETURN(0x0D): Enter 键VK_SHIFT(0x10): Shift 键VK_CONTROL(0x11): Ctrl 键VK_MENU(0x12): Alt 键VK_PAUSE(0x13): Pause 键VK_CAPITAL(0x14): Caps Lock 键VK_ESCAPE(0x1B): Escape 键VK_SPACE(0x20): 空格键VK_PRIOR(0x21): Page Up 键VK_NEXT(0x22): Page Down 键VK_END(0x23): End 键VK_HOME(0x24): Home 键VK_LEFT(0x25): 左箭头键VK_UP(0x26): 上箭头键VK_RIGHT(0x27): 右箭头键VK_DOWN(0x28): 下箭头键VK_SELECT(0x29): Select 键VK_PRINT(0x2A): Print 键VK_EXECUTE(0x2B): Execute 键VK_SNAPSHOT(0x2C): Print Screen 键VK_INSERT(0x2D): Insert 键VK_DELETE(0x2E): Delete 键VK_HELP(0x2F): Help 键VK_0-VK_9(0x30 - 0x39): 0-9 数字键VK_A-VK_Z(0x41 - 0x5A): A-Z 字母键VK_NUMPAD0-VK_NUMPAD9(0x60 - 0x69): 数字小键盘 0-9VK_MULTIPLY(0x6A): 小键盘乘号键VK_ADD(0x6B): 小键盘加号键VK_SEPARATOR(0x6C): 分隔符键VK_SUBTRACT(0x6D): 小键盘减号键VK_DECIMAL(0x6E): 小键盘小数点键VK_DIVIDE(0x6F): 小键盘除号键VK_F1-VK_F24(0x70 - 0x87): F1-F24 功能键VK_NUMLOCK(0x90): Num Lock 键VK_SCROLL(0x91): Scroll Lock 键
这只是部分常用的虚拟键值,完整列表可以在微软的官方文档中找到。
以下是 Windows 下常见的 104 键盘的扫描码和虚拟键值的对应表:
| 按键 | 扫描码 | 虚拟键值 | 
|---|---|---|
Esc | 
01 | VK_ESCAPE (0x1B) | 
F1 | 
3B | VK_F1 (0x70) | 
F2 | 
3C | VK_F2 (0x71) | 
F3 | 
3D | VK_F3 (0x72) | 
F4 | 
3E | VK_F4 (0x73) | 
F5 | 
3F | VK_F5 (0x74) | 
F6 | 
40 | VK_F6 (0x75) | 
F7 | 
41 | VK_F7 (0x76) | 
F8 | 
42 | VK_F8 (0x77) | 
F9 | 
43 | VK_F9 (0x78) | 
F10 | 
44 | VK_F10 (0x79) | 
F11 | 
57 | VK_F11 (0x7A) | 
F12 | 
58 | VK_F12 (0x7B) | 
~ | 
29 | VK_OEM_3 (0xC0) | 
1 | 
02 | VK_1 (0x31) | 
2 | 
03 | VK_2 (0x32) | 
3 | 
04 | VK_3 (0x33) | 
4 | 
05 | VK_4 (0x34) | 
5 | 
06 | VK_5 (0x35) | 
6 | 
07 | VK_6 (0x36) | 
7 | 
08 | VK_7 (0x37) | 
8 | 
09 | VK_8 (0x38) | 
9 | 
0A | VK_9 (0x39) | 
0 | 
0B | VK_0 (0x30) | 
- | 
0C | VK_OEM_MINUS (0xBD) | 
= | 
0D | VK_OEM_PLUS (0xBB) | 
Backspace | 
0E | VK_BACK (0x08) | 
Tab | 
0F | VK_TAB (0x09) | 
Q | 
10 | VK_Q (0x51) | 
W | 
11 | VK_W (0x57) | 
E | 
12 | VK_E (0x45) | 
R | 
13 | VK_R (0x52) | 
T | 
14 | VK_T (0x54) | 
Y | 
15 | VK_Y (0x59) | 
U | 
16 | VK_U (0x55) | 
I | 
17 | VK_I (0x49) | 
O | 
18 | VK_O (0x4F) | 
P | 
19 | VK_P (0x50) | 
[ | 
1A | VK_OEM_4 (0xDB) | 
] | 
1B | VK_OEM_6 (0xDD) | 
\ | 
2B | VK_OEM_5 (0xDC) | 
Caps Lock | 
3A | VK_CAPITAL (0x14) | 
A | 
1E | VK_A (0x41) | 
S | 
1F | VK_S (0x53) | 
D | 
20 | VK_D (0x44) | 
F | 
21 | VK_F (0x46) | 
G | 
22 | VK_G (0x47) | 
H | 
23 | VK_H (0x48) | 
J | 
24 | VK_J (0x4A) | 
K | 
25 | VK_K (0x4B) | 
L | 
26 | VK_L (0x4C) | 
; | 
27 | VK_OEM_1 (0xBA) | 
' | 
28 | VK_OEM_7 (0xDE) | 
Enter | 
1C | VK_RETURN (0x0D) | 
Shift (左) | 
2A | VK_SHIFT (0x10) | 
Z | 
2C | VK_Z (0x5A) | 
X | 
2D | VK_X (0x58) | 
C | 
2E | VK_C (0x43) | 
V | 
2F | VK_V (0x56) | 
B | 
30 | VK_B (0x42) | 
N | 
31 | VK_N (0x4E) | 
M | 
32 | VK_M (0x4D) | 
, | 
33 | VK_OEM_COMMA (0xBC) | 
. | 
34 | VK_OEM_PERIOD (0xBE) | 
/ | 
35 | VK_OEM_2 (0xBF) | 
Shift (右) | 
36 | VK_SHIFT (0x10) | 
Ctrl (左) | 
1D | VK_CONTROL (0x11) | 
Alt (左) | 
38 | VK_MENU (0x12) | 
Space | 
39 | VK_SPACE (0x20) | 
Alt (右) | 
E038 | VK_MENU (0x12) | 
Ctrl (右) | 
E01D | VK_CONTROL (0x11) | 
请注意,右侧的 Ctrl 和 Alt 键的扫描码有前缀 E0,表示扩展键。
- Reference
 
https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes?redirectedfrom=MSDN
    **********************技术交流请 email:cuihao0532#163.com 欢迎转载,转载请注明出处!*****************************                          如果对本文满意请扫描文章左侧【二维码添加微信】获取更多好玩、有趣、有益、有营养的料,
你我共同成长!Y(^_^)Y
                
            
        
浙公网安备 33010602011771号