鉤子函式使用小結

2021-08-25 16:31:41 字數 1367 閱讀 2977

鉤子函式使用小結

首先讓我們看看hook函式是怎麼安裝、呼叫和刪除的。應用程式通常是呼叫setwindowshookex()函式來進行安裝的,其函式的原型如下:

setwindowshookex(int idhook,hookproc lpfn,hinstance hmod,dword dwthreadid);

引數說明:

idhook 是」鉤子」的型別,」鉤子」的型別一共有13種。

lpfn 指向「鉤子」過程的指標。

hmod 「鉤子」過程所在模組的控制代碼。

dwthreadid 「鉤子」相關執行緒的標識

鉤子分為只供單個程序訪問的鉤子和共所有程序訪問的鉤子,對於前者可以將鉤子過程放在安裝鉤子的同一執行緒內,此時setwindowshookex()中的第三個引數為該執行緒的hinstance;於後者鉤子過程應該放在單獨的dll檔案中,那麼setwindowshookex()中的第三個引數就是該動態鏈結庫模組的控制代碼。鉤子過程需要考慮是否把截獲的訊息傳遞給下乙個鉤」過程。如果要傳遞的話,就要呼叫callnesthookex()函式,其原型如下:

lresult callnexthookex(hhook hhk,int ncode,wparam wparam,lparam lparam,);

其中hhk為當前」鉤子」的控制代碼,由setwindowshookex()函式返回。ncode為傳給」鉤子」過程的事件**。wparam和lparam 分別是傳給」鉤子」過程的wparam值,其具體含義與」鉤子」型別有關。

因為鉤子會影響到系統效能,特別是對於全域性鉤子,因此在使用完後記得釋放鉤子,釋放鉤子的函式原型如下:

unhookwindowshookex(hhook hhk);

函式成功返回true,否則返回false。

以上部分簡單地介紹了下鉤子的使用過程,接下來將結合我開發的windows視窗恢復軟體來具體展示下如何使用鉤子,因為這個軟體還未做完,因此這裡只部分介紹下其中的處理邏輯,但這部分已足以展示整個鉤子的使用過程。

首要工作是需要選定安裝鉤子的型別,視窗關閉事件是通過將wm_close訊息傳送到對應的視窗過程來實現的,因此在這裡我選擇了wh_callwndproc這個鉤子,wh_callwndproc使你可以監視傳送到視窗過程的訊息,因此在視窗被真正銷毀之前我通過截獲wm_close訊息,並獲取該訊息的目標視窗的控制代碼,然後通過控制代碼獲取該視窗的相關資訊並記錄以方便恢復。

顯而易見我們對於每個視窗的關閉訊息都需要記錄,因此在這裡我們需要將鉤子設定為全域性鉤子,在建立工程的時候我們將鉤子過程單獨放在乙個dll工程中,同時setwindowshookex函式的最後乙個引數設定為0,表示該鉤子是乙個全域性鉤子,該dll將注入到每乙個程序進行監控。我們需要建立另乙個工程來安裝鉤子,這個工程裡的**不涉及鉤子的核心實現,只是乙個實現鉤子安裝的過程以及一些介面功能的實現。

flask 鉤子函式使用

一 鉤子函式的概念 鉤子函式是windows訊息處理機制的一部分,通過設定 鉤子 應用程式可以在系統級對所有訊息 事件進行過濾,訪問在正常情況下無法訪問的訊息。鉤子的本質是一段用以處理系統訊息的程式,通過系統呼叫,把它掛入系統。二 常用的三大鉤子函式 註冊乙個函式,在處理第乙個請求之前執行.def ...

C 鉤子函式使用

hook 鉤子 是windows提供的一種訊息處理機制平台,是指在程式正常執行中接受資訊之前預先啟動的函式,用來檢查和修改傳給該程式的資訊,鉤子 實際上是乙個處理訊息的程式段,通過系統呼叫,把它掛入系統。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時...

mounted鉤子函式 對vue中鉤子函式的理解

1 beforecreate 鉤子 該階段元件例項剛建立,元件屬性計算之前 可理解為元件屬性還未初始化,未繫結,未掛載元素el 比如 el,data,methods等,如果你試圖在beforecreated鉤子中獲取這些屬性值,會得到ubdefined 的結果,但是 可以獲取到this物件,因為此時...