虚拟键值和扫描码

扫描码和虚拟键值是处理键盘输入时使用的两种不同概念:

  1. 扫描码(Scan Code)

    • 扫描码是硬件级的键盘输入信号。
    • 每个键在键盘上都有一个唯一的扫描码。
    • 键盘将按键转换为扫描码发送给操作系统。
    • 扫描码表示的是物理键的位置,与具体的字符或功能无关。
  2. 虚拟键值(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-9
  • VK_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

posted on   崔好好  阅读(108)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示