鉤子函數詳解

WINDOWS鉤子函數的功能很是強大,有了它您能夠探測其它進程而且改變其它進程的行爲。
  理論:
  WINDOWS的鉤子函數能夠認爲是WINDOWS的主要特性之一。利用它們,您能夠捕捉您本身進程或其它進程發生的事件。
經過「鉤掛」,您能夠給WINDOWS一個處理或過濾事件的回調函數,該函數也叫作「鉤子函數」,當每次發生您感興趣的事件時,
WINDOWS都將調用該函數。一共有兩種類型的鉤子:局部的和遠程的。
  局部鉤子僅鉤掛您本身進程的事件。
  遠程的鉤子還能夠將鉤掛其它進程發生的事件。遠程的鉤子又有兩種:
  基於線程的 它將捕獲其它進程中某一特定線程的事件。簡言之,就是能夠用來觀察其它進程中的某一特定線程將發生的事件。
  系統範圍的 將捕捉系統中全部進程將發生的事件消息。
  安裝鉤子函數將會影響系統的性能。監測「系統範圍事件」的系統鉤子特別明顯。由於系統在處理全部的相關事件
時都將調用您的鉤子函數,這樣您的系統將會明顯的減慢。因此應謹慎使用,用完後當即卸載。還有,因爲您能夠預先
截獲其它進程的消息,因此一旦您的鉤子函數出了問題的話必將影響其它的進程。記住:功能強大也意味着使用時要負責任。
  在正確使用鉤子函數前,咱們先講解鉤子函數的工做原理。當您建立一個鉤子時,WINDOWS會先在內存中建立一個數據
