• <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 小魚兒 閱讀(739) 評論(0)  編輯 收藏 引用
            <2013年4月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            常用鏈接

            留言簿(4)

            隨筆檔案(25)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            色综合久久久久无码专区| 久久se精品一区精品二区| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 国产午夜久久影院| 久久久WWW免费人成精品| 人妻系列无码专区久久五月天| 久久笫一福利免费导航 | 精品久久综合1区2区3区激情 | 香蕉久久夜色精品升级完成| 99久久精品国内| 久久精品视频一| 久久99国产精品99久久| 久久综合色老色| 99热成人精品免费久久| 无码人妻久久一区二区三区免费丨| 99精品久久久久久久婷婷| 久久人人爽人人爽人人片AV东京热 | 久久午夜羞羞影院免费观看| 久久精品国产第一区二区| 久久精品人人做人人妻人人玩| 久久久久噜噜噜亚洲熟女综合| 久久久久亚洲Av无码专| 无码8090精品久久一区| 亚洲一区中文字幕久久| 精品久久久久久久久午夜福利| 久久久免费观成人影院| www.久久99| 国产精品久久久久国产A级| 久久99热这里只有精品66| 久久精品国产国产精品四凭| 久久亚洲综合色一区二区三区| 日日噜噜夜夜狠狠久久丁香五月| 一级女性全黄久久生活片免费 | 国产成人精品久久免费动漫| 亚洲AV乱码久久精品蜜桃| 欧美大战日韩91综合一区婷婷久久青草 | 亚洲va中文字幕无码久久| 久久无码AV一区二区三区| 亚洲综合久久久| 久久午夜免费视频| 久久人与动人物a级毛片|