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

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

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

                        WH_DEBUG                    :安裝一個鉤子,鉤住安裝鉤子的程序(差錯"鉤子"),更多信息如下:
                                LRESULT CALLBACK DebugProc(          
                                    int nCode,                        //描述鉤子程序是否一定要處理這個消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個消息,如果 nCode 的值小于零,則一定要跳過這個消息
                                    WPARAM wParam,                    //描述什么樣的鉤子被裝載了,參數值與 SetWindowsHookEx 函數的 idHook 參數值相同
                                    LPARAM lParam                    //一個指向  DEBUGHOOKINFO 結構體的指什,具體信息如下:
                                );
                                        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            :安裝一個鉤子,當一個程序的前端線程改變為低優先級時調用鉤子程序,這個鉤子在一個任務被降低優先級前工作(前臺空閑窗口"鉤子"),更多信息如下:
                                DWORD CALLBACK ForegroundIdleProc(
                                    int code,                        //描述鉤子程序是否一定要處理這個消息 如果 nCode == HC_ACTION,那么鉤子程序一定要處理這個消息,如果 nCode 的值小于零,則一定要跳過這個消息
                                    DWORD wParam,       //這個參數沒有用
                                    LONG lParam              //這個參數沒有用
                                );

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

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

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

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

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

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

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

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

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

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


            //////////////////////////////////////////////////////////////////////////////////
            鉤子類型
                     每一種類型的Hook可以使應用程序能夠監視不同類型的系統消息處理機制。下面描述所有可以利用的Hook類型。
            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,它??不??射到任何行程位址空駣??
            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 和 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鐘情?r:
            1. 只要有個top-level、unowned 窗口被產生、起作用、或是被摧毀;
            2. 當Taskbar需要重畫某個按鈕;
            3. 當系統需要顯示關于Taskbar的一個程序的最小化形式;
            4. 當目前的鍵盤布局狀態改變;
            5. 當使用者按Ctrl+Esc去執行Task Manager(或相同級別的程序)。
                   按照慣例,外殼應用程序都不接收WH_SHELL消息。所以,在應用程序能夠接收WH_SHELL消息之前,應用程序必須調用SystemParametersInfo function注冊它自己。

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

            導航

            統計

            常用鏈接

            留言簿

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产精品青草app| 久久久亚洲AV波多野结衣| 国内精品久久久久伊人av| 久久91精品国产91久久麻豆| 久久国产精品免费一区二区三区 | 日韩精品久久久久久久电影| 欧美伊人久久大香线蕉综合| 熟妇人妻久久中文字幕| 国产—久久香蕉国产线看观看| 久久久久久av无码免费看大片| 欧美精品国产综合久久| 久久r热这里有精品视频| 综合久久给合久久狠狠狠97色 | 无码8090精品久久一区| 人妻无码久久一区二区三区免费| 久久婷婷国产麻豆91天堂| 国内精品人妻无码久久久影院导航 | 婷婷久久综合九色综合98| AV无码久久久久不卡蜜桃| 久久精品国产精品亚洲下载| 久久精品亚洲日本波多野结衣| 色播久久人人爽人人爽人人片aV| 久久精品99久久香蕉国产色戒| 久久精品免费网站网| …久久精品99久久香蕉国产| 亚洲精品高清国产一线久久| 青青热久久国产久精品 | 久久国产成人精品麻豆| 亚洲综合熟女久久久30p| 亚洲国产小视频精品久久久三级| 青青青青久久精品国产h| 久久这里只有精品18| 无码人妻久久一区二区三区| 亚洲精品无码专区久久同性男| 久久精品成人一区二区三区| 久久精品一区二区| 国产日韩久久免费影院| 理论片午午伦夜理片久久 | 91精品日韩人妻无码久久不卡 | 久久最新免费视频| 亚洲伊人久久成综合人影院|