Windows 上自定义按键映射¶
针对我的奇怪需求,使用 Win API 实现了
- 禁用
num lock
- 将
caps lock
映射成win + space
- 将键盘布局状态同步到
caps lock
的 LED 指示灯
代码开源在 stalomeow/KeyboardRemapper。
安装¶
使用 Scoop 从 stalomeow/ScoopBucket 安装。
sudo scoop install stalo/kbdremap
开机会自动启动。如果进程意外终止,可以使用命令 kbdremap
重启。
按键映射¶
使用 LowLevelKeyboardProc 实现,代码可以借鉴 PowerToys KeyboardManager。
同步指示灯¶
使用 全局钩子 监听键盘布局变化(HSHELL_LANGUAGE
)事件,然后根据当前布局设置指示灯状态。
检查是否为中文键盘布局¶
static bool IsChineseKeyboardLayout()
{
CHAR name[KL_NAMELENGTH];
// https://learn.microsoft.com/en-us/globalization/keyboards/kbdus_2
return GetKeyboardLayoutNameA(name) && strcmp(name, "00000804") == 0;
}
KeyboardLayoutName 就是 Keyboard identifier,简体中文对应的是 "00000804"
。
设置指示灯¶
需要引入头文件 ntddkbd.h。具体的思路参考 windows - Is it possible to control capslock light without actual capslocking? - Stack Overflow。