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

            閱讀排行榜

            久久综合综合久久狠狠狠97色88| 国产精品熟女福利久久AV | 午夜天堂av天堂久久久| 亚洲va久久久噜噜噜久久男同| 97精品伊人久久大香线蕉app| 国产L精品国产亚洲区久久 | 国产一区二区精品久久| 久久亚洲高清综合| 久久国产色AV免费观看| 亚洲精品高清一二区久久| 99久久精品日本一区二区免费| 久久黄视频| 麻豆精品久久精品色综合| 色88久久久久高潮综合影院 | 97久久精品人人做人人爽| 久久精品国产亚洲AV蜜臀色欲 | 久久综合丝袜日本网| 无码国内精品久久人妻| 国内精品久久久久影院老司| 国产999精品久久久久久| 精品久久久久久无码中文字幕一区 | 伊人久久大香线蕉综合Av| 手机看片久久高清国产日韩| 亚洲国产精品久久久久婷婷老年| 久久久久久国产精品无码超碰| 99久久这里只精品国产免费| 久久国产香蕉一区精品| 精品久久久无码中文字幕| 免费观看成人久久网免费观看| 国产亚洲婷婷香蕉久久精品| 国内精品久久久久久99蜜桃| 蜜臀久久99精品久久久久久小说| 久久精品日日躁夜夜躁欧美| 99久久精品免费看国产一区二区三区 | 2020久久精品国产免费| 2022年国产精品久久久久| 69久久精品无码一区二区| 97精品国产91久久久久久| 久久精品国产网红主播| 精品精品国产自在久久高清| 99久久国产综合精品成人影院 |