• <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>
            posts - 25,  comments - 36,  trackbacks - 0
            這幾天學習了一下鉤子的知識。
            看的是孫鑫的視頻,孫鑫的視頻真的是經典。
            但個人不認為他不是MFC的原理講解的好視頻。不過貌似現在也沒有講MFC原理很好的書。
            主要是MFC 復雜性吧。
            不過簡單把整體思想學習一下 臺灣的侯捷 確實強悍的一本書(主要是第三章模擬MFC 原理)
            .
            這個程序貌似貌似百度文庫有類似的程序,但試了一下貌似不可以。
            如是我重寫了一下程序。
            簡單寫了一下。
            實現正確獲取對記事本的消息。--》如果你是不懂鉤子請看孫鑫的視頻。這篇文章不適合你。
            這里程序是DLL 里的代碼
            CMyNodeHook2.h
            #ifndef CMYNODEHOOK2
            #define CMYNODEHOOK2 _declspec(dllimport)
            #endif

            //這里我們用類
            class CMYNODEHOOK2 CMyNodeHook
            {
            public:
            void SetHook();
            void UnHook();
            ~CMyNodeHook();
            };
            CMyNodeHook2.cpp
            #define CMYNODEHOOK2 _declspec(dllexport)
            #include "CMyNodeHook2.h"
            //#include <windows.h>
            #include <stdio.h>
            #include <AFXWIN.H> //這里我添加了MFC DLL 的 你可以不是用CString 和 AFxMessageBox();改用原始 API
            #include <AFX.H> //即可
            //#include <afxwin.h>
            HHOOK g_hOOk = NULL;
            BOOL isStart = NULL;
            HINSTANCE g_hInst = FALSE; //全局函數
            int flag =1;

            LRESULT CALLBACK GetMsgProc(
            int nCode, // hook code
            WPARAM wParam, // removal option
            LPARAM lParam // message
            )
            {
            //函數名字可以改 但必須是這種格式化
            //我們看msdn 知道lparam是一個指針 指向CWPSTRUCT結構的指針
            //所以我們可以
            MSG *lpMsg;
            lpMsg = (MSG *)lParam;
            TCHAR szClass[256];
            memset(szClass,0,256);
            GetClassName(lpMsg->hwnd,szClass,255);

            if(0 == strcmp(szClass,"Edit")) //先判斷是否是否為CEidt窗口類
            {
            //MessageBox(0,szClass,0,0);

            HWND hWnd = GetParent(lpMsg->hwnd);

            GetClassName(hWnd,szClass,256);
            if(0==strcmp(szClass,"Notepad")) //再來判斷是否為Notepad窗口類
            {//這樣大概就可以判斷為記事本了
            if(lpMsg->message == WM_CHAR ) //判斷是否按下鍵
            {
            CString s;
            s.Format("你按的鍵是 %c",lpMsg->wParam);//這里你只是對一個按鍵消息,要對組合鍵 就要對lparam進行操作
            //具體可以參考MSDN
            AfxMessageBox(s);
            return 1; //貌似GetMsgProc不能過濾掉消息,可能是自己才學 沒有學到吧。。測試了一下沒有成功
            }
            else
            return CallNextHookEx(g_hOOk,nCode,wParam,lParam);
            }
            else
            return CallNextHookEx(g_hOOk,nCode,wParam,lParam);
            }
            else
            return CallNextHookEx(g_hOOk,nCode,wParam,lParam);

            }
            void CMyNodeHook::SetHook()
            {
            g_hInst = GetModuleHandle("CMyNodeHook2");
            g_hOOk = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,g_hInst,0);//使用這種方法獲取 模塊句柄
            if(NULL == g_hOOk)
            {
            MessageBox(0,"創建鉤子失敗",0,0);
            exit(1);
            }
            isStart = TRUE;
            }
            void CMyNodeHook::UnHook()
            {
            if(isStart)
            {
            UnhookWindowsHookEx(g_hOOk);
            isStart = FALSE;
            MessageBox(0,"成功釋放鉤子",0,0);
            }
            else
            {
            MessageBox(0,"帥哥你還沒有放鉤子",0,0);
            }
            }
            CMyNodeHook::~CMyNodeHook()
            {
            UnHook();
            }
            posted on 2012-04-23 23:52 小魚兒 閱讀(736) 評論(0)  編輯 收藏 引用
            <2012年4月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(4)

            隨筆檔案(25)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久久九九99精品| 国产成人精品综合久久久| 久久国产高潮流白浆免费观看| 成人久久免费网站| 久久精品人成免费| 亚洲成av人片不卡无码久久| 久久精品国产日本波多野结衣| AV色综合久久天堂AV色综合在| 99久久亚洲综合精品网站| 无遮挡粉嫩小泬久久久久久久| 久久精品www人人爽人人| 久久精品亚洲乱码伦伦中文| 婷婷五月深深久久精品| 91亚洲国产成人久久精品| 国内精品伊人久久久影院| 久久青青草原综合伊人| 久久久久高潮综合影院| 久久99精品久久久久久不卡| 久久久久久九九99精品| 久久亚洲国产成人影院| 精品国产热久久久福利| 狠狠色丁香久久婷婷综合五月 | 久久综合久久综合久久| 久久精品国产99国产精品导航 | 亚洲国产成人精品91久久久 | 99久久精品国产一区二区| 99久久精品久久久久久清纯| 久久久久亚洲AV无码专区体验| 久久国产免费直播| 久久精品国产亚洲网站| 精品午夜久久福利大片| 久久精品国产亚洲AV无码麻豆| 国产69精品久久久久9999APGF| 久久精品国产男包| 亚洲欧美国产精品专区久久 | 1000部精品久久久久久久久| 欧美精品国产综合久久| 思思久久99热只有频精品66| 一本一道久久a久久精品综合 | 麻豆精品久久久一区二区| 国产精品久久久久久影院|