結構,該數據結構包含了鉤子的相關信息,而後把該結構體加到已經存在的鉤子鏈表中去。新的鉤子將加到老的前面。
當一個事件發生時,若是您安裝的是一個局部鉤子,您進程中的鉤子函數將被調用。若是是一個遠程鉤子,系統就必須把鉤子
函數插入到其它進程的地址空間,要作到這一點要求鉤子函數必須在一個動態連接庫中,因此若是您想要使用遠程鉤子,
就必須把該鉤子函數放到動態連接庫中去。固然有兩個例外:工做日誌鉤子和工做日誌回放鉤子。這兩個鉤子的鉤子函數必
須在安裝鉤子的線程中。緣由是:這兩個鉤子是用來監控比較底層的硬件事件的,既然是記錄和回放,全部的事件就固然都
是有前後次序的。因此若是把回調函數放在DLL中,輸入的事件被放在幾個線程中記錄,因此咱們沒法保證獲得正確的次序。
故解決的辦法是:把鉤子函數放到單個的線程中,譬如安裝鉤子的線程。
  shell

  •   WH_CALLWNDPROC 當調用SendMessage時
  •   WH_CALLWNDPROCRET 當SendMessage的調用返回時
  •   WH_GETMESSAGE 當調用GetMessage 或 PeekMessage時
  •   WH_KEYBOARD 當調用GetMessage 或 PeekMessage 來從消息隊列中查詢WM_KEYUP 或 WM_KEYDOWN 消息時
  •   WH_MOUSE 當調用GetMessage 或 PeekMessage 來從消息隊列中查詢鼠標事件消息時
  •   WH_HARDWARE 當調用GetMessage 或 PeekMessage 來從消息隊列種查詢非鼠標、鍵盤消息時
  •   WH_MSGFILTER 當對話框、菜單或滾動條要處理一個消息時。該鉤子是局部的。它時爲那些有本身的消息處理過程的控件對象設計的。
  •   WH_SYSMSGFILTER 和WH_MSGFILTER同樣,只不過是系統範圍的
  •   WH_JOURNALRECORD 當WINDOWS從硬件隊列中得到消息時
  •   WH_JOURNALPLAYBACK 當一個事件從系統的硬件輸入隊列中被請求時
  •   WH_SHELL 當關於WINDOWS外殼事件發生時,譬如任務條須要重畫它的按鈕.
  •   WH_CBT 當基於計算機的訓練(CBT)事件發生時
  •   WH_FOREGROUNDIDLE 由WINDOWS本身使用,通常的應用程序不多使用
  •   WH_DEBUG 用來給鉤子函數除錯

  鉤子一共有14種,如下是它們被調用的時機:數據結構

  1.   WH_CALLWNDPROC 當調用SendMessage時
    函數原形:ide

    LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam );
    函數功能:
    
        該函數掛鉤處理過程是由應用程序定義或由庫定義的回調函數,它與函數 SetWindowsHookEx配套使用,系統調用此函數不管什麼時候一旦函數 SendMessage被調用,在將消息發送至相應的窗口處理過程以前,系統先將該消息發送至掛鉤處理過程,該掛鉤處理過程能夠對改消息進行檢查,但不能修改之.
    
        類型HOOKPROC定義了指向此類回調函數的指針,CallWndProc是應用程序定義或庫定義的函數名的位置標誌位.
    
        參數:
    
        nCode:
    
        指定該掛鉤處理過程是否必須對該消息進行處理,若nCode 是HC_ACTION,則該掛鉤處理過程必須處理該消息.若nCode的值小於0,則此掛鉤處理過程必須在未對該消息做進一步處理的狀況下,將其發送給函數 CallNextHookEx並返回由 CallNextHookEx返回的值.
    
        wParam:
    
        指示該消息是否由當前線程發出,若該消息由當前線程發出,其值爲非0值,不然,其值爲0.
    
        lParam:
    
        指向一個CWPSTRUCT結構,該結構包含了此消息的詳細消息.
    
        返回值:
    
        若nCode的值小於0,則此掛鉤函數必須返回函數CallNextHookEx所返回的值;若nCode的值大於或等於0,咱們極力推薦對函數CallNextHookEx進行調用,並返回其返回值.不然,其餘安裝了WM_CALLWNDPROC掛鉤的應用程序將沒法收到掛鉤通知,從而致使錯誤的行爲.若此掛鉤沒有調用函數CallNextHookEx,則返回值爲0.
    
        備註:掛鉤處理函數CallWndPro能夠對消息進行檢查,但不能修改之.在該掛鉤處理過程將控制返回給系統以後,該消息被髮送至相應的窗口過程.
        一個應用程序經過調用SetWindowsHookEx時指定WM_CALLWNDPROC掛鉤類型及其相應掛鉤處理過程的首地址來安裝掛鉤處理過程.
        掛鉤WM_CALLWNDPROC是在調用函數SendMessage的線程中被調用的,它並不是在接受消息的線程中被調用.
  2.   WH_CALLWNDPROCRET 當SendMessage的調用返回時
    WH_CALLWNDPROC和WH_CALLWNDPROCRETHooks使你能夠監視發送到窗口過程的消息。系統在消息發送到接收窗口過程以前調用WH_CALLWNDPROCHook子程,而且在窗口過程處理完消息以後調用WH_CALLWNDPROCRET Hook子程。
    WH_CALLWNDPROCRET Hook傳遞指針到CWPRETSTRUCT結構,再傳遞到Hook子程。
    CWPRETSTRUCT結構包含了來自處理消息的窗口過程的返回值,一樣也包括了與這個消息關聯的消息參數。
    函數原形:函數

    LRESULT CALLBACK CallWndRetProc(int nCode,WPARAM wParam,LPARAM lParam);
    函數功能:
            該函數掛鉤處理過程是在應用程序或庫中定義的回調函數,它與函數 SetWindowsHookEx搭配使用,系統將在調用完 SendMessage以後調用之,該掛鉤處理過程能夠檢查該消息,但不能修改之.
    
            類型HOOKPROC定義了一類指針指向此類回調函數,CallWndRetProc 僅僅是在應用程序或庫中定義的相應函數名的位置標誌符.
    
            參數:
            nCode:
    
            指定該掛鉤處理過程是否必須對該消息進行處理,若nCode 是HC_ACTION,則該掛鉤處理過程必須處理該消息.若nCode的值小於0,則此掛鉤處理過程必須不加處理的將其發送給函數CallNextHookEx並返回由 CallNextHookEx返回的值.
    
            wParam:
    
            指示該消息是否由當前線程發出,若該消息由當前線程發出,其值爲非0值,不然,其值爲0.
    
            lParam:
    
            指向一個CWPSTRUCT結構,該結構包含了此消息的詳細消息.
    
            返回值:
    
            若nCode的值小於0,則此掛鉤函數必須返回函數CallNextHookEx所返回的值;若nCode的值大於或等於0,咱們極力推薦對函數CallNextHookEx進行調用,並返回其返回值.不然,其餘安裝了掛鉤WM_CALLWNDPROCRET的應用程序將沒法收到掛鉤通知,從而致使錯誤的行爲.若此掛鉤處理過程沒有調用函數CallNextHookEx,則返回值爲0.
    
            備註: 一個應用程序經過調用SetWindowsHookEx時指定WM_CALLWNDPROCRET掛鉤類型及其相應掛鉤處理過程的首地址來安裝掛鉤處理過程.
  3.   WH_GETMESSAGE 當調用GetMessage 或 PeekMessage時
    應用程序使用WH_GETMESSAGE Hook來監視從GetMessage orPeekMessage函數返回的消息。你可使用WH_GETMESSAGEHook去監視鼠標和鍵盤輸入,以及其餘發送到消息隊列中的消息。
    函數原形:佈局

    LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam );
    函數功能:
    該函數處理過程是應用程序或庫定義的回調函數, 它與函數SetWindowsHookEx搭配使用,每當函數GetMessage從應用程序的消息隊列中得到了一個消息時,系統就調用此函數,在將此得到的消息傳送給相應窗口處理過程以前,系統將此消息傳送給該掛鉤處理過程.
    
    類型HOOKPROC定義了指向此類回調函數的指針, GetMsgProc是應用程序定義或庫定義的相應回調函數名的位置標識符.
    
    參數:
    Code:
    
    指示掛鉤處理過程是否必須處理此消息.若nCode的值是HC_ACTION,則掛鉤處理過程必須處理此消息,若nCode之值小於0,此掛鉤處理過程必須將此消息不加處理地傳送給函數CallNextHookEx並返回其返回值.
    wParam:
    
    指示此消息是否已從消息隊列中被刪除,此參數能夠是如下值之一:
    PM_NOREMOVE :指出該消息還沒有從消息隊列中被刪除(一個應用程序調用函數PeekMessage ,設置PM_NOREMOVE 標誌).
    PM_REMOVE: 指出該消息已從消息隊列中被刪除. (一個應用程序調用函數 GetMessage或PeekMessage, 設置 PM_REMOVE標誌.)
    lParam:
    
    指向結構MSG,該結構包含了關於此消息的詳細消息
    
    返回值:
    
    若nCode的值小於0,則此掛鉤函數必須返回函數CallNextHookEx所返回的值;若nCode的值大於或等於0,咱們極力推薦對函數CallNextHookEx進行調用,並返回其返回值.不然,其餘安裝了掛鉤WM_GETMESSAGE的應用程序將沒法收到掛鉤通知,從而致使錯誤的行爲.若此掛鉤處理過程沒有調用函數CallNextHookEx,則返回值爲0.
    
    備註:
    
    掛鉤處理過程GetMsgProc能夠檢查和修改此消息,在此掛鉤處理過程將控制返回給系統以後,函數GetMessage將此修改後的消息返回給最初調用他的應用程序,應用程序經過調用函數SetWindowsHookEx指定WH_GETMESSAGE掛鉤類型和相應掛鉤處理過程的首地址來安裝此掛鉤處理過程.
  4.   WH_KEYBOARD 當調用GetMessage 或 PeekMessage 來從消息隊列中查詢WM_KEYUP 或 WM_KEYDOWN 消息時
    在應用程序中,WH_KEYBOARD Hook用來監視WM_KEYDOWN andWM_KEYUP消息,這些消息經過GetMessage or PeekMessagefunction返回。可使用這個Hook來監視輸入到消息隊列中的鍵盤消息。
    WH_KEYBOARD_LL Hook監視輸入到線程消息隊列中的鍵盤消息。
    函數原形:性能

    LRESULT CALLBACK KeyboardProc(int code,LPARAM lParam);
    函數功能:
    
    該函數是應用程序或庫文件定義的回調函數, 它與函數SetWindowsHookEx搭配使用,當應用程序調用函數 GetMessage 或PeekMessage 而且當前剛好有一個鍵盤消息 (WM_KEYUP or WM_KEYDOWN) 將要被處理時,系統就調用此掛鉤處理過程.
    
    類型HOOKPROC定義了指向此類回調函數的指針, KeyboardProc是應用程序定義或庫定義的相應回調函數名的位置標識符.
    
    參數:
    
    ncode:
    
    指定一個代碼,該代碼被掛鉤處理過程用於決定如何處理此消息,此參數能夠爲如下值之一:
    
    HC_ACTION 參數 wParam 和 lParam包含一個擊鍵消息的信息.
    
    HC_NOREMOVE 參數wParam and lParam包含一個擊鍵消息的信息,而且此擊鍵消息還沒有從消息隊列中被刪除(一個應用程序調用函數PeekMessage 並設置了PM_NOREMOVE 標誌).
    
    若nCode的值小於0,則此掛鉤函數必須不加處理地傳送給函數CallNextHookEx,並返回其返回值.
    
    wParam:
    
    指示產生此擊鍵消息的虛擬鍵代碼.
    
    lParam:
    
    指示重複次數,掃描碼,擴展標誌,上下文代碼,此前的鍵狀態標誌和變化狀態標誌,此參數能夠是如下值的組合值:
    
    0-15位:指示重複次數,此值紀錄力偶因爲用戶繼續摁鍵引起的擊鍵重複次數.
    
    16-23位:指示掃描碼,此值依賴於鍵盤生產廠家.
    
    第24位:指示此鍵是否爲擴展鍵,好比功能鍵或數字小鍵盤上的鍵,當該鍵爲擴展時,其值爲1,不然爲0.
    
    25-28位:保留未用.
    
    第29位:上下文代碼.若Alt鍵被摁下,則此值爲1,不然爲0. 
    
    第30位:指示此前的鍵狀態,若在此消息被髮送以前該鍵是摁下的,其值爲1.若此前該鍵未被摁下,則其值爲0.
    
    第31位:指示變化狀態,若此鍵正在被摁下,則其值位0. 正在被釋放其值爲1.
    
    欲得到更多關於此lParam參數的信息,請參見 Keystroke Message Flags.
    
    返回值:
    
    若nCode的值小於0,則此掛鉤函數必須返回函數CallNextHookEx所返回的值;若nCode的值大於或等於0,而且此掛鉤處理過程並未對此消息進行處理,咱們極力推薦對函數CallNextHookEx進行調用,並返回其返回值.不然,其餘安裝了掛鉤WM_KEYBOARD的應用程序將沒法收到掛鉤通知,從而致使錯誤的行爲.若此掛鉤處理過程對此消息進行了處理,它應返回非0值以免系統將此消息傳遞給掛鉤鍵上的其餘處理過程或目標窗口的處理過程.
    
    備註:
    
    一個應用程序經過調用函數SetWindowsHookEx指定WM_KEYBOARD掛鉤類型和相應掛鉤處理過程的首地址來安裝此掛鉤處理過程.
  5.   WH_MOUSE 當調用GetMessage 或 PeekMessage 來從消息隊列中查詢鼠標事件消息時
    WH_MOUSE Hook監視從GetMessage 或者 PeekMessage函數返回的鼠標消息。使用這個Hook監視輸入到消息隊列中的鼠標消息。
    WH_MOUSE_LL Hook監視輸入到線程消息隊列中的鼠標消息。
    函數原形:測試

    LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
    函數功能:
    該函數是應用程序或庫文件定義的回調函數, 它與函數SetWindowsHookEx搭配使用,當應用程序調用函數 GetMessage 或PeekMessage 而且當前剛好有一個鼠標消息將要被處理時,系統就調用此掛鉤處理過程.
    
    類型HOOKPROC定義了指向此類回調函數的指針, MouseProc是應用程序定義或庫定義的相應回調函數名的位置標識符.
    
    參數:
    
    nCode:
    
    指示一個代碼被掛鉤處理過程用於決定如何處理此消息,此參數能夠是如下值之一:
    HC_ACTION 指示參數wParam 和lParam 包含了關於鼠標消息的信息.
    HC_NOREMOVE 指示參數 wParam和lParam 中包含了關於鼠標的信息,並且此鼠標消息還沒有從消息隊列中被刪除(一個應用程序調用函數PeekMessage並設置了 PM_NOREMOVE標誌).
    若nCode的值小於0,則此掛鉤函數必須不加處理地傳送給函數CallNextHookEx,並返回其返回值.
    
    wParam:
    
    指示鼠標消息的標識符,
    
    lParam:
    
    指向MOUSEHOOKSTRUCT 結構的[指針].
    
    返回值:
    
    若nCode的值小於0,則此掛鉤函數必須返回函數CallNextHookEx所返回的值;若nCode的值大於或等於0,而且此掛鉤處理過程還沒有對此消息進行處理,咱們極力推薦對函數CallNextHookEx進行調用,並返回其返回值.不然,其餘安裝了掛鉤WM_MOUSE的應用程序將沒法收到掛鉤通知,從而致使錯誤的行爲.若此掛鉤處理過程對此消息進行了處理,它應返回非0值以免系統將此消息傳遞給目標窗口的處理過程.
    
    備註:
    
    一個應用程序經過調用函數SetWindowsHookEx指定WM_MOUSE掛鉤類型和相應掛鉤處理過程的首地址來安裝此掛鉤處理過程.此掛鉤處理過程必定不能安裝JournalPlaybackProc回調函數.
  6.   WH_HARDWARE 當調用GetMessage 或 PeekMessage 來從消息隊列種查詢非鼠標、鍵盤消息時
    函數原形:編碼

    BOOL CallMsgFilter(LPMSG lpMsg, int nCode);
    函數功能:
    
    該函數將特定消息和掛鉤代碼發送給與掛鉤 WH_SYSMSGFILTER和WH_MSGFILTER 相聯繫的掛鉤處理過程,一個 WH_SYSMSGFILTER 或者 WH_MSGFILTER掛鉤處理過程是指應用程序定義的回調函數,這些回調函數負責檢查,並可有選擇地修改關於對話框、消息框、菜單條、滾動條的消息。
    
    參數:
    
    lpMsg:
    
    指向一個MSG結構,該結構包含發送給掛鉤處理過程的消息.
    
    nCode:
    
    指定掛鉤處理過程須要使用的應用程序定義的代碼,以肯定如何對消息進行處理,該代碼切忌採用與系統預約義的與WH_SYSMSGFILTER和WH_MSGFILTER掛鉤相關的掛鉤代碼(MSGF_ 和 HC_開頭)相同的值.
    
    返回值:
    
    若該應用程序可對消息做進一步處理,則返回值爲0,若該應用程序不能對該消息做進一步處理,則返回值爲非0值.
    
    備註:系統對CallMsgFilter進行調用,以使得應用程序可以檢查和控制在對對話框、消息框、菜單條、滾動條的內部處理過程當中產生的,或是由用戶按下<Alt+Tab>組合鍵以激活不一樣窗口時產生的消息流.
    
    可經過調用函數SetWindowsHookEx來安裝此掛鉤處理過程.
  7.   WH_MSGFILTER 當對話框、菜單或滾動條要處理一個消息時。該鉤子是局部的。它時爲那些有本身的消息處理過程的控件對象設計的。
    函數原形:
    LRESULT CALLBACK MessageProc(int code,WPARAM wParam,LPARAM lParam);

    函數功能:
    掛鉤處理過程是應用程序或庫中定義的回調函數,它與函數 SetWindowsHookEx搭配使用.當一個對話框、消息框、菜單條、或滾動條中的輸入事件發生,且由此引起的消息還沒有被處理以前,系統對此掛鉤處理過程進行調用.此函數能夠對一個特定應用程序或全部應用程序的對話框、消息框、菜單條、或滾動引起的條消息進行監視.線程

