• <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 小默 閱讀(306) 評論(0)  編輯 收藏 引用 所屬分類: Security

            導航

            統計

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久国产三级无码一区二区| 久久久国产亚洲精品| 国产精品久久久久久福利漫画| 久久综合给合久久狠狠狠97色69| 精品久久久久久久久午夜福利| 91亚洲国产成人久久精品网址| 一本综合久久国产二区| 久久精品国产亚洲精品2020| 亚洲国产成人久久精品动漫| 亚洲性久久久影院| 国内精品伊人久久久久| 伊人久久国产免费观看视频| 国内精品伊人久久久久| 久久久国产精华液| 伊人久久免费视频| 三上悠亚久久精品| 亚洲国产成人久久精品99| 国产精品久久永久免费| 久久精品国产色蜜蜜麻豆| 国产 亚洲 欧美 另类 久久| 精品久久久久久无码中文字幕一区| 日韩精品无码久久一区二区三| 久久精品成人免费看| 色诱久久久久综合网ywww| 亚洲国产成人久久一区WWW| 国内精品久久久久久久涩爱| 久久综合狠狠综合久久综合88| 久久精品国产2020| 女人高潮久久久叫人喷水| 一本色道久久88加勒比—综合| 久久99精品久久久久婷婷| 色欲av伊人久久大香线蕉影院 | 久久精品?ⅴ无码中文字幕| 久久福利青草精品资源站| 性欧美丰满熟妇XXXX性久久久| 午夜精品久久久久久影视riav| 久久精品国产欧美日韩| 午夜精品久久久久9999高清| 久久99精品国产麻豆不卡| 国产精品日韩欧美久久综合| 国产午夜久久影院|