如何防止 RegisterHotKey 阻止其他应用程序的密钥?

use*_*594 4 c++ winapi registerhotkey

我正在编写一个 win32 应用程序,需要在焦点未对准时使用热键(它在后台运行而不绘制窗口)。我使用 RegisterHotKey 来分配一些键,但这会阻止所有其他进程。例如,我分配了“c”键,当我在记事本中按下它时,没有任何反应。

Jon*_*ter 5

RegisterHotKey()注册全局热键。热键在常规键盘输入处理之前进行处理,这意味着如果您成功注册热键,按下该键将导致您收到热键消息,而不是获得焦点的应用程序获得正常WM_KEYDOWN/WM_CHAR消息。您已有效阻止其他应用程序看到该按键。

这是设计使然。

显然,避免像您描述的那样发生冲突的解决方案是注册其他应用程序可能使用的热键。如果您将不带任何限定符的 C 注册为热键,则其他程序将不会看到 C 键被按下。相反,您应该使用 Ctrl/Shift/Alt 等限定符来防止热键干扰键盘的正常使用。

除非有其他程序处于活动状态,否则无法注册全局热键。如果您想要实现这样的情况,即您的热键在桌面处于活动状态但没有其他活动时起作用,您可以使用消息挂钩将代码注入桌面进程(通过SetWindowsHookEx())并以这种方式拦截按键操作。但你不能用 来做到这一点RegisterHotKey()