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

            導航

            統計

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            香港aa三级久久三级| 亚洲精品乱码久久久久久按摩| 国产精品九九九久久九九| 国产精品久久久久久久久免费| 国产成人精品久久亚洲| 国产成人精品综合久久久久| 国产精品久久久久久久| 午夜精品久久久久久影视riav| 久久精品成人国产午夜| 97精品依人久久久大香线蕉97| 国产L精品国产亚洲区久久| 久久久久亚洲精品天堂| 精品久久久久久无码不卡| 99热精品久久只有精品| 国产午夜福利精品久久2021| 欧美久久天天综合香蕉伊| 欧美亚洲国产精品久久蜜芽| 久久亚洲春色中文字幕久久久| 无码精品久久一区二区三区| 国产亚州精品女人久久久久久| 久久99精品国产自在现线小黄鸭 | 久久美女人爽女人爽| 中文字幕久久亚洲一区| 91亚洲国产成人久久精品| 人妻精品久久久久中文字幕69| 久久受www免费人成_看片中文| 久久国产免费直播| 国产精品激情综合久久| 品成人欧美大片久久国产欧美...| 国产精品免费福利久久| 亚洲va久久久噜噜噜久久男同| 国产免费久久精品99re丫y| 四虎国产精品成人免费久久| 亚洲欧美国产日韩综合久久| 性高湖久久久久久久久AAAAA| 午夜精品久久久久久| 亚洲色欲久久久久综合网| 97精品伊人久久大香线蕉| 囯产极品美女高潮无套久久久| 久久狠狠高潮亚洲精品| 久久精品国产一区|