1.setWindowsHookex詳解html
http://blog.csdn.net/mmllkkjj/article/details/6627188shell
函數功能:該函數將一個應用程序定義的掛鉤處理過程安裝到掛鉤鏈中去,您能夠經過安裝掛鉤處理過程來對系統的某些類型事件進行監控,這些事件與某個特定的線程或系統中的全部事件相關.函數
函數原形:HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId );工具
參數:佈局
idHook:指示欲被安裝的掛鉤處理過程之類型,此參數能夠是如下值之一:spa
WH_CALLWNDPROC(4): 安裝一個掛鉤處理過程,在系統將消息發送至目標窗口處理過程以前,對該消息進行監視,詳情參見CallWndProc掛鉤處理過程..net
WH_CALLWNDPROCRET(12) :安裝一個掛鉤處理過程,它對已被目標窗口處理過程處理過了的消息進行監視,詳情參見 CallWndRetProc 掛鉤處理過程.線程
WH_CBT(5) :安裝一個掛鉤處理過程,接受對CBT應用程序有用的消息 ,詳情參見 CBTProc 掛鉤處理過程.指針
WH_DEBUG(9):安裝一個掛鉤處理過程以便對其餘掛鉤處理過程進行調試, 詳情參見DebugProc掛鉤處理過程.調試
WH_FOREGROUNDIDLE(11):安裝一個掛鉤處理過程,該掛鉤處理過程當應用程序的前臺線程即將進入空閒狀態時被調用,它有助於在空閒時間內執行低優先級的任務.
WH_GETMESSAGE(3):安裝一個掛鉤處理過程對寄送至消息隊列的消息進行監視,詳情參見 GetMsgProc 掛鉤處理過程.
WH_JOURNALPLAYBACK(1):安裝一個掛鉤處理過程,對此前由WH_JOURNALRECORD 掛鉤處理過程紀錄的消息進行寄送.詳情參見 JournalPlaybackProc掛鉤處理過程.
WH_JOURNALRECORD(0):安裝一個掛鉤處理過程,對寄送至系統消息隊列的輸入消息進行紀錄.詳情參見JournalRecordProc掛鉤處理過程.
WH_KEYBOARD(2):安裝一個掛鉤處理過程對擊鍵消息進行監視. 詳情參見KeyboardProc掛鉤處理過程.
WH_KEYBOARD_LL(13):此掛鉤只能在Windows NT中被安裝,用來對底層的鍵盤輸入事件進行監視.詳情參見LowLevelKeyboardProc掛鉤處理過程.
WH_MOUSE(7):安裝一個掛鉤處理過程,對鼠標消息進行監視. 詳情參見 MouseProc掛鉤處理過程.
WH_MOUSE_LL(14):此掛鉤只能在Windows NT中被安裝,用來對底層的鼠標輸入事件進行監視.詳情參見LowLevelMouseProc掛鉤處理過程.
WH_MSGFILTER(-1):安裝一個掛鉤處理過程, 以監視由對話框、消息框、菜單條、或滾動條中的輸入事件引起的消息.詳情參見MessageProc掛鉤處理過程.
WH_SHELL(10):安裝一個掛鉤處理過程以接受對外殼應用程序有用的通知, 詳情參見 ShellProc掛鉤處理過程.
WH_SYSMSGFILTER(6):安裝一個掛鉤處理過程,以監視由對話框、消息框、菜單條、或滾動條中的輸入事件引起的消息.這個掛鉤處理過程對系統中全部應用程序的這類消息都進行監視.詳情參見 SysMsgProc掛鉤處理過程.
lpfn:指向相應的掛鉤處理過程.若參數dwThreadId爲0或者指示了一個其餘進程建立的線程之標識符,則參數lpfn必須指向一個動態連接中的掛鉤處理過程.不然,參數lpfn能夠指向一個與當前進程相關的代碼中定義的掛鉤處理過程.
hMod:指示了一個動態連接的句柄,該動態鏈接庫包含了參數lpfn 所指向的掛鉤處理過程.若參數dwThreadId指示的線程由當前進程建立,而且相應的掛鉤處理過程定義於當前進程相關的代碼中,則參數hMod必須被設置爲NULL(0).
dwThreadId:指示了一個線程標識符,掛鉤處理過程與線程相關.若此參數值爲0,則該掛鉤處理過程與全部現存的線程相關.
返回值:若此函數執行成功,則返回值就是該掛鉤處理過程的句柄;若此函數執行失敗,則返回值爲NULL(0).若想得到更多錯誤信息,請調用GetLasError函數.
備註:若參數hMod爲NULL,而參數dwThreadld爲0或者指示了一個其餘進程建立的線程標識符,則會產生錯誤.
對函數CallNextHookEx進行調用如下連接下一個掛鉤處理過程是可選的,但也是被推薦的不然,其餘安裝了此掛 鉤的應用程序將沒法得到此掛鉤通知,從而可能致使錯誤的行爲.除非您確實但願防止其餘應用程序看到此掛鉤通知,您應當調用函數 CallNextHookEx.
在終止一個應用程序以前,必須調用函數UnhookWindowsHookEx以釋放與此掛鉤相關的系統資源.
掛鉤的做用域依賴與掛鉤的類型.一些掛鉤只能被設置成系統做用域,其餘掛鉤(以下所示)還能夠被設置爲某一特定線程的做用域:
WH_CALLWNDPROC 線程或系統
WH_CALLWNDPROCRET 線程或系統
WH_CBT 線程或系統
WH_DEBUG 線程或系統
WH_FOREGROUNDIDLE 線程或系統
WH_GETMESSAGE 線程或系統
WH_JOURNALPLAYBACK 系統
WH_JOURNALRECORD 系統
WH_KEYBOARD 線程或系統
WH_KEYBOARD_LL 線程或系統
WH_MOUSE 線程或系統
WH_MOUSE_LL 線程或系統
WH_MSGFILTER 線程或系統
WH_SHELL 線程或系統
WH_SYSMSGFILTER 系統
對於一個特定的掛鉤類型,現成的掛鉤先被調用,而後纔是系統掛鉤被調用.
系統掛鉤做爲共享資源,安裝一次就對所用應用程序產生影響.全部的系統掛鉤函數必須在庫中.系統掛鉤應當被限制用於一些特殊用途的應用程序或者用來做爲應用程序調試的輔助工具.再也不須要掛鉤的庫應當將相應的掛鉤處理過程刪除掉.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,頭文件winuser.h,庫文件:用戶自定義,Unicode,在Windows NT上實現了Unicode和ANSI的版本.
ShellProc
函數功能:掛鉤處理過程是應用程序或庫中定義的回調函數,它與函數 SetWindowsHookEx搭配使用.此函數從系統接受外殼(shell)通知.類型HOOKPROC定義了指向此類回調函數的指針.ShellProc時應用程序或庫中定義的相應回調的位置標誌符.
函數原形:LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam,LPARAM lParam );
參數:
nCode:指示掛鉤類型,該參數能夠是如下值之一:
HSHELL_ACCESSIBILITYSTATE: 對Windows NT5.0或以上版本有效,指示"可訪問性"已被改變.
HSHELL_ACTIVATESHELLWINDOW: shell應當激活其主窗口.
HSHELL_GETMINRECT: Windows 95 only: 一個窗口正在被最小化或者最大化,系統須要該窗口被最小化時的矩形座標.
HSHELL_LANGUAGE : Windows 95 only: 鍵盤語言被改變或者一個新的鍵盤佈局被加載.
來源:(http://blog.sina.com.cn/s/blog_626a27090100f0m3.html) - 鉤子函數大全_老代碼_新浪博客
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掛鉤類型及其相應掛鉤處理過程首地址來安裝.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,頭文件winuser.h,庫文件,用戶自定義.
SysMsgProc
函數功能:掛鉤處理過程是應用程序或庫中定義的回調函數,它與函數 SetWindowsHookEx搭配使用.當一個對話框、消息框、菜單條、或滾動條中的輸入事件發生,且由此引起的消息還沒有被處理以前,系統對此掛鉤處 理過程進行調用.此函數能夠對系統中全部的對話框、消息框、菜單條、或滾動條消息進行監視.
類型HOOKPROC定義了指向此類回調函數的指針.SysMsgProc 是庫中相應回調函數名的位置標誌符.
函數原形:LRESULT CALLBACK SysMsgProc(int nCode,WPARAM wParam,LPARAM lParam);
參數:
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掛鉤類型及相應掛鉤處理過程首地址來安裝此掛鉤.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,頭文件winuser.h,庫文件,用戶自定義.
UnhookWindowsHookEx
函數功能: 該函數將一個由SetWindowsHookEx 安裝的掛鉤處理過程從掛鉤鏈中刪除.
函數原形: BOOL UnhookWindowsHookEx(HHOOK hhk);
參數:
hhk: 被刪除的掛鉤的句柄.此參數是一個掛鉤句柄,該句柄是此前函數SetWindowsHookEx的返回值.
返回值:該函數執行成功返回非0值,失敗返回0.
備註:即便UnhookWindowsHookEx 函數返回以後,該鉤子處理過程也可能正處於被其它線程調用的狀態.若當前未調用該鉤子處理過程,則在 UnhookWindowsHookEx 函數返回以前該鉤子處理過程被當即刪除.
DelHookProc:該函數已過期,它僅僅是用來與Windows的16位版本兼容.在32位Windows系統中應當使用函數CallNextHookEx.
SetWindowsHook:該函數已過期,它僅僅是用來與Windows的16位版本兼容.在32位Windows系統中應當使用函數SetWindowsHookEx.
UnhookWindowsHook:該函數已過期,它僅僅是用來與Windows的16位版本兼容.在32位Windows系統中應當使用函數UnhookWindowsHookEx.
CallMsgFilter
函數功能:該函數將特定消息和掛鉤代碼發送給與掛鉤 WH_SYSMSGFILTER和WH_MSGFILTER 相聯繫的掛鉤處理過程,一個 WH_SYSMSGFILTER 或者 WH_MSGFILTER掛鉤處理過程是指應用程序定義的回調函數,這些回調函數負責檢查,並可有選擇地修改關於對話框、消息框、菜單條、滾動條的消息。
函數原形:BOOL CallMsgFilter(LPMSG lpMsg, int nCode);
參數:
lpMsg:指向一個MSG結構,該結構包含發送給掛鉤處理過程的消息.
nCode:指定掛鉤處理過程須要使用的應用程序定義的代碼,以肯定如何對消息進行處理,該代碼切忌採用與系統預約義的與WH_SYSMSGFILTER和WH_MSGFILTER掛鉤相關的掛鉤代碼(MSGF_ 和 HC_開頭)相同的值.
返回值:若該應用程序可對消息做進一步處理,則返回值爲0,若該應用程序不能對該消息做進一步處理,則返回值爲非0值.
備註:系統對CallMsgFilter進行調用,以使得應用程序可以檢查和控制在對對話框、消息框、菜單條、滾動條的內部處理過程當中產生的,或是由用戶按下<Alt+Tab>組合鍵以激活不一樣窗口時產生的消息流.
可經過調用函數SetWindowsHookEx來安裝此掛鉤處理過程.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不支持,頭文件:winuser.h,庫文件:user32.lib,Unicode:在Windows NT上實現了Unicode和ANSI的版本.