類型HOOKPROC定義了指向此類回調函數的指針. MessageProc 是庫中相應回調函數名的位置標誌符.設計

參數:
nCode:

指示產生此消息的輸入事件類型.此參數能夠是如下值之一:
MSGE_DDEMGR:當動態數據交換管理庫(Dynamic Data Exchange Management Library (DDEML)正在等待一個同步處理的結束時產生此事件,關於DDEML的詳情,參見Dynamic Data Exchange Management Library .
MSGF_DIALOGBOX: 輸入事件由一個消息框或者對話框產生.
MSGF_MENU: 輸入事件由一個菜單條產生.
MSGF_SCROLLBAR: 輸入事件由一個滾動條產生.
MSGF_NEXTWINDOW: 輸入事件因爲用戶摁下組合鍵<Alt+Tab>以激活另外一個窗口而產生.
若nCode的值小於0,則此掛鉤處理過程必須將該消息不加處理地傳送給函數 CallNextHookEx 並返回其返回值.

wParam:

爲NULL(0).

lParam:

指向MSG結構的[指針].

返回值:

若nCode的值小於0,則此掛鉤處理過程必須返回CallNextHookEx 的返回值.若nCode的值大於或等於0,而且此掛鉤處理過程未對該消息進行處理,則調用函數CallNextHookEx 並返回其返回值是被推薦的.不然,其餘安裝了WH_MSGFILTER掛鉤的應用程序將沒法收到此掛鉤通知,並可能由此致使錯誤的行爲.若此掛鉤處理過程處理了此消息,它應返回一個非0值以免系統再將此消息傳送給掛鉤鏈上的其餘掛鉤處理過程或目標窗口處理過程.

備註:

一個應用程序經過調用函數SetWindowsHookEx指定WH_MSGFILTER掛鉤類型和相應掛鉤處理過程的首地址來安裝此掛鉤處理過程.
若一個應用程序使用了DDEML並實行同步處理,並且要求必須在消息被分派前處理之,則必定要使用WH_MSGFILTER掛鉤.

  1.   WH_SYSMSGFILTER 和WH_MSGFILTER同樣,只不過是系統範圍的
    WH_MSGFILTER 和 WH_SYSMSGFILTERHooks使咱們能夠監視菜單,滾動條,消息框,對話框消息而且發現用戶使用ALT+TAB or ALT+ESC組合鍵切換窗口。WH_MSGFILTERHook只能監視傳遞到菜單,滾動條,消息框的消息,以及傳遞到經過安裝了Hook子程的應用程序創建的對話框的消息。WH_SYSMSGFILTERHook監視全部應用程序消息。
    WH_MSGFILTER 和 WH_SYSMSGFILTERHooks使咱們能夠在模式循環期間過濾消息,這等價於在主消息循環中過濾消息。
    經過調用CallMsgFilter function能夠直接的調用WH_MSGFILTERHook。經過使用這個函數,應用程序可以在模式循環期間使用相同的代碼去過濾消息,如同在主消息循環裏同樣。
    函數原形:

    LRESULT CALLBACK SysMsgProc(int nCode,WPARAM wParam,LPARAM lParam);
    函數功能:
    
    掛鉤處理過程是應用程序或庫中定義的回調函數,它與函數 SetWindowsHookEx搭配使用.當一個對話框、消息框、菜單條、或滾動條中的輸入事件發生,且由此引起的消息還沒有被處理以前,系統對此掛鉤處理過程進行調用.此函數能夠對系統中全部的對話框、消息框、菜單條、或滾動條消息進行監視.
    
    類型HOOKPROC定義了指向此類回調函數的指針.SysMsgProc 是庫中相應回調函數名的位置標誌符.
    
    參數:
    
    nCode:
    
    指示產生此消息的輸入事件類型.此參數能夠是如下值之一:
    
    MSGF_DIALOGBOX: 輸入事件由一個消息框或者對話框產生.
    
    MSGF_MENU: 輸入事件由一個菜單條產生.
    
    MSGF_SCROLLBAR: 輸入事件由一個滾動條產生.
    
    MSGF_NEXTWINDOW: 輸入事件因爲用戶摁下組合鍵<Alt+Tab>以激活另外一個窗口而產生.
    
    若nCode的值小於0,則此掛鉤處理過程必須將該消息不加處理地傳送給函數 CallNextHookEx 並返回其返回值.
    
    wParam:
    
    爲NULL(0).
    
    lParam:
    
    指向MSG結構的[指針].
    
    返回值:若nCode的值小於0,則此掛鉤處理過程必須返回CallNextHookEx 的返回值.若nCode的值大於或等於0,而且此掛鉤處理過程未對該消息進行處理,則調用函數CallNextHookEx 並返回其返回值是被推薦的.不然,其餘安裝了WH_SYSMSGFILTER掛鉤的應用程序將沒法收到此掛鉤通知,並可能由此致使錯誤的行爲.若此掛鉤處理過程處理了此消息,它應返回一個非零值以免系統再將此消息傳送給目標窗口處理過程.
    
    備註:一個應用程序經過調用函數SetWindowsHookEx 指定 WH_SYSMSGFILTER掛鉤類型及相應掛鉤處理過程首地址來安裝此掛鉤.
  2.   WH_JOURNALRECORD 當WINDOWS從硬件隊列中得到消息時
    WH_JOURNALRECORDHook用來監視和記錄輸入事件。典型的,可使用這個Hook記錄連續的鼠標和鍵盤事件,而後經過使用WH_JOURNALPLAYBACKHook來回放。
    WH_JOURNALRECORD Hook是全局Hook,它不能象線程特定Hook同樣使用。
    WH_JOURNALRECORD是system-wide local hooks,它??不??射到任何行程位址空駣??
    函數原形:

    LRESULT CALLBACK JournalRecordProc(int code,WPARAM wParam,LPARAM lParam);
    函數功能:
    該函數處理過程是應用程序或庫定義的回調函數, 它與函數SetWindowsHookEx搭配使用,此函數紀錄系統從系統消息隊列中刪除的消息,此後,一個應用程序能夠經過使用掛鉤處理過程JournalPlaybackProc對此消息進行回調.
    
    類型HOOKPROC定義了指向此類回調函數的指針, JournalRecordProc是應用程序定義或庫定義的相應回調函數名的位置標識符.
    
    參數:
    Code:
    
    指示如何處理此消息,此參數能夠是如下值之一:
    
    HC_ACTION: 參數LPARAM指向結構 EVENTMSG ,該結構包含從系統消息隊列中刪除了的消息的有關信息,此掛鉤處理過程必須紀錄下此結構的內容,將其拷貝到一個緩衝區或文件中.
    HC_SYSMODALOFF: 一個系統的有模式對話框正在被銷燬,此掛鉤處理過程必須進行紀錄.
    HC_SYSMODALON:一個系統的有模式對話框正在被顯示,此掛鉤處理過程必須中止紀錄.
    若nCode之值小於0,此掛鉤處理過程必須將此消息不加處理地傳送給函數CallNextHookEx並返回其返回值.
    
    wParam:
    
    指定爲NULL(0).
    
    lParam:
    
    指向結構EVENTMSG ,該結構包含將被紀錄的消息.
    
    返回值:
    
    返回值被忽略.
    
    備註:一個JournalRecordProc掛鉤處理過程必須拷貝但不能修改此消息,在次掛鉤處理過程控制交還給系統以後,此消息繼續被處理.
    
    安裝一個JournalRecordProc掛鉤處理過程是經過調用函數SetWindowsHookEx指定WH_JOURNALRECORD掛鉤類型和相應掛鉤處理過程的首地址來安裝此掛鉤處理過程.過程並不是只能存在於動態連接庫中,一個應用程序自身也可擁有本身的JournalRecordProc掛鉤處理過程.
    
    與其他大多數全局掛鉤處理過程不一樣,掛鉤處理過程JournalRecordProc和JournalPlaybackProc老是在設置了該掛鉤的線程上下文中被調用.一個安裝了JournalRecordProc掛鉤處理過程的應用程序該對虛擬鍵VK_CANCEL進行監視(在大多數鍵盤上,虛擬鍵VK_CANCEL被實現爲組合鍵< CTRL+BREAK>),此虛擬鍵應被應用程序解釋爲用戶但願終止進行日誌紀錄的信號,而應用程序對此進行響應,結束相應的紀錄序列,並刪除掛鉤處理過程JournalRecordProc,在這裏,刪除掛鉤處理過程是很重要的,此舉使得應用程序免於由於在一個掛鉤處理過程內部被掛起而將系統鎖住.
    
    這種做爲終止日誌紀錄信號的角色使得組合鍵<CTRL+BREAK>自己沒法被紀錄,而組合鍵<CTRL+C>並不充當日誌紀錄信號的角色,因此能夠被紀錄,這裏還有兩種組合鍵是不能被紀錄的:即<CTRL+ESC> 和<CTRL+ALT+DEL>,這兩組組合鍵致使系統終止全部的日誌活動(紀錄或回調),刪除全部的日誌掛鉤,並將消息WM_CANCELJOURNAL寄送給日誌應用程序.
  3.   WH_JOURNALPLAYBACK 當一個事件從系統的硬件輸入隊列中被請求時
    WH_JOURNALPLAYBACKHook使應用程序能夠插入消息到系統消息隊列。可使用這個Hook回放經過使用WH_JOURNALRECORDHook記錄下來的連續的鼠標和鍵盤事件。只要WH_JOURNALPLAYBACKHook已經安裝,正常的鼠標和鍵盤事件就是無效的。
    WH_JOURNALPLAYBACK Hook是全局Hook,它不能象線程特定Hook同樣使用。
    WH_JOURNALPLAYBACKHook返回超時值,這個值告訴系統在處理來自回放Hook當前消息以前須要等待多長時間(毫秒)。這就使Hook能夠控制實時事件的回放。
    WH_JOURNALPLAYBACK是system-wide localhooks,它??不??射到任何行程位址空駣??
    函數原形:

    LRESULT CALLBACK JournalPlaybackProc(int code, WPARAM wParam, LPARAM lParam);
    函數功能:
    該函數處理過程是應用程序或庫定義的回調函數, 它與函數SetWindowsHookEx搭配使用.典型地,一個應用程序經過調用此函數來對先前有JournalRecordProc掛鉤處理過程紀錄的一系列鼠標和鍵盤消息進行回放.一旦掛鉤函數JournalPlaybackProc掛鉤處理過程被安裝,則一般的鼠標和鍵盤輸入被禁止.
    
    類型HOOKPROC定義了指向此類回調函數的指針, JournalPlaybackProc是應用程序定義或庫定義的相應回調函數名的位置標識符.
    
    參數:
    
    code:
    
    指示一個代碼,被掛鉤處理過程用來決定如何處理此消息,這個參數能夠是如下值之一:
    
    HC_GETNEXT 掛鉤處理過程必須將當前的鼠標或鍵盤消息拷貝至由參數lParam 所指結構EVENTMSG中. HC_NOREMOVE 一個正用wRemoveMsg爲參數調用了 PeekMessage的應用程序對PM_NOREMOVE標誌進行設置,指示此消息在通過函數PeekMessage的處理以後,並不從消息隊列中被刪除.
    
    HC_SKIP此掛鉤處理過程必須準備拷貝下一個鼠標或鍵盤消息至由參數lParam 所指定的結構EVENTMSG 中去,依據收到的代碼HC_GETNEXT ,此掛鉤處理過程必須將消息拷貝至結構EVENTMSG 中去. HC_SYSMODALOFF 一個的有系統模式對話框已被銷燬,此掛鉤處理過程必須恢復對此消息的回調.
    
    HC_SYSMODALON 一個的有系統模式對話框正在被顯示,直至此對話礦被銷燬以前,此掛鉤處理過程必須中止對消息的回調.
    
    若nCode的值小於0,則此掛鉤函數必須返回函數CallNextHookEx所返回的值.
    
    wParam:
    
    指示一個NULL(0)值
    
    lParam:
    
    指向一個EVENTMSG結構,該結構反映了正被此掛鉤處理函數處理的消息,這個參數僅當參數nCode的值是HC_GETNEXT時纔有效.
    
    返回值:
    
    爲使系統在處理此消息以前先等待一段時間,返回值必須爲一個以時鐘計的時間量,該時間量指出了系統的等待時間長短.(此時間量可經過計算當前輸入的消息與上一個輸入消息的time成員的差異得到),若但願當即處理此消息,返回值應爲0,此返回值僅當掛鉤代碼爲HC_GETNEXT時才被使用,不然,此返回值被忽略.
    
    備註:
    
    一個JournalPlaybackProc掛鉤處理過程應當將輸入消息拷貝給lParam參數,此消息必須是在先前使用JournalRecordProc 掛鉤處理過程時被紀錄過的,在使用JournalRecordProc掛鉤處理過程時,不該對此消息進行修改,爲了屢次得到相同的消息,此掛鉤處理過程能夠屢次以HC_GETNEXT爲參數被調用.
    
    若nCode的值爲HC_GETNEXT而返回值大於0,則系統按返回值指定的毫秒值進入睡眠狀態,當系統開始繼續執行時,它會以HC_GETNEXT爲參數nCode的值再次調用次掛鉤處理過程以得到相同的消息,這次調用JournalPlaybackProc的返回值爲0,不然,系統又將回到睡眠狀態,並以這次調用JournalPlaybackProc返回的毫秒數爲睡眠時間,睡眠時間到後再重複上述操做.這就使得系統表現爲被掛起.
    
    與其他大多數全局掛鉤處理過程不一樣,掛鉤處理過程JournalRecordProc和JournalPlaybackProc老是在設置了該掛鉤的線程上下文中被調用.
    
    在此掛鉤處理過程將控制返回給系統後,此消息繼續被處理.若nCode的值爲HC_SKIP,則此掛鉤處理過程必須準備在它下一次被調用時返回下一個紀錄了的事件消息,安裝JournalPlaybackProc掛鉤處理過程經過調用函數SetWindowsHookEx,指定WH_JOURNALPLAYBACK掛鉤類型及相應掛鉤處理過程首地址來實現,若是用在日誌回調過程當中按下<Ctrl+Esc>或<Ctrl+Alt+Del>組合鍵,系統將終止回調,取消此日誌回調過程,並寄送一個WM_CANCELJOURNAL消息給日誌應用程序.
    
    若此掛鉤處理過程返回的消息在WM_KEYFIRST 或WM_KEYLAST的範圍內,則如下情形發生.
    
    結構EVENTMSG的paramL成員指示按下的虛擬鍵編碼值,結構EVENTMSG的paramH成員指示掃描嗎,這種狀況下沒法指示出重複按鍵的次數,這個事件僅表示一個按鍵事件.
  4.   WH_SHELL 當關於WINDOWS外殼事件發生時,譬如任務條須要重畫它的按鈕.
    外殼應用程序可使用WH_SHELLHook去接收重要的通知。當外殼應用程序是激活的而且當頂層窗口創建或者銷燬時,系統調用WH_SHELL Hook子程。
    WH_SHELL 共有5鍾狀況:
  5. 只要有個top-level、unowned 窗口被產生、起做用、或是被摧毀;
  6. 當Taskbar須要重畫某個按鈕;
  7. 當系統須要顯示關於Taskbar的一個程序的最小化形式;
  8. 當目前的鍵盤佈局狀態改變;
  9. 當使用者按Ctrl+Esc去執行Task Manager(或相同級別的程序)。
    按照慣例,外殼應用程序都不接收WH_SHELL消息。因此,在應用程序可以接收WH_SHELL消息以前,應用程序必須調用SystemParametersInfofunction註冊它本身。
    函數原形:
    LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam,LPARAM lParam );

    函數功能:
    掛鉤處理過程是應用程序或庫中定義的回調函數,它與函數 SetWindowsHookEx搭配使用.此函數從系統接受外殼(shell)通知.類型HOOKPROC定義了指向此類回調函數的指針.ShellProc時應用程序或庫中定義的相應回調的位置標誌符.
    參數:
    nCode:
    指示掛鉤類型,該參數能夠是如下值之一:

