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

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            99精品国产在热久久| 久久久久亚洲AV无码观看| 99久久无色码中文字幕人妻| 性色欲网站人妻丰满中文久久不卡| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 狠狠色婷婷久久综合频道日韩| 区久久AAA片69亚洲| 午夜欧美精品久久久久久久| 国内精品久久久久影院一蜜桃| 国产精品久久久久久影院| 国内精品久久久久久久久| 久久久久久综合网天天| 青青青伊人色综合久久| 久久AV无码精品人妻糸列| 99久久国语露脸精品国产| 久久国产精品二国产精品| 无码国内精品久久人妻| 久久精品这里只有精99品| 欧美牲交A欧牲交aⅴ久久| 久久精品人妻一区二区三区| 精品国产乱码久久久久久郑州公司| 久久电影网| 久久精品无码一区二区三区| 亚洲午夜久久久影院伊人| 久久精品国产精品亚洲下载| 国产成人久久AV免费| 精品国产乱码久久久久久呢| 久久福利片| 狠狠色丁香婷婷综合久久来来去| 久久人爽人人爽人人片AV| 伊人色综合久久天天网| 久久久久国产一区二区三区| 欧美综合天天夜夜久久| 国内精品伊人久久久久av一坑 | 久久亚洲高清观看| 久久99精品国产麻豆宅宅| 亚洲国产成人久久综合区| 久久久久黑人强伦姧人妻| 精品人妻伦九区久久AAA片69| 久久99精品综合国产首页| 国产精品久久毛片完整版|