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

            小默

            [zz]HOOK

            鉤子函數(shù)

            鉤子函數(shù)可以截獲并處理其他應(yīng)用程序的消息。每當(dāng)特定的消息發(fā)出,在沒有到達(dá)目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時(shí)鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強(qiáng)制結(jié)束消息的傳遞。
            鉤子的種類很多,每種鉤子可以截獲并處理相應(yīng)的消息,如鍵盤鉤子可以截獲鍵盤消息,外殼鉤子可以截取、啟動(dòng)和關(guān)閉應(yīng)用程序的消息等
            關(guān)于HOOK
            Hooks
            A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic in the system and process certain types of messages before they reach the target window procedure.

            安裝一個(gè)HOOK,SetWindowsHookEx
            對(duì)每種類型的鉤子由系統(tǒng)來(lái)維護(hù)一個(gè)鉤子鏈,最近安裝的鉤子放在鏈的開始,而最先安裝的鉤子放在最后,也就是后加入的先獲得控制權(quán)。
            The SetWindowsHookEx function installs an application-defined hook procedure into a hook chain. You would install a hook procedure to monitor the system for certain types of events. These events are associated either with a specific thread or with all threads in the same desktop as the calling thread.
            HHOOK SetWindowsHookEx(
            int idHook,        // hook type.請(qǐng)查看MSDN獲得詳細(xì)信息
            HOOKPROC lpfn,     // hook procedure
            HINSTANCE hMod,    // handle to application instance
            DWORD dwThreadId   // thread identifier
            );

            得到控制權(quán)的鉤子函數(shù)在完成對(duì)消息的處理后,如果想要該消息繼續(xù)傳遞,那么它必須調(diào)用另外一個(gè)SDK中的API函數(shù)CallNextHookEx來(lái)傳遞它。
            (對(duì)一個(gè)事件處理的hook可能有多個(gè),它們成鏈狀,使用CallNextHookEx一級(jí)一級(jí)地調(diào)用。簡(jiǎn)單解釋過(guò)來(lái)就是“調(diào)用下一個(gè)HOOK” )
            CallNextHookEx
            The CallNextHookEx function passes the hook information to the next hook procedure in the current hook chain. A hook procedure can call this function either before or after processing the hook information.
            LRESULT CallNextHookEx(
            HHOOK hhk,      // handle to current hook
            int nCode,      // hook code passed to hook procedure
            WPARAM wParam, // value passed to hook procedure
            LPARAM lParam   // value passed to hook procedure
            );

            hook處理函數(shù)
            LRESULT CALLBACK HookProc(
            int nCode,
            WPARAM wParam,
            LPARAM lParam
            );

            取消HOOK
            UnhookWindowsHookEx
            The UnhookWindowsHookEx function removes a hook procedure installed in a hook chain by the SetWindowsHookEx function.
            BOOL UnhookWindowsHookEx(
            HHOOK hhk   // handle to hook procedure
            );

             

            示例:
            [code]
            // 監(jiān)視鼠標(biāo)消息
            // hook處理函數(shù)聲明
            LRESULT CALLBACK MyMouseProc(int nCode, WPARAM wParam, LPARAM lParam);
            static BOOL StartWatchingMouse(); // 開始監(jiān)視
            static void StopWatchingMouse();    // 結(jié)束
            static HHOOK hHook = NULL;    //hook指針
            /*======================================================
            *Function:StartWatchingMouse()
            *Author:wuhuiran 05-7-23
            *Desc:開始監(jiān)視鼠標(biāo)
            *Record:
            --------------------------------------------------------
            ========================================================*/
            BOOL StartWatchingMouse()
            {
            hHook = SetWindowHookEx(WM_MOUSE, (HOOKPROC) MyMouseProc,
               (HINSTANCE) NULL, GetCurrentThreadId());
              
            if(!hHook)
            {
               return FALSE;
            }

            return TRUE;

            }

            /*======================================================
            *Function:StartWatchingMouse()
            *Author:wuhuiran 05-7-23
            *Desc:取消監(jiān)視鼠標(biāo)
            *Record:
            --------------------------------------------------------
            ========================================================*/
            void StopWatchingMouse()
            {
            if(hHook)
            {
               UnHookWindowHookEx(hHook);
               hHook = NULL;
            }
            }

            /*======================================================
            *Function:StartWatchingMouse()
            *Author:wuhuiran 05-7-23
            *Desc:HOOK處理函數(shù)
            *Record:
            --------------------------------------------------------
            ========================================================*/
            LRESULT CALLBACK MyMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
            {
            if(nCode < 0)
            {
               return CallNextHookEx(hHook, nCode, wParam, lParam);
              
            }

            MOUSEHOOKSTRUCT *pMouseHookStruct;   //鼠標(biāo)HOOK結(jié)構(gòu)體
            pMouseHookStruct = (MOUSEHOOKSTRUCT *)lParam;

            POINT pt = pMouseHookStruct->pt;
            //動(dòng)一下鼠標(biāo)就會(huì)顯示鼠標(biāo)位置
            CString strMsg;
            strMsg.Format("x:\t%d\ny:\t%d", pt.x, pt.y);
            AfxMessageBox(strMsg);

            return CallNextHookEx(myHook, nCode, wParam, lParam);
            }
            [/code]

            注意:
            hook會(huì)使系統(tǒng)變慢,除非必要,不要頻繁使用。在不使用的時(shí)候盡快刪除
            全局鉤子必須放在DLL中

            只是簡(jiǎn)單介紹了一下鉤子函數(shù)的使用方法,具體的函數(shù)介紹請(qǐng)參閱MSDN和其他文章。

            posted on 2009-10-22 21:15 小默 閱讀(313) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Security

            導(dǎo)航

            統(tǒng)計(jì)

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            久久久久久国产精品无码下载| 狠狠色丁香久久婷婷综合蜜芽五月| 久久久久久精品免费看SSS| 久久久久久久91精品免费观看| 亚洲日韩中文无码久久| 99久久精品国产免看国产一区| 色综合合久久天天综合绕视看| 久久久久国色AV免费观看| 久久大香萑太香蕉av| 国产成人无码精品久久久免费 | 久久人人超碰精品CAOPOREN| 中文精品久久久久人妻| 91精品国产综合久久香蕉| 久久国语露脸国产精品电影| 91久久精品视频| 久久狠狠色狠狠色综合| 人妻精品久久久久中文字幕69| 亚洲国产成人久久精品99| 成人午夜精品久久久久久久小说| 久久精品国产亚洲AV嫖农村妇女| 青青热久久国产久精品 | 欧美777精品久久久久网| 久久国产成人午夜AV影院| 亚洲性久久久影院| 无码超乳爆乳中文字幕久久| 亚洲乱码中文字幕久久孕妇黑人| 亚洲AV无码久久| 国产一区二区精品久久岳| 亚洲AV伊人久久青青草原| 久久精品国产亚洲AV影院| 久久精品国产亚洲AV大全| 久久精品国产只有精品66| 色欲综合久久躁天天躁蜜桃| 久久99热国产这有精品| 久久只这里是精品66| 精品久久久久久综合日本| 怡红院日本一道日本久久 | 久久久久99精品成人片三人毛片| 欧美麻豆久久久久久中文| 午夜天堂av天堂久久久| 伊人久久综合热线大杳蕉下载|