使用qt
方法實現全域性熱鍵有兩種方法,一種是使用第三方庫
libqxt
其中的qxtglobalshortcut
類;另一種是呼叫
windows的
api。本文主要使用第二種方法實現功能。在呼叫前需包含標頭檔案。
主要步驟有兩個:
1、使用
registerhotkey
函式註冊熱鍵;
2、使用事件全域性過濾其函式
wineventfilter
相應熱鍵;
第一步:如何註冊熱鍵
通過registerhotkey
函式可以新增自己的全域性熱鍵,函式原型為:
bool
winapi
registerhotkey(
__in_opt
hwnd hwnd,
__in
int
id,__in
uint
fsmodifiers,
__in
uint
vk);
hwnd:
接收熱鍵產生wm_hotkey
訊息的視窗控制代碼。
在qt中使用
widget
中的winid()
可得到。
id:定義熱鍵的識別符號。呼叫執行緒中的其他熱鍵不能使用同樣的識別符號。應用功能程式必須定義乙個0
x0000-0xbfff範圍的值。乙個共享的
dll必須定義乙個範圍為0xc000-0xffff的值(
globaladdatom函式返回該範圍
)。為了避免與其他動態鏈結庫定義的熱鍵衝突,乙個dll
必須使用
globaladdatom
函式獲得熱鍵的識別符號。使用完之後,必須使用
globaldeleteatom
函式刪除掉
這個atom
,其函式原型為atom globaldeleteatom( atom natom )
。fsmodifoers:
定義為了產生wm_hotkey
訊息而必須與由
nvirtkey
引數定義的鍵一起按下的鍵。
(mod_alt
,mod_control
,mod_shift
等)。
nvirtkey:(
vk_f1,
vk_f2,『a
』,『s
』等)。
第二步:如何響應熱鍵
qt通過過載
裡的wineventfilter
函式,這個函式是用來響應
windows系統訊息的,函式原型為
virtual bool wineventfilter(msg *msg, long *result)
。當msg
指標中的
message
(msg
結構中的乙個元素)為
wm_hotkey
型別時,就是使用者激發了熱鍵
。第三步:在析構函式中登出atom
和熱鍵。
QT5 全域性熱鍵
後來在網上找,找到了乙個站在巨人肩膀上的博主,分享的乙個全域性熱鍵的使用類。完整的demo專案的github鏈結如下 使用方法如下 初始化變數,第乙個引數,熱鍵的快捷鍵組合,第二個引數為物件 shortcut new myglobalshortcut ctrl shift y realmoniter...
使用鉤子技術實現QT中的全域性熱鍵
qt中的窗體只有獲得焦點的情況下,才會響應按鍵或滑鼠事件 mfc的窗體是否也是如此?但是在實際開發過程中,我們常常需要的是即使某些窗體處於失去焦點狀態時,也能響應相應的鍵盤或者滑鼠事件。那麼,應該如何實現呢?筆者在遇到這種情況時,首先考慮的還是使用事件監控的方式,但筆者在實際使用中發現,該種方式不是...
實現gnome桌面的全域性熱鍵
gtk 2.0 沒有提供全域性熱鍵的功能,而需要使用gconf和 metacity才能得到該功能。不過有個叫 mikkel kamstrup erlandsen 的人寫了乙個 libgtkhotkey 可以提供該功能,而且是跨平台的。在fedora系統上,安裝libgtkhotkey su yum ...