C語言newHook字段:typedefHMODULE(WINAPI*HOOKAPI)(INLPCSTR);
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比通道網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式通道網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋通道地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
#defineMYHOOKMETHOD(__fun)HMODULEWINAPI__fun
#defineDECLARE_REGISTER(__0bj,__lawfunc,__newfunc)Inline_Hook__Obj(__lawfunc,__newfunc)。
鉤子(Hook),是Windows消息處理機制的一個平臺,應(yīng)用程序可以在上面設(shè)置子程以監(jiān)視指定窗口的某種消息,而且所監(jiān)視的窗口可以是其他進(jìn)程所創(chuàng)建的。當(dāng)消息到達(dá)后,在目標(biāo)窗口處理函數(shù)之前處理它。鉤子機制允許應(yīng)用程序截獲處理window消息或特定事件。
鉤子實際上是一個處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出,在沒有到達(dá)目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強制結(jié)束消息的傳遞。
Hook技術(shù)又叫做鉤子函數(shù),在系統(tǒng)沒有調(diào)用該函數(shù)之前,鉤子程序就先捕獲該消息,鉤子函數(shù)先得到控制權(quán),這時鉤子函數(shù)既可以加工處理(改變)該函數(shù)的執(zhí)行行為,還可以強制結(jié)束消息的傳遞。簡單來說,就是把系統(tǒng)的程序拉出來變成我們自己執(zhí)行代碼片段。
要實現(xiàn)鉤子函數(shù),有兩個步驟:
1.利用系統(tǒng)內(nèi)部提供的接口,通過實現(xiàn)該接口,然后注入進(jìn)系統(tǒng)(特定場景下使用)
2.動態(tài)代理(使用所有場景)
?
就是hook,用來監(jiān)視和撲捉系統(tǒng)的消息,這樣可以在系統(tǒng)消息還沒送達(dá)之前就做預(yù)處理,比如你想撲捉系統(tǒng)全局的鍵盤消息,鼠標(biāo)消息等等,就可以用hook來實現(xiàn)
例子:
HWND hWnd = NULL; //定義成全局變量
HHOOK hKeyboard;
HHOOK hMouse;
LRESULT CALLBACK MouseProc( int nCode, WPARAM wParam, LPARAM lparam ) // 鼠標(biāo)鉤子函數(shù)
{
return 1; // 返回非零值表示已經(jīng)對當(dāng)前消息進(jìn)行了處理,這樣系統(tǒng)就不會再將這個消息傳遞給目標(biāo)窗口過程
}
LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lparam )
if( VK_F4 == wParam (1 == (lparam291)) ) // 系統(tǒng)后門:Alt+F4鍵退出程序
{
::SendMessageA( hWnd, WM_CLOSE, 0, 0 );
定義鉤子函數(shù)
鉤子函數(shù)是一種特殊的回調(diào)函數(shù)。鉤子監(jiān)視的特定事件發(fā)生后,系統(tǒng)會調(diào)用鉤子函數(shù)進(jìn)行處理。不同事件的鉤子函數(shù)的形式是各不相同的。下面以鼠標(biāo)鉤子函數(shù)舉例說明鉤子函數(shù)的原型:
LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam)
參數(shù)wParam和 lParam包含所鉤消息的信息,比如鼠標(biāo)位置、狀態(tài),鍵盤按鍵等。nCode包含有關(guān)消息本身的信息,比如是否從消息隊列中移出。 我們先在鉤子函數(shù)中實現(xiàn)自定義的功能,然后調(diào)用函數(shù) CallNextHookEx.把鉤子信息傳遞給鉤子鏈的下一個鉤子函數(shù)。CallNextHookEx.的原型如下:
LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam ) 參數(shù) hhk是鉤子句柄。nCode、wParam和lParam 是鉤子函數(shù)。
當(dāng)然也可以通過直接返回TRUE來丟棄該消息,就阻止了該消息的傳遞。