如何借助注册表来修改键盘按键的映射?
时间:2023-12-12 21:41:54
在使用电脑的过程中会发现,键盘上很多按键我们平时根本使用不到,但是如果我们不小心碰到了一些按键,将会导致我们无法正常使用键盘,这种情况下,这个按键对我们没有一点好处,并且还是影响我们的使用,那么有什么办法来更改键盘按键的映射吗?其实这个方法很多,本文将给大家介绍借助注册表来修改键盘按键映射的方法。
在Windows XP/Windows 2000 系统中,提供了一种新的键盘扫描码映射方法,使你能随意地设置键盘键位的布局,这就是注册表中的 “Scancode Map”我们巧妙利用“Scancode Map”就可将普通键盘改造成随心随意的个性化键盘。
为了正确设置,我们有必要先了解一下“Scancode Map”(扫描码映射)。
“Scancode Map”是注册表中[HKEY_LOCAL_MacHINE\SYSTEM\CurrentControlSet\Control\Keyboard 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_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard 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_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard 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_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard 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
再次说明:所有对注册表的修改,必须在重新启动电脑后,才能生效。
Linux系统中可以用下面命令:
[root@localhost ~]# setkeycodes e06a 104
[root@localhost ~]# setkeycodes e069 109
在linux环境下可以用showkey命令测试按键的键盘码或者扫描码(加-s选项),注意按键“按下”和“松开”的扫描码可能不一样,例如大小写切换键,按下是3A,松开是BA
键盘扫描码对应表
点击图片放大观看
现在使用的是fedora 20,将这两句写在了/etc/rc.d/rc.local中,保证能够在启动后被加载。
以上便是通过注册表来修改键盘按键映射的方法,如果你对键盘上一些不常用的按键“忍无可忍”了,就可以用上面的方法将按键映射修改,关于恢复原来按键功能的方法,也在上文中有提到过,只需按照步骤操作即可。