我正在编写一个 win32 应用程序,需要在未获得焦点时使用热键(它在后台运行而不绘制窗口)。我使用 RegisterHotKey 来分配一些键,但这会阻止所有其他进程。例如,我分配了“c”键,当我在记事本中按下它时,没有任何反应。
RegisterHotKey()
注册全局热键。热键在常规键盘输入处理之前进行处理,这意味着如果您成功注册热键,按下该键将导致您收到热键消息,而不是获得焦点的应用程序获得正常的热键消息WM_KEYDOWN
/WM_CHAR
消息。您已有效阻止其他应用程序看到该按键。
这是设计使然。
显然,避免像您所描述的冲突的解决方案是not注册其他应用程序可以使用的热键。如果您将不带任何限定符的 C 注册为热键,则其他程序将不会看到 C 键被按下。相反,您应该使用 Ctrl/Shift/Alt 等限定符来防止热键干扰键盘的正常使用。
无法注册全局热键unless其他一些程序处于活动状态。如果您想实现这样的情况,例如,您的热键在桌面处于活动状态时起作用,但没有其他任何东西,您可以使用消息挂钩将代码注入桌面进程(通过SetWindowsHookEx()
)并以这种方式拦截按键。但你不能这样做RegisterHotKey()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)