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

            練習: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

            ??? 這部分代碼是折騰最久,從我的理解看,應該使范圍內定義的變量實現進程間共享,這樣Hoook和調用Hook的進程才能使用相同的變量值進行通信。用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 閱讀(370) 評論(0)  編輯 收藏 引用 所屬分類: C++

            公告

            Using C++

            導航

            統計

            留言簿(73)

            隨筆分類(513)

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久综合鬼色88久久精品综合自在自线噜噜| 久久影院亚洲一区| 婷婷五月深深久久精品| 久久久久亚洲AV无码永不| 久久AV高清无码| 久久久综合香蕉尹人综合网| 伊人久久一区二区三区无码| 日韩精品久久久肉伦网站| 欧美精品一区二区精品久久| 青青久久精品国产免费看| 久久精品国产99久久久| 久久国产三级无码一区二区| 亚洲愉拍99热成人精品热久久| 久久AV高清无码| 久久99热这里只频精品6| 久久亚洲精品中文字幕三区| 午夜精品久久久久久| 香港aa三级久久三级| 亚洲精品无码久久久久sm| 办公室久久精品| 97久久精品国产精品青草| 97香蕉久久夜色精品国产 | 乱亲女H秽乱长久久久| 国产成人精品久久一区二区三区av| 亚洲国产一成人久久精品| 伊人久久大香线蕉无码麻豆| 成人a毛片久久免费播放| 大伊人青草狠狠久久| 久久中文骚妇内射| 少妇人妻88久久中文字幕| 久久无码AV一区二区三区| 欧美性猛交xxxx免费看久久久| 久久精品成人免费网站| 久久er国产精品免费观看2| 精品蜜臀久久久久99网站| 久久婷婷五月综合国产尤物app| 青青青青久久精品国产h久久精品五福影院1421 | 久久影院综合精品| 久久久久久久久久久久中文字幕| 波多野结衣久久一区二区| 久久久久久伊人高潮影院|