Scancode Map 注册表项来实现键盘按键映射。位于注册表的:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ 下新建一个二进制值项: "Scancode Map"
这个项目可实现对键盘按键的映射。这里映射的意思可理解为“替换”,可将任意一键替换成其它键。
[项目格式]
以16进制表示,更分为五个部分,每个逗号之间都为一个字节。
"Scancode Map" = 00,00,00,00,00,00,00,00, 02,00,00,00, 01,00, 02,00, 00,00,00,00
- 8个字节。 这是版本信息号。照例写就好。
- 4个字节。 这是映射键的总数。按照二进制的读写规则,低位在左,高位在右。02 00 00 00 这个数实际就是:00 00 00 02 。从 02 开始,一个映射键是 02 ,两个是03 ,依次递加,十个是 0B 。
- 2个字节。 表示替换后按键的”扫描码“。如:ESC 键的扫描码是 01 ,所以就表示 01 00 。再如 左Ctrl键扫描码是 1D 00, 而右Ctrl键是 1D E0 。
- 2个字节。 表示原按键的”扫描码“。格式同上。
- 以四个 00 结束。
[键盘扫描码]
以十六进制表示,分两部份,0X后面两个数是扫描码,最后两个数是 ASCII 码(可忽略)。如 0x011b ESC 扫描码是01。
扫描码 键
0X011B ESC 0X3B00 F1 0X3C00 F2 0X3D00 F3 0X3E00 F4 0X3F00 F5 0X4000 F6 0X4100 F7 0X4200 F8 0X4300 F9 0X4400 F10
主键盘区: 0X2960 ~ 0X0231 1 0X0332 2 0X0433 3 0X0534 4 0X0635 5 0X0736 6 0X0837 7 0X0938 8 0X0A39 9 0X0B30 0 0X0C2D - 0X0D3D = 0X2B5C " 0X0E08 退格键 0X0F09 TAB 0X1071 Q 0X1177 W 0X1265 E 0X1372 R 0X1474 T 0X1579 Y 0X1675 U 0X1769 I 0X186F O 0X1970 P 0X1A5B [ 0X1B5D ] 0X1E61 A 0X1F73 S 0X2064 D 0X2166 F 0X2267 G 0X2368 H 0X246A J 0X256B K 0X266C L 0X273B ; 0X2827 ' 0X1C0D 回车 0X2C7A Z 0X2D78 X 0X2E63 C 0X2F76 V 0X3062 B 0X316E N 0X326D M 0X332C , 0X342E . 0X352F / 0X3920 空格键
右边数字键盘: 0X5200 INSERT 0X4700 HOME 0X4900 PAGE UP 0X5300 DELETE 0X4F00 END 0X5100 PAGEDOWN 0X4800 上箭头 0X4B00 左箭头 0X5000 下箭头 0X4D00 右箭头 0X352F / 0X372A * 0X4A2D - (注意,这是数字键盘的)0X4737 7 0X4838 8 0X4939 9 0X4B34 4 0X4C35 5 0X4D36 6 0X4E2B + 0X4F31 1 0X5032 2 0X5133 3 0X5230 0 0X532E DEL
左 Crtl 扫描码是 1D ,表示 1D 00 。 右 Ctrl 键扫描码是 E01D,表示 1D E0。
左 ALT 扫描码是 38 ,表示 38 00 。 右 ALT 键扫描码是 E0 38,表示 38 E0。
左 Shift 扫描码是 2A ,表示 2A 00 。 右 Shift 键扫描码是 36 ,表示 36 00
[示例]
1.屏蔽左侧WIN键
"Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,00,00,5B,E0,00,00,00,00
2.屏蔽右侧WIN键
"Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,00,00,5C,E0,00,00,00,00
3.屏蔽左右WIN两个键
"Scancode Map"=00,00,00,00,00,00,00,00,03,00,00,00,00,00,5B,E0,00,00,5C,E0,00,00,00,00
4.替换左Crtl键为左Alt键
"Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,38,00,1D,00,00,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"00000409"="KBDUS.DLL""Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,5B,E0,38,00,38,00,5B,E0,00,00,00,00