QTwin热键接收消息
1.注册热键
BOOL RegisterHotKey(
HWND hWnd, //响应该热键的窗口句柄
Int id, //该热键的唯一标识
UINT fsModifiers, //该热键的辅助按键
UINT vk //该热键的键值
);
为了得到唯一标识,我们还将用到另一个API函数
ATOM GlobalAddAtom(
LPCTSTR lpString //自己设定的一个字符串
);
注: HotKeyId的合法取之范围是0x0000到0xBFFF之间, GlobalAddAtom函数得到的值
在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。
热键的辅助按键包括Mod_Ctrl 、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows
键,即其键面上有Windows标志的那个键,其值为Mod_win。
示例:注册ALT+F8热键
iHotKeyId = GlobalAddAtom(L"RegHookHotKey") - 0xc000;
RegisterHotKey((HWND)this->winId(), iHotKeyId, MOD_ALT, VK_F8);
只注册F8热键
RegisterHotKey(Handle, hotkeyid, 0, VK_F8);
2.销毁热键函数
UnRegisterHotKey(handle, HotKeyId); //注销HotKey, 释放资源
3.QT接收热键消息
一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应
用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消
息的格式为:
idHotKey = (int) wParam; // 该参数在设置系统级的热键有用,一般不予使用
fuModifiers = (UINT) LOWORD(lParam); //热键的辅助按键
uVirtKey = (UINT) HIWORD(lParam); //热键的键值
QT窗体实现函数:nativeEvent
在函数中接收消息
bool Dialog::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
MSG* msg = (MSG*)(message);
if(msg->message == WM_HOTKEY)
{
qDebug("%x, %x", HIWORD(msg->lParam), LOWORD(msg->lParam));
close();
}
return false;
}