如何防止注册热键阻止其他应用程序的密钥
How can I prevent RegisterHotKey from blocking the key for other applications?
我正在编写一个win32应用程序,该应用程序需要在不在焦点上时采用热键(它在后台运行而无需绘制窗口)。我使用注册热键来组合几个键,但这会阻止所有其他进程。例如,我分配了"c"键,当我在记事本中按下它时,没有任何反应。
RegisterHotKey()
注册全局热键。热键在常规键盘输入处理之前处理,这意味着如果您成功注册热键,按该键将导致您获得热键消息,而不是具有焦点的应用程序获得正常的WM_KEYDOWN
/WM_CHAR
消息。您有效地阻止了其他应用程序看到该键。
这是设计使然。
显然,避免像您描述的那样发生冲突的解决方案是不要注册其他应用程序可能使用的热键。如果将没有任何限定符的 C 注册为热键,则其他程序不会看到按下的 C 键。相反,您应该使用Ctrl/Shift/Alt等限定符来防止热键干扰键盘的正常使用。
除非其他程序处于活动状态,否则无法注册全局热键。如果你想实现这样的情况,比如说,你的热键在桌面处于活动状态时工作,但没有其他任何东西,你可以使用消息钩子将代码注入桌面的进程(通过SetWindowsHookEx()
)并以这种方式拦截按键。但是你不能用RegisterHotKey()
来做.
我只是尝试了UnregisterHotKey()
,用keybd_event()
模拟了密钥,然后再次RegisterHotKey()
。我不建议将其作为生产代码,最好使用钩子,但作为一个快速的黑客,我只想说它有效。
GetAsyncKeyState()
可用于确定是否按下了某些键,即使程序在后台运行也是如此。
相关文章:
- 从 Windows 中的其他应用程序 GUI 中提取数据
- 打开应用程序主窗口 在系统托盘图标中的其他应用程序之上
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- Xlib XSENDEVENT在其他应用程序/过程中
- CreateProcess:某些应用程序运行其他应用程序
- 全球安装的键盘钩可防止键盘输入其他应用程序
- Cython 带 STL 矢量和没有 NumPy 可以从其他应用程序调用,缺少什么?
- 与其他应用程序的交互
- 如何在C++中与其他应用程序进行交互
- 如何与其他应用程序共享 HGLOBAL?
- 在Windows 7和8下,其他应用程序无法启动openfiles.exe
- 在C++中设置产品ID版本、公司和其他应用程序信息
- 如何检查端口是否处于TIME_WAIT状态或已被其他应用程序占用
- 如何在Qt中显示其他应用程序的输出视频
- 禁用其他应用程序编辑注册表项
- .NET 查看其他应用程序的内存
- Qt应用程序在使用文件打开对话框后将焦点切换到其他应用程序
- 如何使用 c++ 从其他应用程序关闭设备启动时生成的错误消息框
- 如何防止注册热键阻止其他应用程序的密钥
- 更改其他应用程序的输入语言