HSHELL_ACCESSIBILITYSTATE: 對Windows NT5.0或以上版本有效,指示"可訪問性"已被改變.

HSHELL_ACTIVATESHELLWINDOW: shell應當激活其主窗口.

HSHELL_GETMINRECT: Windows 95 only: 一個窗口正在被最小化或者最大化,系統須要該窗口被最小化時的矩形座標.

HSHELL_LANGUAGE : Windows 95 only: 鍵盤語言被改變或者一個新的鍵盤佈局被加載.

HSHELL_REDRAW: Windows 95 only: 一個窗口在任務條上的標題已被重畫.

HSHELL_TASKMAN: Windows 95 only: 用戶已選擇其任務列表.一個提供了任務的列表的shell應用程序當返回TRUE,以阻止Windows開始(執行)其任務列表.

HSHELL_WINDOWACTIVATED: Windows 95 only: 激活狀態已被轉移給一個不一樣的頂層無屬性主窗口.

HSHELL_WINDOWCREATED: 一個頂層無屬性主窗口已被建立.當系統調用一個SheProc函數時,該窗口存在.

HSHELL_WINDOWDESTROYED:一個頂層無屬性主窗口即將銷燬.當系統調用SheProc 函數時.該窗口仍然存在.

若nCode的值小於0,則此掛鉤處理過程必須將該消息不加處理地傳送給函數CallNextHookEx 並返回其返回值.

