环境
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 | 0000 0000 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 | 0000 0000 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 |