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...