WINDOWS中鉤子的型別

2021-10-25 12:22:07 字數 3563 閱讀 1606

1、wh_callwndproc

1、wh_callwndproc和wh_callwndprocret hooks

wh_callwndproc和wh_callwndprocret hooks使你可以監視傳送到視窗過程的訊息。系統在訊息傳送到接收視窗過程之前呼叫wh_callwndproc hook子程,並且在視窗過程處理完訊息之後呼叫wh_callwndprocret hook子程。

wh_callwndprocret hook傳遞指標到cwpretstruct結構,再傳遞到hook子程。cwpretstruct結構包含了來自處理訊息的視窗過程的返回值,同樣也包括了與這個訊息關聯的訊息引數。

2、wh_cbt hook

在以下事件之前,系統都會呼叫wh_cbt hook子程,這些事件包括:

1. 啟用,建立,銷毀,最小化,最大化,移動,改變尺寸等視窗事件;

2. 完成系統指令;

3. 來自系統訊息佇列中的移動滑鼠,鍵盤事件;

4. 設定輸入焦點事件;

5. 同步系統訊息佇列事件。

hook子程的返回值確定系統是否允許或者防止這些操作中的乙個。

3、wh_debug hook

在系統呼叫系統中與其他hook關聯的hook子程之前,系統會呼叫wh_debug hook子程。你可以使用這個hook來決定是否允許系統呼叫與其他hook關聯的hook子程。

4、wh_foregroundidle hook

當應用程式的前台執行緒處於空閒狀態時,可以使用wh_foregroundidle hook執行低優先順序的任務。當應用程式的前台執行緒大概要變成空閒狀態時,系統就會呼叫wh_foregroundidle hook子程。

5、wh_getmessage hook

應用程式使用wh_getmessage hook來監視從getmessage or peekmessage函式返回的訊息。你可以使用wh_getmessage hook去監視滑鼠和鍵盤輸入,以及其他傳送到訊息佇列中的訊息。

6、wh_journalplayback hook

wh_journalplayback hook使應用程式可以插入訊息到系統訊息佇列。可以使用這個hook回放通過使用wh_journalrecord hook記錄下來的連續的滑鼠和鍵盤事件。只要wh_journalplayback hook已經安裝,正常的滑鼠和鍵盤事件就是無效的。

wh_journalplayback hook是全域性hook,它不能象執行緒特定hook一樣使用。 wh_journalplayback hook返回超時值,這個值告訴系統在處理來自回放hook當前訊息之前需要等待多長時間(毫秒)。這就使hook可以控制實時事件的回放。

wh_journalplayback是system-wide local hooks,它們不會被注射到任何行程位址空間。(估計按鍵精靈

是用這個hook做的)

7、wh_journalrecord hook

wh_journalrecord hook用來監視和記錄輸入事件。典型的,可以使用這個hook記錄連續的滑鼠和鍵盤事件,然後通過使用wh_journalplayback hook來回放。

wh_journalrecord hook是全域性hook,它不能象執行緒特定hook一樣使用。

wh_journalrecord是system-wide local hooks,它們不會被注射到任何行程位址空間。

8、wh_keyboard hook

在應用程式中,wh_keyboard hook用來監視wm_keydown and wm_keyup訊息,這些訊息通過getmessage or peekmessage function返回。可以使用這個hook來監視輸入到訊息佇列中的鍵盤訊息。

9、wh_keyboard_ll hook

wh_keyboard_ll hook監視輸入到執行緒訊息佇列中的鍵盤訊息。

10、wh_mouse hook

wh_mouse hook監視從getmessage 或者 peekmessage 函式返回的滑鼠訊息。使用這個hook監視輸入到訊息佇列中的滑鼠訊息。

11、wh_mouse_ll hook

wh_mouse_ll hook監視輸入到執行緒訊息佇列中的滑鼠訊息。

12、wh_msgfilter / hooks

12、wh_msgfilter 和 wh_sysmsgfilter hooks

wh_msgfilter 和 wh_sysmsgfilter hooks使我們可以監視選單,滾動條,訊息框,對話方塊訊息並且發現使用者使用alt+tab or alt+esc 組合鍵切換視窗。

wh_msgfilter hook只能監視傳遞到選單,滾動條,訊息框的訊息,以及傳遞到通過安裝了hook子程的應用程式建立的對話方塊的訊息。

wh_sysmsgfilter hook監視所有應用程式訊息。

wh_msgfilter 和 wh_sysmsgfilter hooks使我們可以在模式迴圈期間過濾訊息,這等價於在主訊息迴圈中過濾訊息。通過呼叫callmsgfilter function可以直接的呼叫wh_msgfilter hook。通過使用這個函式,應用程式能夠在模式迴圈期間使用相同的**去過濾訊息,如同在主訊息迴圈裡一樣。

13、wh_shell hook

外殼應用程式可以使用wh_shell hook去接收重要的通知。當外殼應用程式是啟用的並且當頂層視窗建立或者銷毀時,系統呼叫wh_shell hook子程。

wh_shell 共有5鐘情況:

1. 只要有個top-level、unowned 視窗被產生、起作用、或是被摧毀;

2. 當taskbar需要重畫某個按鈕;

3. 當系統需要顯示關於taskbar的乙個程式的最小化形式;

4. 當目前的鍵盤布局狀態改變;

5. 當使用者按ctrl+esc去執行task manager(或相同級別的程式)。

按照慣例,外殼應用程式都不接收wh_shell訊息。所以,在應用程式能夠接收wh_shell訊息之前,應用程式必須呼叫systemparametersinfo function註冊它自己。

鉤子型別對應**:

wh_journalrecord = 0,

wh_journalplayback = 1,

wh_keyboard = 2,

wh_getmessage = 3,

wh_callwndproc = 4,

wh_cbt = 5,

wh_sysmsgfilter = 6,

wh_mouse = 7,

wh_hardware = 8,

wh_debug = 9,

wh_shell = 10,

wh_foregroundidle = 11,

wh_callwndprocret = 12,       

wh_keyboard_ll = 13,

wh_mouse_ll = 14

談PHP中的鉤子

鉤子,英文為hooks。在程式中應用相當廣泛,但是究竟什麼是鉤子呢?本人介紹一下目前本人對鉤子的理解和相關心得。假如有這麼一段程式流 function fun fun函式正常的執行順序,肯定是執行完funa,然後執行funb,然後fun函式就結束了。但是,假如我們想對函式做一些變化。比如說,fun是...

python Flask中的請求鉤子

from flask import flask from settings import config 在第一次請求之前呼叫,可以在此方法內部做一些初始化操作 def before first request print before first request 在每一次請求之前呼叫,這時候已經有請...

flask中的請求鉤子

1.before first request 在第一次請求之前執行,只需執行一次,如鏈結資料庫 2.before request 在每一次請求都會執行,可以在這裡做許可權校驗操作,比如說某使用者是黑名單使用者,黑名單使用者登入系統將遭到拒絕訪問,可以使用before request進行許可權校驗。3...