• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            幽魂國度

             

            鉤子

            HHOOK SetWindowsHookEx(                                    //裝載一個(gè)鉤子         
                int idHook,                                            //描述被裝載的鉤子的類型,參數(shù)見下面
                HOOKPROC lpfn,                               //鉤子回調(diào)函數(shù)的地址,如果 dwThreadId 為 0 那么這個(gè)回調(diào)函數(shù)會(huì)在不同的進(jìn)程中創(chuàng)建,它必須寫在在DLL中
                HINSTANCE hMod,                                        //DLL的句柄
                DWORD dwThreadId                                    //描述要鉤住的線程ID,如果這個(gè)參數(shù)為0,則會(huì)鉤住桌面上的所有線程
            );                                                         //如果函數(shù)調(diào)用成功,返回值是成功開啟的鉤子句柄,如果失敗,返回值為 0
            /*
                idHook 相關(guān)的參數(shù):
                        WH_CALLWNDPROC                :安裝一個(gè)鉤子,監(jiān)視系統(tǒng)發(fā)送給窗口的消息,更多信息如下:
            LRESULT CALLBACK CallWndProc(         
                                        int nCode,                       //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                        WPARAM wParam,      //描述這個(gè)消息是否來自于當(dāng)前的線程,如果這個(gè)消息是來自于當(dāng)前的線程那么該值為非零,否則該值為零
                                        LPARAM lParam           //一個(gè)指向 CWPSTRUCT 結(jié)構(gòu)體的指針,更多相關(guān)信息如下:
                                    );
                                                typedef struct {
                                                    LPARAM lParam;                   //消息的擴(kuò)展信息
                                                    WPARAM wParam;                //消息的擴(kuò)展信息
                                                    UINT message;                        //消息
                                                    HWND hwnd;                         //接受消息的窗口
                                                } CWPSTRUCT, *PCWPSTRUCT;

                        WH_CALLWNDPROCRET            :安裝一個(gè)鉤子,監(jiān)視系統(tǒng)發(fā)送已經(jīng)處理后給窗口的消息,更多信息如下:
                                LRESULT CALLBACK CallWndRetProc(          
                                        int nCode,                      //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                        WPARAM wParam,     //描述這個(gè)消息是否來自于當(dāng)前的線程,如果這個(gè)消息是來自于當(dāng)前的線程那么該值為非零,否則該值為零
                                        LPARAM lParam         //一個(gè)指向 CWPSTRUCT 結(jié)構(gòu)體的指針,更多相關(guān)信息如上:
                                    );

                        WH_CBT                        :安裝一個(gè)鉤子,臨視系統(tǒng)發(fā)送給窗口的基本信息(基于計(jì)算機(jī)培訓(xùn)的"鉤子"),更多信息如下:
                                LRESULT CALLBACK CBTProc(         
                                    int nCode,                        //描述鉤子程序裝如何處理消息,如果 nCode 的值小于零 那么鉤子程序?qū)⑻^這個(gè)消息.返回調(diào)用 CallNextHookEx 得到的返回值,相關(guān)值的意義如下
                                    WPARAM wParam,        //相關(guān)信息參見返回值
                                    LPARAM lParam            //相關(guān)信息參見返回值
                                );                                    //返回值為參數(shù)一相關(guān)的值
                                                //        nCode    的相關(guān)值
                                                    HCBT_ACTIVATE            :系統(tǒng)正要激活一個(gè)窗口
                                                    HCBT_CLICKSKIPPED        :系統(tǒng)已經(jīng)從消息隊(duì)列中刪除了鼠標(biāo)滾回消息,必須在安裝了 WH_JOURNALPLAYBACK 鉤子之后才會(huì)觸發(fā)該消息
                                                    HCBT_CREATEWND            :一個(gè)窗口已經(jīng)被創(chuàng)建,系統(tǒng)會(huì)在發(fā)送 WM_CREATE 或 WM_NCCREATE 消息之前調(diào)用鉤子程序.如果鉤子程序
                                                                             的返回值為非零,那么系統(tǒng)裝會(huì)銷毀這個(gè)窗口, CreateWindow 函數(shù)的返回值會(huì)為 NULL,但是 WM_DESTROY
                                                                             消息不會(huì)發(fā)送給窗口,如果鉤子程序的返回值為零,那么窗口會(huì)被正常創(chuàng)建,在 HCBT_CREATEWND 被通知
                                                                             的時(shí)候,這個(gè)窗口就已經(jīng)被創(chuàng)建了,但是它的大小和位置被有被指定,以及它的父窗口也沒有被指定.
                                                    HCBT_DESTROYWND            :一個(gè)窗口已經(jīng)被銷毀
                                                    HCBT_KEYSKIPPED            :系統(tǒng)已經(jīng)從消息隊(duì)列中刪除了鍵盤滾回消息,必須在安裝了 WH_JOURNALPLAYBACK 鉤子之后才會(huì)觸發(fā)該消息
                                                    HCBT_MINMAX                :一個(gè)窗口已經(jīng)最小化或最大化了
                                                    HCBT_MOVESIZE            :一個(gè)窗口已經(jīng)移動(dòng)了或改變了大小
                                                    HCBT_QS                    :一個(gè)窗口已經(jīng)從系統(tǒng)消息隊(duì)列中接受了  WM_QUEUESYNC  消息.
                                                    HCBT_SETFOCUS            :一個(gè)窗口已經(jīng)被激活
                                                    HCBT_SYSCOMMAND            :一個(gè)窗口已經(jīng)接受了系統(tǒng)命令

                        WH_DEBUG                    :安裝一個(gè)鉤子,鉤住安裝鉤子的程序(差錯(cuò)"鉤子"),更多信息如下:
                                LRESULT CALLBACK DebugProc(          
                                    int nCode,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                    WPARAM wParam,                    //描述什么樣的鉤子被裝載了,參數(shù)值與 SetWindowsHookEx 函數(shù)的 idHook 參數(shù)值相同
                                    LPARAM lParam                    //一個(gè)指向  DEBUGHOOKINFO 結(jié)構(gòu)體的指什,具體信息如下:
                                );
                                        typedef struct {
                                            DWORD idThread;                                //filter 線程的ID
                                            DWORD idThreadInstaller;                    //debugging filter 線程的ID
                                            LPARAM lParam;                                //描述跳過此鉤子程序要傳遞給Debug程序的 lParam
                                            WPARAM wParam;                                //描述跳過此鉤子程序要傳遞給Debug程序的 wParam
                                            int code;                                    //描述跳過此鉤子程序要傳遵給Debug程序的 nCode
                                        } DEBUGHOOKINFO, *PDEBUGHOOKINFO;

                        WH_FOREGROUNDIDLE            :安裝一個(gè)鉤子,當(dāng)一個(gè)程序的前端線程改變?yōu)榈蛢?yōu)先級(jí)時(shí)調(diào)用鉤子程序,這個(gè)鉤子在一個(gè)任務(wù)被降低優(yōu)先級(jí)前工作(前臺(tái)空閑窗口"鉤子"),更多信息如下:
                                DWORD CALLBACK ForegroundIdleProc(
                                    int code,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                    DWORD wParam,       //這個(gè)參數(shù)沒有用
                                    LONG lParam              //這個(gè)參數(shù)沒有用
                                );

                        WH_GETMESSAGE                :安裝一個(gè)鉤子,監(jiān)視一個(gè)消息被寄送到了消息等待隊(duì)列中(接收消息投遞的"鉤子"),更多信息如下:
                                LRESULT CALLBACK GetMsgProc(          
                                    int code,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                    WPARAM wParam,                    //描述這個(gè)消息是否被刪除了從消息隊(duì)列中 值為:    PM_NOREMOVE        :描述這個(gè)消息沒有從消息隊(duì)列中刪除(應(yīng)用程序調(diào)用了 PeekMessage )        
                                                                                                                    PM_REMOVE        :描述這個(gè)消息已經(jīng)從消息隊(duì)列中刪除(應(yīng)用程序調(diào)用了 GetMessage 或 PeekMessage)
                                    LPARAM lParam                    //一個(gè)指向 MSG 結(jié)構(gòu)體的指針,,具體信息如下:
                                );
                                        typedef struct {
                                            HWND hwnd;                //接受消息的窗體句柄
                                            UINT message;            //描述消息,應(yīng)用程序通常使用低位 WORD 值,操作系統(tǒng)通常使用高位 WORD 值
                                            WPARAM wParam;            //消息的附加消息
                                            LPARAM lParam;            //消息的附加消息
                                            DWORD time;                //消息的發(fā)送時(shí)間
                                            POINT pt;                //消息發(fā)送時(shí)的鼠標(biāo)指針位置
                                        } MSG, *PMSG;

                        WH_JOURNALPLAYBACK            :安裝一個(gè)鉤子,滾回一個(gè)鼠標(biāo)鍵盤的消息隊(duì)列,這個(gè)消息隊(duì)列是由 WH_JOURNALRECORD 鉤子創(chuàng)建的,更多信息如下:
                                LRESULT CALLBACK JournalPlaybackProc(
                                    int code,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                                                      這個(gè)參數(shù)可能是以下值:          
                   HC_GETNEXT        :鉤子程序拷貝了當(dāng)前的鼠標(biāo)或鍵盤消息,它是一個(gè) EVENTMSG 結(jié)構(gòu)體,由 lParam 來傳遞指針
                   HC_NOREMOVE        :應(yīng)用程序調(diào)用了 PeekMessage 函數(shù),且調(diào)用 PeekMessage 函數(shù)之后,消息沒有從系統(tǒng)消息隊(duì)列中被移除
                   HC_SKIP            :鉤子程序準(zhǔn)備復(fù)制被 lParam 指向的 EVENTMSG 結(jié)構(gòu)下的鼠標(biāo)或鍵盤信息,一旦收到 HC_GETNEXT 鉤子程序復(fù)制
                   HC_SYSMODALOFF    :一個(gè)消息框被銷毀,鉤子程序?qū)⒗^續(xù)開始滾回消息
                   HC_SYSMODALON    :一個(gè)消息框被顯示出來,鉤子程序?qū)和L回消息,直到這個(gè)消息框被銷毀,鉤子程序才繼續(xù)開始滾回消息
                                    WPARAM wParam,                    //無用的參數(shù)
                                    LPARAM lParam                    //只有當(dāng) nCode 參數(shù)的值為 HC_GETNEXT ,它才是一個(gè)指向 EVENTMSG 結(jié)構(gòu)體的指針,否則是無用的參數(shù)
                                );
                                 
                        WH_JOURNALRECORD              :安裝一個(gè)鉤子,記錄一個(gè)鼠標(biāo)鍵盤消息隊(duì)列,更多信息如下:
                                LRESULT CALLBACK JournalRecordProc(          
                                    int code,//描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                              HC_SYSMODALOFF    :一個(gè)消息框被銷毀,鉤子程序?qū)⒗^續(xù)開始滾回消息
                                              HC_SYSMODALON    :一個(gè)消息框被顯示出來,鉤子程序?qū)和L回消息,直到這個(gè)消息框被銷毀,鉤子程序才繼續(xù)開始滾回消息
                                    WPARAM wParam,//這個(gè)參數(shù)是無效的
                                    LPARAM lParam//一個(gè)指向 EVENTMSG 結(jié)構(gòu)體的指針變量
                                );
                                    typedef struct {
                                        UINT message; //描述消息
                                        UINT paramL;  //消息的擴(kuò)展信息
                                        UINT paramH;  //消息的擴(kuò)展信息
                                        DWORD time;  //寄送消息的時(shí)間
                                        HWND hwnd;  //接受消息的窗口句柄
                                    } EVENTMSG, *PEVENTMSG;
                        
                        WH_KEYBOARD                    :安裝一個(gè)鉤子:監(jiān)視鍵盤的消息,更多信息如下:
                                LRESULT CALLBACK KeyboardProc(
                                    int code,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                                                      這個(gè)參數(shù)可能是以下值:           
                                       HC_ACTION        :wParam 和 lParam 包涵了完整的消息
                                       HC_NOREMOVE        :wParam 和 lParam 包涵了完整的消息,且這個(gè)鍵盤消息沒有從系統(tǒng)消息隊(duì)列中刪除
                                    WPARAM wParam,                    //描述鍵盤消息的虛擬鍵信息
                                    LPARAM lParam                    //描述鍵盤消息的掃描碼信息
                                );

                        WH_KEYBOARD_LL                :安裝一個(gè)鉤子:監(jiān)視鍵盤的低級(jí)消息(Windows NT/2000/XP),更多信息如下:
                                LRESULT CALLBACK LowLevelKeyboardProc(
                                    int nCode,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                                     HC_ACTION        :wParam 和 lParam 包涵了完整的消息
                                    WPARAM wParam,               //描述了鍵盤的消息值:WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, 或 WM_SYSKEYUP.
                                    LPARAM lParam                    //一個(gè)指向 KBDLLHOOKSTRUCT 結(jié)構(gòu)體的指針變量,更多信息如下:
                                );
                                        typedef struct { 
                                            DWORD vkCode;                  //鍵盤消息的虛擬鍵信息,值的范圍從1至254
                                            DWORD scanCode;               //鍵盤的掃描碼信息
                                            DWORD flags;                        //鍵盤的擴(kuò)展信息
                                            DWORD time;                        //消息的產(chǎn)生時(shí)間,可以用    GetMessageTime 函數(shù)取得
                                            ULONG_PTR dwExtraInfo;    //消息的擴(kuò)展信息
                                        } KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;

                        WH_MOUSE                    :安裝一個(gè)鉤子:監(jiān)視鍵盤的消息,更多信息如下:
                                LRESULT CALLBACK MouseProc(
                                    int nCode,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                                                      這個(gè)參數(shù)可能是以下值:        
                                                        HC_ACTION        :wParam 和 lParam 包涵了完整的消息
                                                        HC_NOREMOVE        :wParam 和 lParam 包涵了完整的消息,且這個(gè)鼠標(biāo)消息沒有從系統(tǒng)消息隊(duì)列中刪除
                                    WPARAM wParam,                    //描述了鼠標(biāo)的消息值
                                    LPARAM lParam                    //一個(gè)指向 MOUSEHOOKSTRUCT 結(jié)構(gòu)體的指針變量,更多信息如下:
                                );
                                        typedef struct {
                                            POINT pt;                //發(fā)送鼠標(biāo)消息時(shí)候的鼠標(biāo)坐標(biāo)
                                            HWND hwnd;                //接收鼠標(biāo)消息的窗口句柄
                                            UINT wHitTestCode;        //測試碼
                                            ULONG_PTR dwExtraInfo;    //鼠標(biāo)消息的擴(kuò)展信息
                                        } MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT;

                        WH_MOUSE_LL                    :安裝一個(gè)鉤子:監(jiān)視鼠標(biāo)的低級(jí)消息(Windows NT/2000/XP),更多信息如下:
                                LRESULT CALLBACK LowLevelMouseProc(
                                    int nCode,                         //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                                                    這個(gè)參數(shù)可能是以下值:            HC_ACTION        :wParam 和 lParam 包涵了完整的消息
                                    WPARAM wParam,                 //描術(shù)了鼠標(biāo)的消息值: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, 或 WM_RBUTTONUP.
                                    LPARAM lParam                      //一個(gè)指向 MSLLHOOKSTRUCT 的指針變量,具體信息如下:
                                );
                                        typedef struct {
                                            POINT pt;                         //發(fā)送鼠標(biāo)消息時(shí)候的鼠標(biāo)坐標(biāo)
                                            DWORD mouseData;        //如果這個(gè)消息是 WM_MOUSEWHEEL 則高位為滾輪的滾動(dòng)數(shù)目,低位保留.如果這個(gè)消息是  WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK,
                                                                      WM_NCXBUTTONDOWN, WM_NCXBUTTONUP, 或 WM_NCXBUTTONDBLCLK.則高位描述的是X按鈕是按下還是釋放,低位保留
                                            DWORD flags;                         //描述消息的注入事件
                                            DWORD time;                         //描述寄送消息的時(shí)候
                                            ULONG_PTR dwExtraInfo;    //描述消息的擴(kuò)展信息
                                        } MSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;

                        WH_MSGFILTER                :安裝一個(gè)鉤子:監(jiān)視一些如同輸入框,消息框,菜單,滾動(dòng)條的事件(對話框、消息框、菜單或滾動(dòng)條輸入消息"鉤子"),更多信息如下:
                                LRESULT CALLBACK MessageProc(
                                    int code,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                                                    這個(gè)參數(shù)可能是以下值:            MSGF_DDEMGR        :輸入框
                                                                                                    MSGF_DIALOGBOX    :消息框
                                                                                                    MSGF_MENU        :菜單
                                                                                                    MSGF_SCROLLBAR    :滾動(dòng)條
                                    WPARAM wParam,                    //保留值
                                    LPARAM lParam                        //一個(gè)指向 MSG 的指針變量,更多信息參見上面;
                                );

                        WH_SHELL                    :安裝一個(gè)鉤子:監(jiān)視對程序的 Shell 操作(外殼"鉤子"),更多信息如下:
                                LRESULT CALLBACK ShellProc(  
                                    int nCode,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                                                    這個(gè)參數(shù)可能是以下值:            
                                                                    HSHELL_ACCESSIBILITYSTATE            :程序的訪問權(quán)被改變 (Windows 2000/XP)
                                                                    HSHELL_ACTIVATESHELLWINDOW            :Shell 操作將激活程序的主窗口
                                                                    HSHELL_APPCOMMAND                    :用戶完成了輸入一個(gè)指令(例如按下了一個(gè)關(guān)鍵的按鈕或鍵)而且應(yīng)用程序沒有處理被產(chǎn)生的
                                                                                                                         WM_APPCOMMAND 消息.WM_APPCOMMAND值參見下面
                                                                                                                                wParam:按下或放開按鈕
                                                                                                                                lParam:
                                                                       APPCOMMAND_BASS_BOOST        :低音開關(guān)
                                                                       APPCOMMAND_BASS_DOWN        :減少低音
                                                                       APPCOMMAND_BASS_UP               :增加低音
                                                                       APPCOMMAND_BROWSER_BACKWARD    :瀏覽器-向前
                                                                       APPCOMMAND_BROWSER_FAVORITES:瀏覽器-收藏夾
                                                                       APPCOMMAND_BROWSER_FORWARD    :瀏覽器-向后
                                                                       APPCOMMAND_BROWSER_HOME        :瀏覽器-主頁
                                                                       APPCOMMAND_BROWSER_REFRESH    :瀏覽器-刷新
                                                                       APPCOMMAND_BROWSER_SEARCH    :瀏覽器-搜索
                                                                       APPCOMMAND_BROWSER_STOP        :瀏覽器-停止下載
                                                                       APPCOMMAND_CLOSE            :關(guān)閉窗口(不是程序)
                                                                       APPCOMMAND_COPY                :復(fù)制已選擇
                                                                       APPCOMMAND_CORRECTION_LIST    :當(dāng)一個(gè)不正確的字符輸入時(shí),退出
                                                                       APPCOMMAND_CUT                :剪切已選擇
                                                  APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE   :輸入和控制狀態(tài)的互相改變
                                                                       APPCOMMAND_FIND                :打開查找對話框
                                                                       APPCOMMAND_FORWARD_MAIL        :向前瀏覽郵件
                                                                       APPCOMMAND_HELP                :打開幫助對話框
                                                                       APPCOMMAND_LAUNCH_APP1        :打開應(yīng)用程序1
                                                                       APPCOMMAND_LAUNCH_APP2        :打開應(yīng)用程序2
                                                                       APPCOMMAND_LAUNCH_MAIL        :打開郵件
                                                                       APPCOMMAND_MEDIA_CHANNEL_DOWN  :向下翻多媒體的頻道(Windows XP SP1)
                                                                       APPCOMMAND_MEDIA_CHANNEL_UP    :向上翻多媒體的頻道(Windows XP SP1)
                                                                       APPCOMMAND_MEDIA_FASTFORWARD:回滾多媒體           (Windows XP SP1)
                                                                       APPCOMMAND_MEDIA_NEXTTRACK    :多媒體播放下一個(gè)文件
                                                                       APPCOMMAND_MEDIA_PAUSE        :多媒體暫停
                                                                       APPCOMMAND_MEDIA_PLAY        :多媒體播放
                                                                       APPCOMMAND_MEDIA_PLAY_PAUSE    :多媒體暫停/播放
                                                                       APPCOMMAND_MEDIA_RECORD        :多媒體開始記錄
                                                                       APPCOMMAND_MEDIA_REWIND        :回滾(???)
                                                                       APPCOMMAND_MEDIA_SELECT        :進(jìn)入多媒體選擇狀態(tài)
                                                                       APPCOMMAND_MEDIA_STOP        :多媒體停止
                                                                       APPCOMMAND_MIC_ON_OFF_TOGGLE:開關(guān)麥克風(fēng)
                                                                       APPCOMMAND_MICROPHONE_VOLUME_DOWN 麥克風(fēng)音量減小
                                                                       APPCOMMAND_MICROPHONE_VOLUME_MUTE  :關(guān)閉麥克風(fēng)
                                                                       APPCOMMAND_MICROPHONE_VOLUME_UP :麥克風(fēng)音量加大
                                                                       APPCOMMAND_NEW                :創(chuàng)建一個(gè)新窗口
                                                                       APPCOMMAND_OPEN                :打開一個(gè)窗口
                                                                       APPCOMMAND_PASTE            :粘貼
                                                                       APPCOMMAND_PRINT            :打印
                                                                       APPCOMMAND_REDO                :重復(fù)最后的動(dòng)作
                                                                       APPCOMMAND_REPLY_TO_MAIL    :回復(fù)一個(gè)郵件信息
                                                                       APPCOMMAND_SAVE                :保存當(dāng)前的文檔
                                                                       APPCOMMAND_SEND_MAIL        :發(fā)送一個(gè)郵件
                                                                       APPCOMMAND_SPELL_CHECK        :開始Spell檢查
                                                                       APPCOMMAND_TREBLE_DOWN        :減小高音
                                                                       APPCOMMAND_TREBLE_UP        :增大高音
                                                                       APPCOMMAND_UNDO                :恢復(fù)最后的操作
                                                                       APPCOMMAND_VOLUME_DOWN        :增大音量
                                                                       APPCOMMAND_VOLUME_MUTE        :關(guān)閉音
                                                                       APPCOMMAND_VOLUME_UP        :減小音量
                                                                       FAPPCOMMAND_KEY                :用戶按下了一個(gè)鍵
                                                                       FAPPCOMMAND_MOUSE            :用戶按下了一個(gè)鼠標(biāo)按鈕
                                                                       FAPPCOMMAND_OEM                :未經(jīng)確認(rèn)的事件,可能是鼠標(biāo)事件或是鍵盤事件
                                                                       MK_CONTROL                    :Ctrl鍵按下了
                                                                       MK_LBUTTON                    :鼠標(biāo)左鍵按下了
                                                                       MK_MBUTTON                    :鼠標(biāo)中鍵按下了
                                                                       MK_RBUTTON                    :鼠標(biāo)右鍵按下了
                                                                       MK_SHIFT                    :Shift鍵按下了
                                                                       MK_XBUTTON1                    :第一個(gè)X按鈕按下了
                                                                       MK_XBUTTON2                    :第二個(gè)X按鈕按下了
                                                                                    HSHELL_GETMINRECT        :一個(gè)窗口取大化或最小化時(shí)系統(tǒng)需要它最小化后的窗口矩形
                                                                                    HSHELL_LANGUAGE            :鍵盤語言改變
                                                                                    HSHELL_REDRAW            :任務(wù)欄上的該窗口項(xiàng)重畫
                                                                                    HSHELL_TASKMAN            :用戶選擇了任務(wù)欄中的一項(xiàng)
                                                                                    HSHELL_WINDOWACTIVATED    :最前端的窗口改變了Z順序
                                                                                    HSHELL_WINDOWCREATED    :一個(gè)最前端的窗口被創(chuàng)建,在調(diào)用鉤子函數(shù)的時(shí)候,該窗口已經(jīng)被創(chuàng)建
                                                                                    HSHELL_WINDOWDESTROYED    :一個(gè)最前端的窗口被銷毀,在調(diào)用鉤子函數(shù)的時(shí)候,該窗口已經(jīng)被銷毀
                                                                                    HSHELL_WINDOWREPLACED    :一個(gè)最前端的窗口被改變位置,在調(diào)用鉤子函數(shù)的時(shí)候,該窗口已經(jīng)被改變位置
                                    WPARAM wParam,                    //該參數(shù)的值隨 nCode 參數(shù)的值改變而賦有不同的意義
                                                                                nCode                        |值
                                                                                HSHELL_ACCESSIBILITYSTATE    |ACCESS_FILTERKEYS, ACCESS_MOUSEKEYS,或 ACCESS_STICKYKEYS.
                                                                                HSHELL_APPCOMMAND            |在上面已列出來了
                                                                                HSHELL_GETMINRECT            |窗口句柄
                                                                                HSHELL_LANGUAGE                |窗口句柄
                                                                                HSHELL_REDRAW                |窗口句柄
                                                                                HSHELL_WINDOWACTIVATED        |窗口句柄
                                                                                HSHELL_WINDOWCREATED        |窗口句柄
                                                                                HSHELL_WINDOWDESTROYED        |窗口句柄
                                                                                HSHELL_WINDOWREPLACED        |窗口句柄
                                    LPARAM lParam                    //該參數(shù)的值隨 nCode 參數(shù)的值改變而賦有不同的意義
                                                                                nCode                        |值
                                                                                HSHELL_APPCOMMAND            |
                                                                                HSHELL_GETMINRECT            |一個(gè)指向 RECT 的結(jié)構(gòu)體變量
                                                                                HSHELL_LANGUAGE                |鍵盤語言的句柄
                                                                                HSHELL_REDRAW                |TRUE:重畫,FALSE:別的方式
                                                                                HSHELL_WINDOWACTIVATED        |TRUE:全屏,FALSE:別的方式
                                                                                HSHELL_WINDOWREPLACED        |新的窗口句柄
                                );                                    //返回值:如果正常調(diào)用,返回值為:0 如果 nCode 值為 HSHELL_APPCOMMAND 且Shell值
                                                                        為 WM_COMMAND 則返回值為非零

                        WH_SYSMSGFILTER                    :安裝一個(gè)鉤子:監(jiān)視一些如同輸入框,消息框,菜單,滾動(dòng)條的系統(tǒng)事件(系統(tǒng)消息"鉤子"),更多信息如下:
                                LRESULT CALLBACK SysMsgProc(
                                    int code,                        //描述鉤子程序是否一定要處理這個(gè)消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個(gè)消息,如果 nCode 的值小于零,則一定要跳過這個(gè)消息
                                                                    這個(gè)參數(shù)可能是以下值:            MSGF_DDEMGR        :輸入框
                                                                                                    MSGF_DIALOGBOX    :消息框
                                                                                                    MSGF_MENU        :菜單
                                                                                                    MSGF_SCROLLBAR    :滾動(dòng)條
                                    WPARAM wParam,                    //保留值
                                    LPARAM lParam                    //一個(gè)指向 MSG 的指針變量,更多信息參見上面;
                                );
            */

            LRESULT CallNextHookEx(                                    //調(diào)用下一個(gè)Hook
                HHOOK hhk,                                            //Hook句柄
                int nCode,                                            //照Hook函數(shù)的 nCode 函數(shù)輸入,具體見上
                WPARAM wParam,                                        //照Hook函數(shù)的 wParam 函數(shù)輸入,具體見上
                LPARAM lParam                                        //照Hook函數(shù)的 lParam 函數(shù)輸入,具體見上
            );                                                        //

            BOOL UnhookWindowsHookEx(                                //卸載掉鉤子
                HHOOK hhk                                            //Hook句柄
            );


            //////////////////////////////////////////////////////////////////////////////////
            鉤子類型
                     每一種類型的Hook可以使應(yīng)用程序能夠監(jiān)視不同類型的系統(tǒng)消息處理機(jī)制。下面描述所有可以利用的Hook類型。
            1、WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks
            WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以監(jiān)視發(fā)送到窗口過程的消息。系統(tǒng)在消息發(fā)送到接收窗口過程之前調(diào)用WH_CALLWNDPROC Hook子程,并且在窗口過程處理完消息之后調(diào)用WH_CALLWNDPROCRET Hook子程。
            WH_CALLWNDPROCRET Hook傳遞指針到CWPRETSTRUCT結(jié)構(gòu),再傳遞到Hook子程。
            CWPRETSTRUCT結(jié)構(gòu)包含了來自處理消息的窗口過程的返回值,同樣也包括了與這個(gè)消息關(guān)聯(lián)的消息參數(shù)。
            2、WH_CBT Hook
            在以下事件之前,系統(tǒng)都會(huì)調(diào)用WH_CBT Hook子程,這些事件包括:
            1. 激活,建立,銷毀,最小化,最大化,移動(dòng),改變尺寸等窗口事件;
            2. 完成系統(tǒng)指令;
            3. 來自系統(tǒng)消息隊(duì)列中的移動(dòng)鼠標(biāo),鍵盤事件;
            4. 設(shè)置輸入焦點(diǎn)事件;
            5. 同步系統(tǒng)消息隊(duì)列事件。
            Hook子程的返回值確定系統(tǒng)是否允許或者防止這些操作中的一個(gè)。
            3、WH_DEBUG Hook
            在系統(tǒng)調(diào)用系統(tǒng)中與其他Hook關(guān)聯(lián)的Hook子程之前,系統(tǒng)會(huì)調(diào)用WH_DEBUG Hook子程。你可以使用這個(gè)Hook來決定是否允許系統(tǒng)調(diào)用與其他Hook關(guān)聯(lián)的Hook子程。
            4、WH_FOREGROUNDIDLE Hook
            當(dāng)應(yīng)用程序的前臺(tái)線程處于空閑狀態(tài)時(shí),可以使用WH_FOREGROUNDIDLE Hook執(zhí)行低優(yōu)先級(jí)的任務(wù)。當(dāng)應(yīng)用程序的前臺(tái)線程大概要變成空閑狀態(tài)時(shí),系統(tǒng)就會(huì)調(diào)用WH_FOREGROUNDIDLE Hook子程。
            5、WH_GETMESSAGE Hook
            應(yīng)用程序使用WH_GETMESSAGE Hook來監(jiān)視從GetMessage or PeekMessage函數(shù)返回的消息。你可以使用WH_GETMESSAGE Hook去監(jiān)視鼠標(biāo)和鍵盤輸入,以及其他發(fā)送到消息隊(duì)列中的消息。
            6、WH_JOURNALPLAYBACK Hook
            WH_JOURNALPLAYBACK Hook使應(yīng)用程序可以插入消息到系統(tǒng)消息隊(duì)列。可以使用這個(gè)Hook回放通過使用WH_JOURNALRECORD Hook記錄下來的連續(xù)的鼠標(biāo)和鍵盤事件。只要WH_JOURNALPLAYBACK Hook已經(jīng)安裝,正常的鼠標(biāo)和鍵盤事件就是無效的。
            WH_JOURNALPLAYBACK Hook是全局Hook,它不能象線程特定Hook一樣使用。
            WH_JOURNALPLAYBACK Hook返回超時(shí)值,這個(gè)值告訴系統(tǒng)在處理來自回放Hook當(dāng)前消息之前需要等待多長時(shí)間(毫秒)。這就使Hook可以控制實(shí)時(shí)事件的回放。
            WH_JOURNALPLAYBACK是system-wide local hooks,它??不??射到任何行程位址空駣??
            7、WH_JOURNALRECORD Hook
            WH_JOURNALRECORD Hook用來監(jiān)視和記錄輸入事件。典型的,可以使用這個(gè)Hook記錄連續(xù)的鼠標(biāo)和鍵盤事件,然后通過使用WH_JOURNALPLAYBACK Hook來回放。
            WH_JOURNALRECORD Hook是全局Hook,它不能象線程特定Hook一樣使用。
            WH_JOURNALRECORD是system-wide local hooks,它??不??射到任何行程位址空駣??
            8、WH_KEYBOARD Hook
            在應(yīng)用程序中,WH_KEYBOARD Hook用來監(jiān)視WM_KEYDOWN and WM_KEYUP消息,這些消息通過GetMessage or PeekMessage function返回。可以使用這個(gè)Hook來監(jiān)視輸入到消息隊(duì)列中的鍵盤消息。
            9、WH_KEYBOARD_LL Hook
            WH_KEYBOARD_LL Hook監(jiān)視輸入到線程消息隊(duì)列中的鍵盤消息。
            10、WH_MOUSE Hook
            WH_MOUSE Hook監(jiān)視從GetMessage 或者 PeekMessage 函數(shù)返回的鼠標(biāo)消息。使用這個(gè)Hook監(jiān)視輸入到消息隊(duì)列中的鼠標(biāo)消息。
            11、WH_MOUSE_LL Hook
            WH_MOUSE_LL Hook監(jiān)視輸入到線程消息隊(duì)列中的鼠標(biāo)消息。
            12、WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks
            WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我們可以監(jiān)視菜單,滾動(dòng)條,消息框,對話框消息并且發(fā)現(xiàn)用戶使用ALT+TAB or ALT+ESC 組合鍵切換窗口。WH_MSGFILTER Hook只能監(jiān)視傳遞到菜單,滾動(dòng)條,消息框的消息,以及傳遞到通過安裝了Hook子程的應(yīng)用程序建立的對話框的消息。WH_SYSMSGFILTER Hook監(jiān)視所有應(yīng)用程序消息。
            WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我們可以在模式循環(huán)期間過濾消息,這等價(jià)于在主消息循環(huán)中過濾消息。
            通過調(diào)用CallMsgFilter function可以直接的調(diào)用WH_MSGFILTER Hook。通過使用這個(gè)函數(shù),應(yīng)用程序能夠在模式循環(huán)期間使用相同的代碼去過濾消息,如同在主消息循環(huán)里一樣。
            13、WH_SHELL Hook
            外殼應(yīng)用程序可以使用WH_SHELL Hook去接收重要的通知。當(dāng)外殼應(yīng)用程序是激活的并且當(dāng)頂層窗口建立或者銷毀時(shí),系統(tǒng)調(diào)用WH_SHELL Hook子程。
            WH_SHELL 共有5鐘情?r:
            1. 只要有個(gè)top-level、unowned 窗口被產(chǎn)生、起作用、或是被摧毀;
            2. 當(dāng)Taskbar需要重畫某個(gè)按鈕;
            3. 當(dāng)系統(tǒng)需要顯示關(guān)于Taskbar的一個(gè)程序的最小化形式;
            4. 當(dāng)目前的鍵盤布局狀態(tài)改變;
            5. 當(dāng)使用者按Ctrl+Esc去執(zhí)行Task Manager(或相同級(jí)別的程序)。
                   按照慣例,外殼應(yīng)用程序都不接收WH_SHELL消息。所以,在應(yīng)用程序能夠接收WH_SHELL消息之前,應(yīng)用程序必須調(diào)用SystemParametersInfo function注冊它自己。

            posted on 2009-11-28 16:01 閱讀(1435) 評(píng)論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国产91久久综合| 亚洲国产精品狼友中文久久久| 国产精品无码久久久久久| 亚洲精品WWW久久久久久| 久久亚洲精品国产亚洲老地址 | 亚洲欧洲日产国码无码久久99| 久久久久人妻精品一区二区三区 | 久久99精品久久久久久齐齐| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 性欧美大战久久久久久久久 | 久久影院午夜理论片无码 | 日本免费一区二区久久人人澡| 久久这里只精品99re66| 亚洲国产成人久久综合碰碰动漫3d| 2021国内精品久久久久久影院| 精品精品国产自在久久高清| 久久久久久曰本AV免费免费| 久久免费高清视频| 久久久亚洲欧洲日产国码是AV| 精品99久久aaa一级毛片| 久久精品一本到99热免费| 国产精品欧美久久久久天天影视| 久久无码人妻一区二区三区午夜 | 无码国内精品久久综合88| 国产精品亚洲综合专区片高清久久久| 久久综合九色综合网站| 久久亚洲2019中文字幕| 93精91精品国产综合久久香蕉| 久久w5ww成w人免费| 久久精品中文字幕一区| 人妻丰满?V无码久久不卡| 国产成人综合久久精品尤物| 国内精品久久久久影院一蜜桃 | 国产亚洲精品美女久久久| 无码国内精品久久人妻| 99久久99久久精品国产片果冻| 亚洲人AV永久一区二区三区久久| 久久e热在这里只有国产中文精品99| 久久se精品一区精品二区| 狠狠色丁香久久综合婷婷| 欧美一区二区精品久久|