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。