///宣告鍵盤鉤子的封送結構型別
///[structlayout(layoutkind.sequential)]
public
class
keyboardhookstruct
//使用windows api函式代替獲取當前例項的函式,防止鉤子失效
[dllimport("
kernel32.dll")]
public
static
extern intptr getmodulehandle(string
lpmodulename);
//安裝鉤子
[dllimport("
user32.dll
", charset = charset.auto, callingconvention =callingconvention.stdcall)]
public
static
extern
int setwindowshookex(int idhook, hookproc lpfn, intptr hinstance, int
threadid);
//下乙個鉤子
[dllimport("
user32.dll
", charset = charset.auto, callingconvention =callingconvention.stdcall)]
public
static
extern
int callnexthookex(int idhook, int
ncode, int32 wparam, intptr lparam);
//解除安裝鉤子
[dllimport("
user32.dll
", charset = charset.auto, callingconvention =callingconvention.stdcall)]
public
static
extern
bool unhookwindowshookex(int
idhook);
//取得當前執行緒編號(執行緒鉤子需要用到)
[dllimport("
kernel32.dll")]
static
extern
int getcurrentthreadid();
privateint keyboardhookproc(int
ncode, int32 wparam, intptr lparam)
}return
callnexthookex(hkeyboardhook, ncode, wparam, lparam);
}
privateint keyboardhookproc(int
ncode, int32 wparam, intptr lparam)
}return
callnexthookex(hkeyboardhook, ncode, wparam, lparam);
}
執行緒hook keyboardhookproc函式的各個引數意義如下:ncode 訊息的型別,分hc_action和hc_noremove
wparam 按鍵的虛擬鍵碼
lparam 按鍵的相關引數資訊,包括重複時間、按鍵的狀態(按下或彈起)等
全域性hook keyboardhookproc函式的各個引數意義如下:
ncode 訊息的型別,有hc_action
wparam 按鍵的狀態(按下或彈起)wm_keydown、wm_keyup、wm_syskeydown、wm_syskeyup
lparam 指向keyboardhookstruct結構的指標,該結構包含了按鍵的詳細資訊。
publicvoid
start()
}}
publicvoid
start()
}}
注:idhook 鉤子型別,即確定鉤子監聽何種訊息
執行緒鉤子監聽鍵盤訊息應設為2,全域性鉤子監聽鍵盤訊息應設為13
執行緒鉤子監聽滑鼠訊息應設為7,全域性鉤子監聽滑鼠訊息應設為14
全域性鍵盤鉤子失效與WebRTC的關係分析
1.背景 使用qt cef做了乙個客戶端,並在客戶端中註冊了全域性鍵盤鉤子,本來一切都工作正常,鍵盤鉤子也正常,但是我發現當我在cef中載入了執行webrtc功能的頁面時,鍵盤鉤子盡然失效了,不過切換到其他的桌面程式的時候,發現這個鍵盤鉤子還是存在的,起作用的。2.分析 通過上面的現象開始排查,we...
WPF與WinForm對比多執行緒程式設計優化是關鍵
it168技術 很多人問過我這樣乙個問題 wpf和以前的winform有什麼區別?我之前的回答一直是 沒什麼區別,僅僅是表示層用xaml封了層皮,使得windows看起來更炫了。今天 確切的說是昨天 我終於發現了我膚淺。首先我要澄清一下,wpf較之winform的先進之處不止一點點。對於wpf,很多...
多執行緒全域性函式與訊息機制的結合
這裡我用vc 6.0建立了乙個名為muti tread的對話方塊程式。在muti threaddlg.h header file 中新增 generated message map functions afx msg declare message map 在 muti threaddlg.cpp ...