• <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精品成人片| 久久久精品久久久久久| 伊人久久综合无码成人网| 久久亚洲国产中v天仙www| 精品熟女少妇aⅴ免费久久| 伊人久久综合无码成人网| 国产精品久久久久…| 香蕉99久久国产综合精品宅男自 | 九九久久自然熟的香蕉图片| 精品久久久噜噜噜久久久| 久久精品国产只有精品66 | 欧美精品九九99久久在观看| 精品久久久久香蕉网| 久久精品免费全国观看国产| 91精品国产91久久久久福利| 色综合久久88色综合天天 | 97精品久久天干天天天按摩| 精品久久久久久无码不卡| 久久久久国产精品| 久久国产精品无码一区二区三区| 久久丝袜精品中文字幕| 久久伊人精品青青草原高清| 久久免费的精品国产V∧| 武侠古典久久婷婷狼人伊人| segui久久国产精品| 国产精品视频久久久| 无码日韩人妻精品久久蜜桃| 一级做a爰片久久毛片免费陪 | 一本一道久久精品综合| 精品无码久久久久久午夜| 国产成人精品三上悠亚久久| 久久久久久亚洲精品影院| 亚洲国产成人乱码精品女人久久久不卡| 97超级碰碰碰碰久久久久| 久久精品人人做人人爽电影| 国产A三级久久精品| 色综合久久无码五十路人妻| 一本一本久久a久久综合精品蜜桃|