windows通过修改注册表重定义键位。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ 下新建一个二进制值项: "Scancode Map"<br> 这个项目可实现对键盘按键的映射。这里映射的意思可理解为“替换”,可将任意一键替换成其它键。
Scancode Map格式
以16进制表示,更分为五个部分,每个逗号之间都为一个字节。
<pre> "Scancode Map" = 00,00,00,00,00,00,00,00, 02,00,00,00, 01,00, 02,00, 00,00,00,00 - 8个字节。 这是版本信息号。照例写就好。 - 4个字节。 这是映射键的总数。按照二进制的读写规则,低位在左,高位在右。02 00 00 00 这个数实际就是:00 00 00 02 。从 02 开始,一个映射键是 02 ,两个是03 ,依次递加,十个是 0B 。 - 2个字节。 表示替换后按键的”扫描码“。如:ESC 键的扫描码是 01 ,所以就表示 01 00 。再如 左Ctrl键扫描码是 1D 00, 而右Ctrl键是 1D E0 。 - 2个字节。 表示原按键的”扫描码“。格式同上。 以四个 00 结束。 </pre>
交换ctrl caps两个键
<pre> 左 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 "Scancode Map"=00,00,00,00,00,00,00,00,03,00,00,00,3a,00,1d,00,1d,00,3a,00,00,00,00,00 </pre>