hook(鉤子)是windows提供的一種訊息處理機制平台,是指在程式正常執行中接受資訊之前預先啟動的函式,用來檢查和修改傳給該程式的資訊,(鉤子)實際上是乙個處理訊息的程式段,通過系統呼叫,把它掛入系統。每當特定的訊息發出, 在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時鉤子函式即可以加工處理(改變)該訊息,也可以不作處理而繼續傳遞該訊息,還可以強制結束訊息的傳遞(return)。
c#是.net framework平台的相伴語言,用它本身的類庫和編譯器提供的方法是無法實現全域性鉤子的。但實際上對於非託管**的呼叫在c#中是成立的,鉤子函式存在於user32.dll中,使用dllimport屬性可以引用非託管**類庫中的方法。
//安裝鉤子
[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
bool unhookwindowshookex(int idhook);
//呼叫下乙個鉤子
[dllimport("
user32.dll
", charset = charset.auto, callingconvention =callingconvention.stdcall)]
public
static
extern
int callnexthookex(int idhook, int ncode, intptr wparam, intptr lparam);
//委託+事件(把鉤到的訊息封裝為事件,由呼叫者處理)
public
delegate
void mousemovehandler(object
sender, mouseeventargs e);
public
event mousemovehandler mousemoveevent;
publicclass
mousehook
set }}}
private
inthhook;
public
const
int wh_mouse_ll = 14
;
public
win32api.hookproc hproc;
public mousehook()
public
intsethook()
public
void
unhook()
private
int mousehookproc(int
ncode, intptr wparam, intptr lparam)
else
}//委託+事件(把鉤到的訊息封裝為事件,由呼叫者處理)
public
delegate
void mousemovehandler(object
sender, mouseeventargs e);
public
event
mousemovehandler mousemoveevent;
}
public需要引入using system.runtime.interopservices; 命名空間partial
class
form1 : form
mousehook mh;
private
void form1_load(object
sender, eventargs e)
void mh_mousemoveevent(object
sender, mouseeventargs e)
,)", x, y);
}private
void form1_formclosed(object
sender, formclosedeventargs e)
}
public執行結果:class
win32api
[structlayout(layoutkind.sequential)]
public
class
mousehookstruct
public
delegate
int hookproc(int
ncode, intptr wparam, intptr lparam);
//安裝鉤子
[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
bool unhookwindowshookex(int
idhook);
//呼叫下乙個鉤子
[dllimport("
user32.dll
", charset = charset.auto, callingconvention =callingconvention.stdcall)]
public
static
extern
int callnexthookex(int idhook, int
ncode, intptr wparam, intptr lparam);
}
滑鼠在視窗移動的時候,顯示滑鼠當前的座標位置(在整個顯示螢幕中的座標)。
鉤子函式使用小結
鉤子函式使用小結 首先讓我們看看hook函式是怎麼安裝 呼叫和刪除的。應用程式通常是呼叫setwindowshookex 函式來進行安裝的,其函式的原型如下 setwindowshookex int idhook,hookproc lpfn,hinstance hmod,dword dwthread...
flask 鉤子函式使用
一 鉤子函式的概念 鉤子函式是windows訊息處理機制的一部分,通過設定 鉤子 應用程式可以在系統級對所有訊息 事件進行過濾,訪問在正常情況下無法訪問的訊息。鉤子的本質是一段用以處理系統訊息的程式,通過系統呼叫,把它掛入系統。二 常用的三大鉤子函式 註冊乙個函式,在處理第乙個請求之前執行.def ...
mounted鉤子函式 對vue中鉤子函式的理解
1 beforecreate 鉤子 該階段元件例項剛建立,元件屬性計算之前 可理解為元件屬性還未初始化,未繫結,未掛載元素el 比如 el,data,methods等,如果你試圖在beforecreated鉤子中獲取這些屬性值,會得到ubdefined 的結果,但是 可以獲取到this物件,因為此時...