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

时间:2015-12-02 23:04:05

标签: c++ windows visual-c++

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

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

有没有办法注册热键而不会发生冲突和阻塞?

1 个答案:

答案 0 :(得分:1)

RegisterHotKey的MSDN页面说:

  如果为热键指定的击键有,则

RegisterHotKey失败   已被另一个热键注册。

以及:

  

返回值

     

输入:BOOL

     

如果函数成功,则返回值为非零值。

     

如果函数失败,则返回值为零。要获得扩展错误   信息,请致电GetLastError

换句话说,if(!RegisterHotKey(...)) ... deal with error ...会捕获各种形式的“无法正常工作”,包括热键已经在使用 - 您需要查看GetLastError来区分“密钥”已经在使用“和其他人。

我认为注册热键的重点在于,无论发生什么,您的应用程序始终都会获得该按键。如果它恰好是其他应用程序中的流行键,当然有点烦人,但它仍然是注册热键的重点。如果您不喜欢这种效果,那么请不要注册热键,或使用不太可能被其他应用程序使用的更加模糊的组合。不知道如何解决这个问题 - 如果你和你的应用程序一起运行IE,并且按下ALT-uparrow,你想要系统做什么?