我有一个非常著名的WinAPI函数:
BOOL WINAPI RegisterHotKey(
__in_opt HWND hWnd,
__in int id,
__in UINT fsModifiers,
__in UINT vk
);
我看到我应该只能使用MOD_ALT
、MOD_CONTROL
、MOD_SHIFT
、MOD_WIN
键以及MOD_NOREPEAT
。
因此,我可以使用以下命令为Shift+A
组合的 A 键创建一个系统范围的热键:
RegisterHotKey(NULL,1,MOD_SHIFT,0x41);
现在重要的问题是:
我如何使用 NUM LOCK/SCROLL LOCK/CAPS LOCK(就像 MOD_SHIFT
和其他状态一样)作为我将注册的系统范围热键的修饰符,以便组合键的注册键在打开任何此类"LOCK"键时表现为热键,并且也表现为正常, 当任一"LOCK"键关闭时未捕获的钥匙?
我认为计时器和具有GetKeyState(VK_NUMLOCK)&0xFFFF
之类的监视来注册/取消注册热键的解决方案太草率了,可能会减慢或干扰系统性能,这听起来像是一种不完整的进行方式,因为它与系统范围的键行为有关。
还有什么更好的方法?
根据情况,我可能只会在事件代码的开头检查"LOCK"键的状态。
否则,如果您真的想要,可以使用SetWindowsHookEx创建一个键盘挂钩来进行监视。