
























在过去的一篇文记中提到,我对自己的键盘布局做了一系列的按键替换。回想起为此还稍稍做过一些系统性的记录,故于此整理保存。
Windows 下在软件层面映射按键的方法有多种,如 PowerToys、AutoHotkey 以及修改注册表。
上述几种方法中,注册表级别的操作应当级别最低且系统占用最小,甚至能作用于虚拟机中,因此采用该种方法。
Scancode Map 注册表项的类型为 REG_BINARY,位于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 单元下。
对于现代 USB 键盘,前置驱动程序 kbdhid.sys 将 USB HID Usage ID 转义为 PS/2 Scan Code (Set 1) 后1,Windows 2000 时代的驱动程序 kbdclass.sys 将拦截键码,并与该注册表中的数据对比2,篡改键值后发送至输入队列。
该注册表值共由四部分组成:
共 8 字节,存储版本信息等数据,对于当前版本固定为 00 00 00 00 00 00 00 00 即可。
共 4 字节,表示映射项的总数,但应包含最后的空终止符,因此实际数量为映射数 + 1。
按照 Little Endian3 填入。
其实全部为 0 也没有关系。
核心数据区域,每 4 字节为一组映射,每个按键为 2 字节,格式为 [新键码] [原键码]。
按照 Little Endian3 填入。
例如,Caps Lock 键值为 0x003A,Left CTRL 键值为 0x001D,用 Left CTRL 功能覆盖键盘上的 Caps Lock 按键,则需填入 1D 00 3A 00。
这还是文档的第一个官方示例,看来觊觎这个黄金键位的也是大有人在🥲。
共 4 字节,包含一个 Null Terminator,固定为 00 00 00 00。
其实不填也没有关系。
Tip
Caps Lock → BackspaceBackspace → DeleteDelete → Caps LockRight CTRL → My Computer00 00 00 00 00 00 00 00
05 00 00 00 0E 00 3A 00
3A 00 53 E0 53 E0 0E 00
6B E0 1D E0 00 00 00 00Footnotes
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。