Windows 上借助注册表来修改键盘按键的映射
转载自:https://flyzto.com/windows-scancode-map.html
背景
在使用电脑的过程中会发现,键盘上很多按键我们平时根本使用不到,但是如果我们不小心碰到了一些按键,将会导致我们无法正常使用键盘,这种情况下,这个按键对我们没有一点好处,并且还是影响我们的使用,那么有什么办法来更改键盘按键的映射吗?其实这个方法很多,本文将给大家介绍借助注册表来修改键盘按键映射的方法
在 Windows系统中,提供了一种键盘扫描码映射方法,使你能随意地设置键盘键位的布局,这就是注册表中的 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,01,00,02,00,00,00,00,00
其含义为:
第一部份:8 个 00 ,这是版本信息号。照例写就是了
第二部份:4 个字节。表示映射键的总数。按照二进制数的读写规则,低位在左,高位在右,02 00 00 00 这个数实际就是:00 00 00 02 。 从 02 开始,一个映射键是 02 ,两个是03 ,依次递加,十个是 0B
第三部份:每 4 个是一组,前两个是映射后键位的扫描码,后两个是键位原扫描码
第五部份:以 4 个 00 结束
注意:在注册表中输入时,需要将扫描码的高低字节交换一下
另外,如果想要某个键失效,将它的扫描码映射为“00 00”即可
若要恢复键盘键位原来的布局,只需定位于注册表
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
删除 Scancode Map 键值即可
应用
了解了 Scancode Map 之后,我们就可以来利用添加功能键了。比如 Win 键扫描码为 E0 5B,Esc 为 00 01,左 Ctrl 为 00 1D,更详细的扫描码请见键盘扫描码
如果我们想把 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 版本下面,对键盘映射是全局的,而不是针对某个用户的,如果修改添加或者删除了某个映射,那么不管哪个用户使用,键盘都发生了变化