而如果我們想要添加自己的全局熱鍵,只需要使用RegisterHotKey函數即可。其函數原型為:
BOOL RegisterHotKey( HWND hWnd, int id, UINT fsModifiers, UINT vk );
HWND類型是Windows中的窗口句柄類型,在Qt中,QWidget及其子類均可使用winId()函數得到。
第二個參數,是壹個原子操作類型,用ATOM GlobalAddAtom(LPCTSTR lpString )函數得到。這也是壹個Win32API,根據壹個string參數可以得到壹個唯壹的值。使用完之後,必須使用GlobalDeleteAtom函數刪除掉整個ATOM。其函數原型為ATOM GlobalDeleteAtom( ATOM nAtom )。
後面兩個參數,壹個是修飾鍵,壹個是普通按鍵。例如,假設我們想註冊Ctrl+F4這個熱鍵組合,則fsModifiers就是MOD_CONTROL,而vk就是VK_F4。
如果註冊成功,就返回true,否則,返回false。
註意,使用完之後,要使用UnregisterHotKey函數註銷,否則妳可能再也無法註冊這個熱鍵了!除非重啟。其函數原型為:BOOL UnregisterHotKey(HWND hWnd, int id )。
ok,熱鍵註冊就完成了。當按下熱鍵後,我們就會在QApplication裏的winEventFilter函數中收到壹個msg。這個msg,前面也說過,我們需要知道它的壹個元素message是不是WM_HOTKEY。如果是,就證明我們收到了Windows系統的熱鍵信息。在MSG結構中,我們可能還需要理解的元素有兩個,分別是wParam和lParam。wParam是註冊熱鍵時所用的id,也就是ATOM(原子)。而lParam就是我們的熱鍵了。其實際上是壹個32位的類型,前面16位代表普通按鍵,後16位代表的是修飾鍵。