注册表:更改键盘扫描码映射
stopwin.reg内容:
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,00,00,5B,E0,00,00,5C,E0,00,00,00,00
键Keyboard Layout下新建或修改二进制值Scancode Map,大小为十六进制表示的数值的大小:
左边字节是数值的低位,右边字节是高位。例如:0xABEF
可以表示为hex:EF,AB
删除Scancode Map值可以用:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=-
原理:
键盘扫描码是操作系统识别键盘按键的标识,有点类似按键的ID,若一个按键没有扫描码,那么此按键不被操作系统识别。
注册表键Keyboard Layout下的二进制Scancode Map值可以修改键盘扫描码的映射,将一个按键的扫描码影射为另一个。
如果键盘A键的扫描码value1映射为value2,这样当A键按下时,操作系统会获得扫描码value2,然后运行对应扫描码value2的处理程序,看起来好像是扫描码为value2的按键(而非键A)被按下了。
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
-
前8个字节是版本信息,固定为0即可;
-
然后4个字节表示修改映射的个数,此处为3个(低位在左,高位在右);
-
后面每4个字节表示一个映射修改,此处共3个修改。其实有效修改只有2个,最后1个(也就是最后4个0字节)为固定结束符。
-
每个按键的修改占4个字节:右边2字节为原扫描码,左边2字节为修改后的扫描码。
这个例子中,看第三行00,00,5B,E0:
其中0xE05B为左Win键的扫描码,修改为0x0000,效果为左Win键失效。
修改完注册表后重启电脑生效。