通过注册表修改键盘按键的映射

Scancode Map的妙用,按键随意变换!

在Windows XP/Windows 2000 系统中,提供了一种新的键盘扫描码映射方法,使你能随意地设置键盘键位的布局,这就是注册表中的 “Scancode Map”我们巧妙利用“Scancode Map”就可将普通键盘改造成随心随意的个性化键盘。
为了正确设置,我们有必要先了解一下“Scancode Map”(扫描码映射)。
“Scancode Map”是注册表中[HKEY_LOCAL_MacHINESYSTEMCurrentControlSetControlKeyboard Layout]中的一个二进制键值(默认没有,需新建),并且有固定的格式。
Scancode Map 代码的一般格式是:“hex:00,00,00,00,00,00,00,00,|02|,00,00,00,|映射之后的扫描码(XX XX),原扫描码(XX XX)|00,00,00,00”。
其含义为:
前8个00(DWord两个0)是版本号和头部字节,
接下来的“02”表示映射数,其最小为值为“02”,表示只映射一组(这里的数值是映射数目加上末尾用作结尾的“00,00,00,00”,因此总是比实际的映射数目大一),若要映射多组,只需增加相应的值即可,如映射2组其值应为“03”,3组为“04”。
后边代码每4个是一组:前两个是映射后键位的扫描码,后两个是键位原扫描码。如果要交换两个键,则一个有两组映射,四个值的排列形式是:键A,键B,键B,键A——它表示:键A成为键B,键B成为键A。
最后以“00,00,00,00” 结尾。
注意:在注册表中输入时,需要将扫描码的高低字节交换一下。
另外,如果想要某个键失效,将它的扫描码映射为“00 00”即可。

若要恢复键盘键位原来的布局,只需定位于注册表[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout],删除"Scancode Map"键值

特别说明:
1. 在目前的Windows版本下面,对键盘映射是全局的,而不是针对某个用户的,如果您修改添加或者删除了某个映射,那么不管哪个用户使用,键盘都发生了变化;
另外,如果一台电脑有多个键盘,那这些键盘都会产生同样的变化。
2. 在XP上不能屏闭POWER SLEEP WAKE UP 这三个键。(没有亲自测试,笔记本上没有这三个键,如果真不行就扣掉吧 ------ 开玩笑,在台式机上这三个键通过bios设置应该可以把相应功能禁用掉)
3. thinkpad 上的“Fn”键是不能被映射的,因为它不能被OS识别,所以不能使用上面的方式进行设置。thinkpad新版的bios里面提供了一个功能,让左侧的“Fn”键和相邻的“Ctrl”键进行功能互换,感觉用处不是很大,有需要的朋友可以去试试看。(如果在笔记本的 bios上找不到这个功能的话,需要刷新版bios,操作很简单,不要恐惧)
导入或设置或修改或删除注册表键值后,重启你的电脑,改变就生效了。

也可以用将下面的文本存成“scancode.reg”,双击导入注册表。键值可通过查上面提到的键位表查询,找到你要替换的 Scan Code码,把##,##替换掉就可以了。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout] 
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,##,##,##,##,00,00,00,00 

了解了“Scancode Map”之后,我们就可以来利用添加功能键了。比如WIN键扫描码为:“E0 5B”,Esc为“00 01”,左边的Ctrl为“00 1D”,更详细的扫描码请见键盘扫描码。

           举例:

比如:前面提到的IBM ThinkPad键盘,为了把那个浏览器网页前后浏览的键禁止,可以设置为: 
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,00,00,6A,E0,00,00,69,E0,00,00,00,00 

比如:说我们想把F9,F10键修改成为音量调整键,通过查表,可以得知:
F9、F10扫描码分别为(00,43)、(00,44),
Volume Up、Volume Down的扫描码分别为(E0,30)、(E0,2E),
这样只要将Scancode设置为如下就可以了: "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,30,E0,43,00,2E,E0,44,00,00,00,00,00 
( 含义为:          |    版本号和头部字节 | 两组映射 |   第一组 | 第二组 | 结尾终止 | )

我是把“后退”和“前进”两个按键映射为“上翻页”和“下翻页”,注册表文件如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,49,e0,6a,e0,51,e0,69,e0,00,00,00,00

再次说明:所有对注册表的修改,必须在重新启动电脑后,才能生效。 

http://blog.chinaunix.net/uid-174325-id-3912617.html

--------------------------------------------------------------------------------

Scancode Map 注册表项来实现键盘按键映射。

 位于注册表的:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard 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 

  1. 8个字节。 这是版本信息号。照例写就好。
  2. 4个字节。 这是映射键的总数。按照二进制的读写规则,低位在左,高位在右。02 00 00 00 这个数实际就是:00 00 00 02 。从 02 开始,一个映射键是 02 ,两个是03 ,依次递加,十个是 0B 。
  3. 2个字节。 表示替换后按键的”扫描码“。如:ESC 键的扫描码是 01 ,所以就表示 01 00 。再如 左Ctrl键扫描码是 1D 00, 而右Ctrl键是 1D E0 。
  4. 2个字节。 表示原按键的”扫描码“。格式同上。
  5. 以四个 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 

http://www.cnblogs.com/Rainr/archive/2012/01/21/2328046.html

原文地址:https://www.cnblogs.com/findumars/p/5037815.html