使用 NUM/CAPS/SCROLL LOCK 作为 WinAPI 中的 RegisterHotKey 修饰符



我有一个非常著名的WinAPI函数:

BOOL WINAPI RegisterHotKey(
  __in_opt  HWND hWnd,
  __in      int id,
  __in      UINT fsModifiers,
  __in      UINT vk
);

看到我应该只能使用MOD_ALTMOD_CONTROLMOD_SHIFTMOD_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创建一个键盘挂钩来进行监视。

最新更新