修改注册表实现键盘的键位映射
- 前言
- 一、scancode是什么?
- 二、步骤
- 1.打开注册表
- 2.scancode表
- 总结
前言
弄了个蓝牙的欧洲键盘,但左上角居然是WWW home键,还找不到Esc键,崩溃了,VI都用不了。
赶紧考虑键位映射,但不想占用内存,就准备用注册表的Scancode Map实现。
折腾了几天,怎么也不行。最后发现,Power、WWW home、多媒体的键(非104标准键),因不能驻留内存,只有PS/2才能用此法进行键位映射。这个坑一定要告诉大家。免得折腾。直接用powertoys吧。
但既然弄明白了Scancode,就说清楚一下,什么高位、低位的。争取说清楚原理。
很多网上文章,都是讲步骤,不说原理,不说为什么要这么干,看的一头雾水。
一、scancode是什么?
键位按下和放开各获取一个码(makecode和breakcode),通常键盘映射只用按下去那个码(makecode)。每个码用两个16进制数表示。
比如:
Page Down的按下码是0xE0 0x51,放开码是0xE0 0xD1。
有人说,104键盘的值都只有一个啊,其实,是因为前面一位是0所以没有写出来。
比如,scancode的第一个是Esc键,通常看到的是0x01,但应该表示成0x00 0x01,高位是0,低位是1。这个在修改注册表的时候用得到。
二、步骤
1.打开注册表
位置:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
注意不是Keyboard Layouts也不要进入到子目录。
右侧创建二进制值Scancode Map
表的结构是这样的:四个部分,表头,映射数量,键位映射表,表尾。
表头是8个0,表尾是4个0。
映射数量用4位数表示,后面每个映射对也用四位数表示,前两个是目标键,后两个是原键。
这里需要特别注意:
1.注册表的高低位读法是低位在前,高位在后。
比如,第二行的前四位是02 00 00 00,实际的值是00 00 00 02,就是数值2,表示有1对键盘映射。注意是这个数值-1。
2.第二行的后四位开始就是键位映射对,四位数中,前两位是目标键,后两位是原键。
比如,WWW home值是0xE0 0x32,ESC值是0x01,表示成键位映射就是01 00 32 E0。其中01 00是目标键ESC;32 E0是原键。注册表在读的时候,先读低位01,再度高位00,最后组合成00 01。为啥这个设计,我不知道。
3.如果要禁用一个键,将这个键映射为00 00即可
示例一:
00 00 00 00 00 00 00 00 //表头的格式,8个0
02 00 00 00 01 00 32 E0 //有一个键位映射:把00 01赋值到 E0 32;就是把WWW home映射成Esc
00 00 00 00 //表尾的格式,4个0
示例二:
00 00 00 00 00 00 00 00 //表头的格式,8个0
03 00 00 00 01 00 32 E0 //有两个键位映射:把WWW home映射成Esc
52 E0 6c E0 00 00 00 00 //把E-mail键映射成insert;表尾的格式,4个0
2.scancode表
下面表中的值是低位在前,高位在后,直接复制到注册表中就可以:
Backspace 0E 00 9 49 00 / ? 35 00 S 1F 00 DBE_SBCSCHAR 77 E0
Caps Lock 3A 00 - 4A 00 ; : 27 00 T 14 00 CONVERT 79 E0
Delete 53 E0 / * 37 00 [ { 1A 00 U 16 00 NONCONVERT 7B E0
End 4F E0 . 53 00 \ | 2B 00 V 2F 00 Internet 01 E0
Enter 1C 00 / 35 00 ] } 1B 00 W 11 00 iTouch 13 E0
Escape 01 00 /+ 4E 00 ` ~ 29 00 X 2D 00 Shopping 04 E0
HOME 47 E0 Enter 1C E0 = + 0D 00 Y 15 00 Webcam 12 E0
Insert 52 E0 F1 3B 00 0 ) 0B 00 Z 2C 00 Back 6A E0
Left Alt 38 00 F2 3C 00 1 ! 02 00 Close 40 E0 Favorites 66 E0
Left Ctrl 1D 00 F3 3D 00 2 @ 03 00 Fwd 42 E0 Forward 69 E0
LeSh ftift 2A 00 F4 3E 00 3 # 04 00 Help 3B E0 HOME 32 E0
Left Windows 5B E0 F5 3F 00 4 $ 05 00 New 3E E0 Refresh 67 E0
Num Lock 45 00 F6 40 00 0.05 06 00 Office Home 3C E0 Search 65 E0
Page Down 51 E0 F7 41 00 6 ^ 07 00 Open 3F E0 Stop 68 E0
Page Up 49 E0 F8 42 00 7 & 08 00 Print 58 E0 My Pictures 64 E0
Power 5E E0 F9 43 00 8 * 09 00 Redo 07 E0 My Music 3C E0
PrtSc 37 E0 F10 44 00 9 ( 0A 00 Reply 41 E0 Mute 20 E0
Right Alt 38 E0 F11 57 00 A 1E 00 Save 57 E0 Play/Pause 22 E0
Right Ctrl 1D E0 F12 58 00 B 30 00 Send 43 E0 Stop 24 E0
Right Shift 36 00 F13 64 00 C 2E 00 Spell 23 E0 +(Volume up) 30 E0
Right Windows 5C E0 F14 65 00 D 20 00 Task Pane 3D E0 - (Volume down) 2E E0
Scroll Lock 46 00 F15 66 00 E 12 00 Undo 08 E0 Media 6D E0
Sleep 5F E0 Down 50 E0 F 21 00 Mute 20 E0 Mail 6C E0
Space 39 00 Left 4B E0 G 22 00 Next Track 19 E0 Web/Home 32 E0
Tab 0F 00 Right 4D E0 H 23 00 Play/Pause 22 E0 Messenger 05 E0
Wake 63 E0 Up 48 E0 I 17 00 Prev Track 10 E0 Calculator 21 E0
0 52 00 Calculator 21 E0 J 24 00 Stop 24 E0 Log Off 16 E0
1 4F 00 E-Mail 6C E0 K 25 00 Volume Down 2E E0 Sleep 5F E0
2 50 00 Media Select 6D E0 L 26 00 Volume Up 30 E0 Help(on ke F1y) 3B E0
3 51 00 Messenger 11 E0 M 32 00 ? - 7D 00 Undo(on ke F2y) 08 E0
4 4B 00 My Computer 6B E0 N 31 00 45 E0 Redo(on ke F3y) 07 E0
5 4C 00 ’ ” 28 00 O 18 00 Next to Enter 2B E0 Fwd (on ke F8y) 42 E0
6 4D 00 - _ 0C 00 P 19 00 Next to L-Shift 56 E0 Send(on ke F9y) 43 E0
7 47 00 , < 33 00 Q 10 00 Next to R-Shift 73 E0
8 48 00 . > 34 00 R 13 00 DBE_KATAKANA 70 E0
总结
讲步骤,还要讲原因讲原理讲为什么。