wParam:
此參數的值依賴於參數nCode,其依賴關係以下所示:

HSHELL_ACCESSIBILITYSTATE: 指示哪個能夠訪問特徵已被改變了狀態,能夠是如下值之一:

ACCESS_FILTERKYS,ACCESS_MOUSEKEYS,ACCESS_STICKKEYS.

HSHELL_GETMINRECT:被最小化或者最大化的窗口句柄.HSHELL_LANGUAGE: 窗口的句柄.

HSHELL_REDRAW:被重畫的窗口的句柄.HSHELL_WINDOWACTIVATED:被激活的窗口的句柄.

HSHELL_WINDOWCREATED:被建立的窗口的句柄.HSHELL_WINDOWDESTROYED:被銷燬的窗口的句柄.

lParam:
此參數的值依賴於參數nCode,其依賴關係以下所示:

HSHELL_GETMINRECT:指向該RECT結構的指針.HSHELL_LANGUAGE: 鍵盤佈局的句柄.

HSHELL_REDRAW: 若該窗口正在閃現,則其值爲TRUE,不然爲FALSE.

HSHELL_WINDOWACTIVATED: 若該窗口是全屏模式,則其值爲TRUE,不然爲FALSE.返回值:返回值應爲0.

備註:

此掛鉤處理過程經過調用函數SetWindowsHookEx ,指定WH_SHLL掛鉤類型及其相應掛鉤處理過程首地址來安裝.

  1.   WH_CBT 當基於計算機的訓練(CBT)事件發生時
    在如下事件以前,系統都會調用WH_CBT Hook子程,這些事件包括:
  2. 激活,創建,銷燬,最小化,最大化,移動,改變尺寸等窗口事件;
  3. 完成系統指令;
  4. 來自系統消息隊列中的移動鼠標,鍵盤事件;
  5. 設置輸入焦點事件;
  6. 同步系統消息隊列事件。
    Hook子程的返回值肯定系統是否容許或者防止這些操做中的一個。
    函數原形:
    LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam,LPARAM lParam);

    函數功能:
    該函數掛鉤處理過程是在應用程序或庫中定義的回調函數,它與函數 SetWindowsHookEx配套使用,系統在緝獲、建立、銷燬、最小化、最大化、移動或改變一個窗口尺寸以前調用它;在結束一個系統命令以前調用它;在將一個鼠標或鍵盤事件從系統事件隊列中刪除以前調用它;在設置鍵盤焦點以前調用它,或在與系統消息隊列進行同步以前調用它,一個基於計算機培訓(CBT)的應用程序使用此掛鉤處理過程來從系統接收有用的通知.

