0%

更改windows键位

环境
Windows 10

最近发现 Windows Terminal 正式版发布了, ssh 到 linux 服务器试了下感觉还不错,至少不再有原来奇奇怪怪的快捷键和排版问题了,默认的字体样式也还阔以233。简单配置了一下打算把吃灰的 windows 当作备用开发机。然而发现习惯了 mac 下把 CapsLock 映射为 Ctrl , windows 下老是按错,于是乎查了一下解决办法。

先说解决方法

win + r , 输入 regedit , 打开注册表编辑器,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout , 新建二进制值 ScanCode Map

1
2
3
0000 0000 0000 0000
0200 0000 1D00 3A00
0000 0000

保存重启即可

然后说说原理

ScanCode Map 的格式为

二进制值采用 小端序

  • 前8个字节为版本信息
  • 接着4个字节为需要映射的按键个数(从2开始,即映射1个此处为2,映射2个此处为3)
  • 紧跟着就是N段4个字节的映射关系(N和上一步中填写的映射个数有关),前2个字节为映射后的键盘扫描码,后2个字节为映射前的键盘扫描码
  • 最后4个字节全0结束

至于为什么从2开始,我个人无责任猜测:因为最后还有4字节的结束符,因此这边的大小 * 4字节刚好就是整段大小

例:

CapsLock 映射为 Ctrl 的基础上,同时把 Ctrl 映射为 CapsLock

1
2
3
0000 0000 0000 0000
0300 0000 1D00 3A00
3A00 1D00 0000 0000

最后是所有的键盘扫描码

# X(Set 2) keycap
1 29 ` ~
2 02 1 !
3 03 2 @
4 04 3 #
5 05 4 $
6 06 5 % E
7 07 6 ^
8 08 7 &
9 09 8 *
10 0a 9 (
11 0b 0 )
12 0c - _
13 0d = +
15 0e Backspace
16 0f Tab
17 10 Q
18 11 W
19 12 E
20 13 R
21 14 T
22 15 Y
23 16 U
24 17 I
25 18 O
26 19 P
27 1a [ {
28 1b ] }
29 2b \ |
30 3a CapsLock
31 1e A
32 1f S
33 20 D
34 21 F
35 22 G
36 23 H
37 24 J
38 25 K
39 26 L
40 27 ; :
41 28 ‘ “
42 ff non-US-1
43 1c Enter
44 2a LShift
46 2c Z
47 2d X
48 2e C
49 2f V
50 30 B
51 31 N
52 32 M
53 33 , <
54 34 . >
55 35 / ?
57 36 RShift
58 1d LCtrl
60 38 LAlt
61 39 space
62 e0-38 RAlt
64 e0-1d RCtrl
75 e0-52 Insert
76 e0-53 Delete
80 e0-47 Home
81 e0-4f End
85 e0-49 PgUp
86 e0-51 PgDn
79 e0-4b Left
83 e0-48 Up
84 e0-50 Down
89 e0-4d Right
90 45 NumLock
91 47 KP-7 / Home
92 4b KP-4 / Left
93 4f KP-1 / End
95 e0-35 KP-/
96 48 KP-8 / Up
97 4c KP-5
98 50 KP-2 / Down
99 52 KP-0 / Ins
100 37 KP-*
101 49 KP-9 / PgUp
102 4d KP-6 / Right
103 51 KP-3 / PgDn
104 53 KP-. / Del
105 4a KP–
106 4e KP-+
108 e0-1c KP-Enter
110 01 Esc
112 3b F1
113 3c F2
114 3d F3
115 3e F4
116 3f F5
117 40 F6
118 41 F7
119 42 F8
120 43 F9
121 44 F10
122 57 F11
123 58 F12
124 e0-37 PrtScr
0 54 Alt+SysRq
125 46 ScrollLock
126 e1-1d-45 Pause
0 e0-46 Ctrl+Break
0 e0-5b LWin (USB: LGUI)
0 e0-5c RWin (USB: RGUI)
0 e0-5d Menu
0 e0-5f Sleep
0 e0-5e Power
0 e0-63 Wake