c++ - 有没有办法在没有冲突的情况下在Windows上注册热键?

标签 c++ windows visual-c++

<分区>

我正在编写一个 Windows 程序,我需要注册一个热键。但是,我担心 RegisterHotKey() 引起的冲突。

此外,当您触发热键消息时,按键事件会被阻止。例如,您调用 RegisterHotkey(0, 0, MOD_NOREPEAT | MOD_ALT, VK_UP) 来注册热键 ALT + 。如果在 explorer.exe 中按 ALT + ,explorer.exe 将不会收到此消息(原来是 ALT + 在 explorer.exe 中上一级)。

有没有办法不冲突不阻塞地注册热键?

最佳答案

RegisterHotKey 的 MSDN 页面说:

RegisterHotKey fails if the keystrokes specified for the hot key have already been registered by another hot key.

连同:

Return value

Type: BOOL

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

换句话说,if(!RegisterHotKey(...)) ...处理错误... 会捕获各种形式的“无效”,包括热键是already in use - 你需要查看 GetLastError 来区分“key already in use”和其他。

我认为注册热键的全部意义在于,无论发生什么,您的应用程序总能获得该按键。如果它恰好是某些其他应用程序中的流行键,那当然有点烦人,但这仍然是注册热键的要点。如果您不喜欢这种效果,则不要注册热键,或使用不太可能被其他应用程序使用的更隐蔽的组合。不确定如何解决这个问题 - 如果您将 IE 与您的应用程序一起运行并按下 ALT-uparrow,您究竟希望系统做什么?

关于c++ - 有没有办法在没有冲突的情况下在Windows上注册热键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34054785/

相关文章:

c++ - 如何在 VS Community 2015 中创建 C++ 控制台应用程序?

c++ - 绘制视觉上平滑的色调渐变?

windows - 批量使用剪辑时转义字符

c++ - 使用 Windows API 检测网卡和以太网设备的 IP 地址

c - 如何在 Windows 上的 sqlite3 中启用全文搜索

c++ - 无法为 ocx 注册输出错误

c++ - 对于 C++ 模板,有没有办法找到 "valid"输入的类型?

c++ - IpOpt 拒绝解决无约束问题

c - 为什么我必须按 ctrl+z 两次才能中断文件末尾?

c++ - 如何在 KeyEventArgs...VC++2010 中一起处理两个函数?