類型HOOKPROC定義了指向此類回調函數的指針,CBTProc是應用程序定義或庫定義的相應回調函數名的位置標識符.

參數:

nCode:

指定一個代碼,該代碼被此掛鉤處理過程用來決定如何處理此消息,該參數能夠是下值中的一個:
HCBT_ACTIVATE: 系統將要激活一個窗口.
HCBT_CLICKSKIPPED: 系統已經從系統消息隊列中刪除了一個鼠標消息,依據收到的這一掛鉤代碼,一個CBT應用程序必須安裝一個 WH_JOURNALPLAYBACK 掛鉤處理過程以響應此鼠標消息.
HCBT_CREATEWND:一個窗口將要被建立,系統在發送WM_CREATE 或WM_NCCREATE消息至相應窗口以前調用該掛鉤處理過程.若該掛鉤處理過程返回一個非0值,則系統銷燬該窗口,函數CreateWindow返回值爲NULL(0),但消息WM_DESTROY不會被髮送至相應窗口,若掛鉤處理過程返回爲零,窗口將被正常建立.
當HCBT_CREATEWND通知發出之時,相應窗口已被建立,但其最終尺寸及位置可能還沒有肯定,其父窗口也可能還還沒有被建立,存在這樣一種可能,消息被髮送給新被建立的窗口,雖然該窗口還沒有接收到WM_NCCREATE 或 WM_CREATE 消息.也可能經過對CBT_CREATEWND結構的hwndInsertAfter域的修改,來改變新被建立窗口在Z序列中的位置.
HCBT_DESTROYWND:一個窗口將被銷燬.
HCBT_KEYSKIPPED:系統已從系統消息隊列中刪除了一個鍵盤消息,依據收到的這個掛鉤代碼,一個CBT應用程序必須安裝一個 WH_JOURNALPLAYBACK掛鉤處理過程以響應相應的鍵盤消息.
HCBT_MINMAX: 一個窗口將被最小化或最大化.
HCBT_MOVESIZE: 一個窗口將被移動或改變尺寸.
HCBT_QS: 系統已從系統消息隊列中取到一個WM_QUEUESYNC 消息.
HCBT_SETFOCUS: 一個窗口將要得到鍵盤焦點.
HCBT_SYSCOMMAND: 一個系統命令將被執行.這使得一個CBT應用程序能夠避免因熱鍵響應而進行任務切換.
若nCode的值小於0,此掛鉤處理過程必須不加處理地將此消息發送給函數CallNextHookEx,並返回函數CallNextHookEx的返回值.

