关于scancode、virtual scancode等键盘编码的区分及示例咨询
键盘编码概念区分与实例解析
一、核心概念澄清
- Scancode(扫描码):与键盘物理按键位置绑定的硬件级编号,标准PC键盘主区扫描码统一,不同厂商可能存在微小差异。
- Virtual Scancode(虚拟扫描码):系统对硬件扫描码做标准化处理后的编码,消除不同厂商扫描码的差异,让系统统一识别物理按键位置。
- Keycode(键码):平台定义的、关联按键功能/字符的编码,部分场景下与虚拟键码混用,偏向系统层面的按键标识。
- Virtual Keycode/Virtual Key(虚拟键码/虚拟键):系统抽象的按键逻辑标识,与物理位置无关,代表按键的功能含义——并非仅修饰键,普通字符键也有对应虚拟键码,比如无论键盘布局如何,逻辑上的E键对应固定虚拟键码。
- 屏幕显示字符的编码:属于字符编码,比如Unicode(德语ö对应U+00F6)、ASCII、UTF-8等,用于表示文本字符,和键盘输入的硬件/系统编码不属于同一类别。
二、字母E/e对应的各类编码(以标准PC Qwerty键盘、Windows系统为例)
- scancode:
0x12(十进制为18,对应物理E键的硬件扫描码) - virtual scancode:
0x12(标准化后的虚拟扫描码,与硬件扫描码一致) - keycode:Windows下与虚拟键码一致为
0x45;Linux X11环境下为26 - virtual keycode:
0x45(系统定义的VK_E,逻辑指代E键) - virtual key:
0x45(与虚拟键码为同一概念的不同表述)
三、额外问题解答
- 65是Unicode编号(对应字符A,E的Unicode编号为69),属于字符编码,不属于上述键盘硬件/系统编码类别。
- 18是物理键盘位置的十进制扫描码,属于Scancode(或Virtual Scancode)。
- Shift键产生的编号:硬件层面是Scancode(左Shift为
0x2A,右Shift为0x36);系统层面是Virtual Keycode(0x10,即VK_SHIFT)。
内容的提问来源于stack exchange,提问作者user3443063
相关产品推荐
相关产品推荐

