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

            Codejie's C++ Space

            Using C++

            練習(xí):Hooks Hook


            ?? ?折騰一天半,終于寫出來了一個Hook實例,代碼如下:
            ?? ?Hook.h
            ?1#ifndef?__HOOK_H__
            ?2#define?__HOOK_H__
            ?3
            ?4#include?<windows.h>
            ?5
            ?6#define?DllExport?__declspec(dllexport)
            ?7
            ?8#ifdef?__cplusplus
            ?9extern?"C"?
            10{
            11#endif
            12
            13DllExport?BOOL?SetHook(HWND?hwnd,?LPCTSTR?classname,?LPCTSTR?wintitle,?UINT*?msgid);
            14DllExport?BOOL?ClearHook();
            15
            16#ifdef?__cplusplus
            17}

            18#endif
            19
            20#endif
            21

            ??? Hook.cpp
            ?1#include?<TChar.h>
            ?2
            ?3#include?"Hook.h"
            ?4
            ?5#pragma?data_seg(".JIE")
            ?6HINSTANCE?_hinst?=?NULL;
            ?7HWND?_hwnd?=?NULL;
            ?8HHOOK?_hhook?=?NULL;
            ?9UINT?_nMsg?=?0;
            10#pragma?data_seg()
            11#pragma?comment(linker,?"/section:.JIE,rws")
            12
            13LPCTSTR?HOOK_NOTIFY_MSG_DEF?=?_T("MY_HOOK_NOTIFY_MSG_DEF");
            14
            15BOOL?WINAPI?DllMain(HINSTANCE?hinst,?DWORD?reason,?LPVOID?reserved)
            16{
            17????switch(reason)
            18????{
            19????case?DLL_PROCESS_ATTACH:
            20????????_hinst?=?hinst;
            21????????break;
            22????case?DLL_PROCESS_DETACH:
            23????????ClearHook();
            24????????break;
            25????default:;
            26????}

            27????return?TRUE;
            28}

            29
            30LRESULT?CALLBACK?HookProc(UINT?code,?WPARAM?wparam,?LPARAM?lparam)
            31{
            32????if(code?>=?0)
            33????????SendMessage(_hwnd,?_nMsg,?wparam,?lparam);
            34????return?CallNextHookEx(_hhook,?code,?wparam,?lparam);
            35}

            36
            37BOOL?SetHook(HWND?hwnd,?LPCTSTR?classname,?LPCTSTR?wintitle,?UINT*?msgid)
            38{
            39????if(_hwnd?!=?NULL)
            40????????return?FALSE;
            41
            42????_nMsg?=?RegisterWindowMessage(HOOK_NOTIFY_MSG_DEF);
            43????if(_nMsg?==?0)
            44????????return?FALSE;
            45????*msgid?=?_nMsg;
            46
            47????HWND?h?=?FindWindow(classname,?wintitle);
            48????if(h?==?NULL)
            49????????return?FALSE;
            50
            51????DWORD?tid?=?0;
            52????tid?=?GetWindowThreadProcessId(h,?&tid);
            53????if(tid?==?0)
            54????????return?FALSE;
            55
            56????_hhook?=?SetWindowsHookEx(WH_KEYBOARD,?(HOOKPROC)HookProc,?_hinst,?tid);
            57????if(_hhook?==?NULL)
            58????????return?FALSE;
            59
            60????_hwnd?=?hwnd;
            61
            62????return?TRUE;
            63}

            64
            65BOOL?ClearHook()
            66{
            67????if(_hwnd?==?NULL)
            68????????return?FALSE;
            69????
            70????BOOL?uh?=?UnhookWindowsHookEx(_hhook);
            71????if(uh?==?FALSE)
            72????????return?FALSE;
            73
            74????_hwnd?=?NULL;
            75????
            76????return?TRUE;
            77}

            ??? Hook.def
            1LIBRARY?HookDll
            2EXPORTS
            3????SetHook?=?SetHook
            4????ClearHook?=?ClearHook

            ??? 這部分代碼是折騰最久,從我的理解看,應(yīng)該使范圍內(nèi)定義的變量實現(xiàn)進(jìn)程間共享,這樣Hoook和調(diào)用Hook的進(jìn)程才能使用相同的變量值進(jìn)行通信。用Dumpbin查看,這部分果然是獨立的一個段了。
            1#pragma?data_seg(".JIE")
            2HINSTANCE?_hinst?=?NULL;
            3HWND?_hwnd?=?NULL;
            4HHOOK?_hhook?=?NULL;
            5UINT?_nMsg?=?0;
            6#pragma?data_seg()
            7#pragma?comment(linker,?"/section:.JIE,rws")

            ??? 這里部分測試代碼:
            ?1void?MyFrame::OnButton1(wxCommandEvent?&event)
            ?2{
            ?3????hdll?=?LoadLibrary(_T("../HookDll/Debug/HookDll.dll"));
            ?4????SetHookPtr?sh?=?(SetHookPtr)GetProcAddress(hdll,?"SetHook");
            ?5????if(sh((HWND)this->GetHandle(),?_T("Notepad"),?NULL,?&HOOK_NOTIFY_MSG)?!=?TRUE)
            ?6????{
            ?7????????wxMessageBox(_("SetHook?Error"));
            ?8????}

            ?9}

            10
            11void?MyFrame::OnButton2(wxCommandEvent?&event)
            12{
            13????ClearHookPtr?ch?=?(ClearHookPtr)GetProcAddress(hdll,?"ClearHook");
            14????if(ch()?!=?TRUE)
            15????{
            16????????wxMessageBox(_("UnHook?Error"));
            17????}

            18
            19????FreeLibrary(hdll);
            20}

            21
            22WXLRESULT?MyFrame::MSWWindowProc(WXUINT?message,?WXWPARAM?wParam,?WXLPARAM?lParam)
            23{
            24????if(message?==?HOOK_NOTIFY_MSG)
            25????????wxLogDebug(_("msg:%d,?wparam:%d,?lparam:%d"),?message,?wParam,?lParam);
            26????return?wxFrame::MSWWindowProc(message,?wParam,?lParam);
            27}

            ?? 寫代碼和打拳類似,要做到拳不離手,不然真是--三天不打,手生啊。。。

            posted on 2009-09-29 11:19 codejie 閱讀(369) 評論(0)  編輯 收藏 引用 所屬分類: C++

            公告

            Using C++

            導(dǎo)航

            統(tǒng)計

            留言簿(73)

            隨筆分類(513)

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            2020最新久久久视精品爱| 亚洲国产另类久久久精品黑人| 国产精品久久网| 99久久精品九九亚洲精品| 中文成人久久久久影院免费观看| 久久精品国产欧美日韩99热| 奇米综合四色77777久久| 91精品国产91热久久久久福利 | 欧美一区二区久久精品| 伊人久久大香线蕉亚洲| 久久国产精品二国产精品| 久久久久青草线蕉综合超碰| 久久99精品久久久久久| 久久夜色精品国产亚洲| 国产精品亚洲美女久久久| 99久久精品免费看国产一区二区三区 | 99久久99久久精品国产片果冻| 91精品国产9l久久久久| 亚州日韩精品专区久久久| 99精品伊人久久久大香线蕉| 久久久久无码精品国产| 亚洲人成网亚洲欧洲无码久久| 99久久精品免费观看国产| 久久亚洲日韩精品一区二区三区| 色综合久久夜色精品国产| 狠狠精品干练久久久无码中文字幕| 色综合久久无码中文字幕| 欧美精品国产综合久久| 久久久久久午夜精品| 久久精品综合一区二区三区| 狠狠狠色丁香婷婷综合久久俺| 久久人人爽人人爽人人片av高请| 久久亚洲国产精品成人AV秋霞| 色婷婷久久久SWAG精品| 久久亚洲精品国产精品婷婷| 天堂无码久久综合东京热| 久久影院久久香蕉国产线看观看| 久久精品国产99久久香蕉| 久久久久久青草大香综合精品| 久久本道久久综合伊人| 久久久久国产亚洲AV麻豆|