# Key Map

可能是按键习惯问题,或者...,不管出于什么原因,你可能希望屏蔽一些键盘上的按键,让它们失效,或者映射为其它按键。

比如默认的大小写切换键 Caps Lock,可能是使用 MacBook Pro 的原因,通常我会把它映射为 Control 键,因为使用小拇指按下原本的 Control 键实在是有些麻烦。

# 使用注册表

在 Windows 系统中,有很多软件工具可以实现上述的目的,不过如果你不希望借助工具,并且不怕麻烦的话,可以通过注册表办到。

First

在开始菜单或者运行中输入 regedit 打开注册表编辑器,展开到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout

在 Windows 10 新版本中可以直接复制到注册表地址栏按 Enter 键定位。

右键点击 Keyboard Layout,选择“新建 -> 二进制值”,命名为 Scancode Map。

key-map-regedit

Second

以屏蔽 Caps Lock 键为例,可以将 Scancode Map 的数据修改为下面一串数字:

00 00 00 00 00 00 00 00 02 00 00 00 00 00 3a 00 00 00 00 00

前面 8 对以及结尾 4 对 0,可以认为是固定格式。

02 00 00 00 则是指明了有多少个映射。这里为什么是 2 个映射呢?因为结尾的 4 对 0 也算一个,所以映射的数量总是实际映射数量加壹。

另外,由于数据需要填充成 4 对的形式,所以数量为 00 00 00 02,然后将它倒过来输入。注意同一对内的数字不要颠倒顺序。

如果你映射数量是 10 或者更多,则不要直接写 10,在 16 进制中只有 0 到 9,a 到 f(代表 10 到 15),16 进制的 10 转化为 10 进制,是 16。

00 00 3a 00 则是让 Caps Lock 失效的关键,它们分为 2 个部分,目的是把 3a 00(Caps Lock 键)映射为 00 00(空)。

这些数字被称为扫描码,Caps Lock 键的 16 进制扫描码是 3a,填充成 2 对,为 00 3a,然后倒序输入。

Third

再举个例子,就是上面说的将 Caps Lock 键映射为右 Ctrl 键。

右 Ctrl 键的 16 进制扫描码为 e0 1d,Caps Lock 键的扫描码为 3a。按照上述组织数据的方法,最终需要填入的数据为:

00 00 00 00 00 00 00 00 02 00 00 00 1d e0 3a 00 00 00 00 00
key-map-scancodes

End

修改完成后需要重新启动才会生效。此修改会影响所有用户,若要恢复,可以将 Scancode Map 删除。

# 键盘扫描码

键位 扫描码
ESC 00 01
TAB 00 0F
CapsLock 00 3A
左 Shift 00 2A
右 Shift 00 36
左 Alt 00 38
右 Alt E0 38
左 Ctrl 00 1D
右 Ctrl E0 1D
PrintScreen E0 37
上矢印 E0 48
下矢印 E0 50
右矢印 E0 4D
左矢印 E0 4B
Insert E0 52
Delete E0 53
Home E0 47
End E0 4F
PageUp E0 49
PageDown E0 51
左 Win key E0 5B
右 Win key E0 5C
application E0 5D
PAUSE 00 45
ScrollLock 00 46

# 参考