请问如何注册全局快捷键?是否有相关代码和例子呢?
在网上搜罗到:
1. 要重新实现QApplication中的winEventFilter函数,这是用来响应windows系统信息的。winEventFilter中判断 msg为WM_HOTKEY时即为用户激发了热键。 virtual bool winEventFilter(MSG *msg, long *result);
2. 用RegisterHotKey和UnregisterHotKey。 我们不知道某一个组合热键是否已经被占用,可以查看RegisterHotKey的返回值来判断,随后马上用UnregisterHotKey注销即可。
3. 自己重载的QApplication中可以加入Qt风格的Signals。捕获热键时,可以让signal传递出所按辅助键及主键的键值,其他位置的响应操作就是纯Qt风格了。
4. 要保存窗口句柄和热键ID,注销时要用到。
参考信息:
BOOL RegisterHotKey( /* 成功时返回非零值*/
HWND hWnd,/*响应该敏感键的窗口句柄*/
Int id,/*该敏感键的唯一标示符*/
UINT fsModifiers,/*该敏感键的辅助按键键值*/
UINT vk /*该敏感键的键值*/ );
其中id在应用程序中的取值范围为0x0000到0xBFFF之间,动态链接库的取值范围为0xC000到0xFFFF之间。可以用 GlobalAddAtom函数来设置id,GlobalAddAtom的返回值在0xC000到0xFFFF范围之间,可以这样 GlobalAddAtom("myhotkey")-0xC000。
退出时要调用GlobalDeleteAtom(id)。
UnregisterHotKey(windowHandle,hotkeyid);
bool winEventFilter(MSG *msg, long *result)
{
if(WM_HOTKEY==msg->message)
{
qDebug()<<"winmsg return true";
emit hotKey(int(msg->wParam),LOWORD(msg->lParam),HIWORD(msg->lParam));
return TRUE;
}
return FALSE;
}
但是具体如何添加还是不是很清楚,不知是否有人愿意详细讲解一下。
谢谢了