wParam:

取決於參數nCode的值,詳細信息參見如下的說明部分.

lParam:

取決於參數nCode的值,詳細信息參見如下的說明部分.

返回值:

此掛鉤處理過程的返回值決定了系統容許或禁止如下操做之一,對於與如下掛鉤代碼相應的操做,返回值爲0則容許這樣的操做,返回值爲1則禁止.

HCBT_ACTIVATE
HCBT_CREATEWNDHCBT_DESTROYWND
HCBT_MINMAX
HCBT_MOVESIZEHCBT_SETFOCUS
HCBT_SYSCOMMAND
對於與如下CBT掛鉤代碼相對應的操做,返回值被忽略.
HCBT_CLICKSKIPPED
HCBT_KEYSKIPPED
HCBT_QS

備註:

除如下掛鉤代碼以外,不該當安裝WH_JOURNALPLAYBACK掛鉤處理過程.

此掛鉤處理過程必須放在某個動態連接庫中,一個應用程序經過調用函數 SetWindowsHookEx指定WH_CBT 掛鉤類型與相應掛鉤處理過程首地址來安裝掛鉤處理過程.

如下列示了參數wParam和lParam與每一種HCBT掛鉤代碼的關係.

指定一個長指針指向結構CBTACTIVATESTRUCT 的長指針,該結構包含了指向激活窗口的句柄,並指示被激活者是否因爲點擊而發生改變.

值 參數wParam       參數lParam

HCBT_ACTIVATE   指定將要被激活的窗口句柄.

指定一個指向結構MOUSEHOOKSTRUCT的長指針,該結構包含點擊測試代碼及 鼠標消息發往的窗口句柄.HCBT_ CLICKSKIPPED 值僅當一個WH_MOUSE掛鉤被安裝了之時才發送一個CBTProc掛鉤處理過程,關於點擊 測試代碼的列表,參見 WM_NCHITTEST.

HCBT_CLICKSKIPPED  標識鼠標消息從系統消息隊列中被刪除.

指定一個指向 CBT_CREATEWND結構的長指針,該結構包含窗口的初始化參數,這些參數包括窗口的座標和尺寸,經過改變這些參數.一個CBTProc掛鉤處理過程可以設置窗口的初始尺寸和位置.

HCBT_CREATEWND 指定新窗口的句柄.

HCBT_DESTROYWND  指定將被銷燬的窗口句柄.     未定義,必須設置爲0.

指示重複次數,掃描碼,鍵轉義碼,前驅鍵狀態和上下文代碼.僅當WH_KEYBOARD掛鉤被安裝了之時,此HCBT_KEYSKIPPED值被髮送 CBTProc 掛鉤處理過程.欲得到更多信息,參見 WM_KEYUP 或WM_KEYDOWN

HCBT_KEYSKIPPED 指示虛擬鍵的代碼.

低"字"部分指定一個顯示窗口的值(SW_),以指定相應操做,詳情參見ShowWindow,高"字"部分未定義.

HCBT_MINMAX 指定被最小化或最大化的窗口句柄

指定一個指向RECT結構的長指針,該結構包含窗口的座標,經過改變結構的值,一個CBTProc的子處理過程可以設置窗口的最終位置.

HCBT_MOVESIZE 指定將被移動或改變尺寸的窗口句柄.

HCBT_QS 未定義,必須設置爲0 未定義,必須設置爲0

HCBT_SETFOCUS 指定得到鍵盤焦點的窗口句柄. 指示失去鍵盤焦點的窗口句柄.

