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

            鉤子函數

            鉤子函數可以截獲并處理其他應用程序的消息。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。
            鉤子的種類很多,每種鉤子可以截獲并處理相應的消息,如鍵盤鉤子可以截獲鍵盤消息,外殼鉤子可以截取、啟動和關閉應用程序的消息等
            關于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.

            安裝一個HOOK,SetWindowsHookEx
            對每種類型的鉤子由系統來維護一個鉤子鏈,最近安裝的鉤子放在鏈的開始,而最先安裝的鉤子放在最后,也就是后加入的先獲得控制權
            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.請查看MSDN獲得詳細信息
            HOOKPROC lpfn,     // hook procedure
            HINSTANCE hMod,    // handle to application instance
            DWORD dwThreadId   // thread identifier
            );

            得到控制權的鉤子函數在完成對消息的處理后,如果想要該消息繼續傳遞,那么它必須調用另外一個SDK中的API函數CallNextHookEx來傳遞它。
            (對一個事件處理的hook可能有多個,它們成鏈狀,使用CallNextHookEx一級一級地調用。簡單解釋過來就是“調用下一個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處理函數
            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]
            // 監視鼠標消息
            // hook處理函數聲明
            LRESULT CALLBACK MyMouseProc(int nCode, WPARAM wParam, LPARAM lParam);
            static BOOL StartWatchingMouse(); // 開始監視
            static void StopWatchingMouse();    // 結束
            static HHOOK hHook = NULL;    //hook指針
            /*======================================================
            *Function:StartWatchingMouse()
            *Author:wuhuiran 05-7-23
            *Desc:開始監視鼠標
            *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:取消監視鼠標
            *Record:
            --------------------------------------------------------
            ========================================================*/
            void StopWatchingMouse()
            {
            if(hHook)
            {
               UnHookWindowHookEx(hHook);
               hHook = NULL;
            }
            }

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

            MOUSEHOOKSTRUCT *pMouseHookStruct;   //鼠標HOOK結構體
            pMouseHookStruct = (MOUSEHOOKSTRUCT *)lParam;

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

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

            注意:
            hook會使系統變慢,除非必要,不要頻繁使用。在不使用的時候盡快刪除
            全局鉤子必須放在DLL中

            只是簡單介紹了一下鉤子函數的使用方法,具體的函數介紹請參閱MSDN和其他文章。

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

            導航

            統計

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            中文字幕亚洲综合久久2| 日韩精品久久无码中文字幕| AA级片免费看视频久久| 久久黄视频| 99精品国产在热久久| 久久性生大片免费观看性| 一本色道久久综合亚洲精品| 久久精品亚洲一区二区三区浴池| 99久久国产综合精品网成人影院| 久久99热这里只有精品国产| 青青青伊人色综合久久| 亚洲精品tv久久久久久久久| 国产亚洲精久久久久久无码AV| 777午夜精品久久av蜜臀| 久久久综合香蕉尹人综合网| 久久人人爽人人爽人人AV| 亚洲精品视频久久久| 久久国产精品-久久精品| 欧洲成人午夜精品无码区久久| 久久久久99精品成人片牛牛影视| 99久久精品国产麻豆| 久久夜色精品国产网站| 色妞色综合久久夜夜| 欧洲国产伦久久久久久久| 国产精品一区二区久久精品无码| A狠狠久久蜜臀婷色中文网| 亚洲欧美日韩久久精品第一区| 开心久久婷婷综合中文字幕| 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品国产欧美日韩99热| 久久久久亚洲精品无码网址 | 亚洲美日韩Av中文字幕无码久久久妻妇| 久久精品国产久精国产思思| 久久香综合精品久久伊人| 亚洲欧美成人综合久久久| 狠狠色噜噜色狠狠狠综合久久| 伊人久久大香线蕉AV一区二区| 人妻中文久久久久| 久久99精品久久久大学生| 97精品国产97久久久久久免费| 欧美黑人又粗又大久久久|