指示系統命令的值(SC_)以標識相應系統命令,欲知更多關於系統命令值的信息,參見WM_SYSCOMMAND.

包含與WM_SYSCOMMAND消息的lParam值相同的數據.若一個系統菜單命令被鼠標選種,則低"字"部分包含光標在屏幕座標系中的X座標值,高"字"部分包含Y座標值,其餘狀況下,此參數未被使用.

HCBT_SYSCOMMAND

類型HOOKPROC定義了一類指針指向此類回調函數,CBTProc 僅僅是在應用程序或庫中定義的相應函數名的位置標識符.

  1.   WH_FOREGROUNDIDLE 由WINDOWS本身使用,通常的應用程序不多使用
    當應用程序的前臺線程處於空閒狀態時,可使用WH_FOREGROUNDIDLEHook執行低優先級的任務。當應用程序的前臺線程大概要變成空閒狀態時,系統就會調用WH_FOREGROUNDIDLEHook子程。
    函數原形:

    DWORD ForegroundIdleProc(int code,DWORD wParam,LONG lParam);
    函數功能:
    該函數處理過程是應用程序或庫定義的回調函數, 它與函數SetWindowsHookEx搭配使用,系統在前臺線程進入空閒狀態以前調用此函數.
    
    類型HOOKPROC定義了指向此類回調函數的指針, ForegroundIdleProc是應用程序定義或庫定義的相應回調函數名的位置標識符.
    
    參數:
    Code:
    
    指示此掛鉤處理過程是否必須處理消息, 若nCode的值是HC_ACTION,則掛鉤處理過程必須處理此消息,若nCode之值小於0,則此掛鉤處理過程必須將此消息不加處理地傳送給函數CallNextHookEx並返回其返回值.
    wParam:
    
    未被使用.
    lParam:
    
    未被使用.
    
    返回值:
    
    若nCode的值小於0,則此掛鉤函數必須返回函數CallNextHookEx所返回的值;若nCode的值大於或等於0,咱們極力推薦對函數CallNextHookEx進行調用,並返回其返回值.不然,其餘安裝了掛鉤WH_FOREGROUNDIDLE的應用程序將沒法收到掛鉤通知,從而致使錯誤的行爲.若此掛鉤處理過程沒有調用函數CallNextHookEx,則返回值爲0.
  2.   WH_DEBUG 用來給鉤子函數除錯
    在系統調用系統中與其餘Hook關聯的Hook子程以前,系統會調用WH_DEBUGHook子程。你可使用這個Hook來決定是否容許系統調用與其餘Hook關聯的Hook子程。
    函數原形:

    LRESULT CALLBACK DebugProc(int nCode,WPARAM wParam,LPARAM lParam);
    函數功能:
    該掛鉤處理過程是應用程序或庫中定義的回調函數,它與函數SetWindowsHookEx搭配使用,系統在調用與任何掛鉤類型和相關的掛鉤處理過程以前調用它,系統傳送關於被調用的掛鉤的信息給DebugProc掛鉤處理過程,此掛鉤處理過程檢查上述信息,並決定該掛鉤是否被調用.
    
    類型HOOKPROC定義了指向此類回調函數的指針, DebugProc是應用程序定義或庫定義的相應回調函數名的位置標識符.
    
    參數:
    nCode:
    
    指示掛鉤處理過程是否必須處理此消息.若nCode的值是HC_ACTION,則掛鉤處理過程必須處理此消息,若nCode之值小於0,此掛鉤處理過程必須將此消息不加處理地傳送給函數CallNextHookEx並返回其返回值.
    
    wParam:
    
    指示將被調用的掛鉤類型,此參數能夠爲如下值:
    WH_CALLWNDPROC: 安裝一個監視發送至目標窗口處理過程之的消息的掛鉤處理過程,對該消息進行,詳情參見CallWndProc掛鉤處理過程.
    WH_CALLWNDPROCRET :安裝一個掛鉤處理過程,以監視已剛被目標窗口處理過程處理過了的消息,詳情參見 CallWndRetProc 掛鉤處理過程.
    WH_CBT :安裝一個掛鉤處理過程,接受對CBT應用程序有用的消息 ,詳情參見 CBTProc 掛鉤處理過程.
    WH_DEBUG:安裝一個掛鉤處理過程以便對其餘掛鉤處理過程進行調試, 詳情參見DebugProc掛鉤處理過程.
    WH_FOREGROUNDIDLE:安裝一個掛鉤處理過程,該掛鉤處理過程當應用程序的前臺線程即將進入空閒狀態時被調用,它有助於在空閒時間內執行低優先級的任務.
    WH_GETMESSAGE:安裝一個掛鉤處理過程對寄送至消息隊列的消息進行監視,詳情參見 GetMsgProc 掛鉤處理過程.
    WH_JOURNALPLAYBACK:安裝一個掛鉤處理過程,對此前由WH_JOURNALRECORD 掛鉤處理過程紀錄的消息進行寄送.詳情參見 JournalPlaybackProc掛鉤處理過程.
    WH_JOURNALRECORD:安裝一個掛鉤處理過程,對寄送至系統消息隊列的輸入消息進行紀錄.詳情參見JournalRecordProc掛鉤處理過程.
    WH_KEYBOARD:安裝一個掛鉤處理過程對擊鍵消息進行監視. 詳情參見KeyboardProc掛鉤處理過程.
    WH_MOUSE:安裝一個掛鉤處理過程,對鼠標消息進行監視. 詳情參見 MouseProc掛鉤處理過程.
    WH_MSGFILTER:安裝一個掛鉤處理過程, 以監視由對話框、消息框、菜單條、或滾動條中的輸入事件引起的消息.詳情參見MessageProc掛鉤處理過程.
    WH_SHELL:安裝一個掛鉤處理過程以接受對外殼應用程序有用的通知, 詳情參見 ShellProc掛鉤處理過程.
    WH_SYSMSGFILTER:安裝一個掛鉤處理過程,以監視由對話框、消息框、菜單條、或滾動條中的輸入事件引起的消息.這個掛鉤處理過程對系統中全部應用程序的這類消息都進行監視.詳情參見 SysMsgProc掛鉤處理過程.
    
    lParam:
    
    指向一個DEBUGHOOKINFO結構,該結構包含但願被傳送給相應掛鉤處理過程的參數,爲避免系統調用此掛鉤,此掛鉤處理過程必須返回一非0值,不然,此掛鉤處理過程必須調用函數CallNextHookEx.
    
    備註:
    
    一個應用程序經過調用函數 SetWindowsHookEx指定 WH_DEBUG 掛鉤類型與相應掛鉤處理過程首地址來安裝此掛鉤處理過程.
相關文章
相關標籤/搜索