<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      EVC編程點(diǎn)滴四 - 鉤子

      wince下支持三種鉤子:

      1.#define WH_JOURNALRECORD 0使應(yīng)用程序可以監(jiān)視輸入事件。典型地,應(yīng)用程序使用該HOOK記錄鼠標(biāo)、鍵盤輸入事件以供以后回放。該HOOK是全局HOOK,并且不能在指定線程中使用。

      2#define WH_JOURNALPLAYBACK 1使應(yīng)用程序可以向系統(tǒng)消息隊(duì)列中插入消息。該HOOK可以回放以前由WH_JOURNALRECORD HOOK錄制的鼠標(biāo)、鍵盤輸入事件。在WH_JOURNALPLAYBACK Hook安裝到系統(tǒng)時(shí),鼠標(biāo)、鍵盤輸入事件將被屏蔽。該HOOK同樣是一個(gè)全局HOOK,不能在指定線程中使用。

      WH_JOURNALPLAYBACK Hook返回一個(gè)時(shí)間暫停值,它告訴系統(tǒng),在處理當(dāng)前回放的消息時(shí),系統(tǒng)等待百分之幾秒。這使得此HOOK可以控制在回放時(shí)的時(shí)間事件

      3#define WH_KEYBOARD_LL 20  

       

      其中最常用的是鍵盤鉤子,其它兩個(gè)偶沒(méi)有用過(guò)。

      1.  設(shè)置鉤子 通過(guò)SetWindowsHookEx ()函數(shù)

      2.  釋放鉤子 UnhookWindowsHookEx()函數(shù)

      3.  鉤子進(jìn)程 函數(shù)HookProc

      4.  調(diào)用下一個(gè)鉤子函數(shù) CallNexHookEx()函數(shù)

       

      鉤子的建立

      1.  建立一個(gè)動(dòng)態(tài)連接庫(kù)的.cpp文件。

       

        1 // KeyBoardHook.cpp : Defines the entry point for the DLL application.
        2 //
        3  
        4 #include "stdafx.h"
        5 #include "KeyBoardHook.h"
        6 #include <Pwinuser.h>
        7 #include "BasalMessage.h"
        8 //#include "FileManage.h"
        9  
       10 //告訴編譯器將變量放入它自己的數(shù)據(jù)共享節(jié)中
       11 #pragma data_seg("KeyHookData")
       12 HINSTANCE hInst = NULL;
       13 #pragma data_seg()
       14  
       15 //告訴編譯器設(shè)置共享節(jié)的訪問(wèn)方式為:讀,寫,共享
       16 #pragma comment(linker, "/SECTION:KeyHookData,RWS") 
       17  
       18 BOOL APIENTRY DllMain( HANDLE hModule,
       19                        DWORD  ul_reason_for_call,
       20                        LPVOID lpReserved
       21                               )
       22 {
       23     switch (ul_reason_for_call)
       24 {
       25         case DLL_PROCESS_ATTACH:
       26                hInst = (HINSTANCE)hModule;
       27                break;
       28         case DLL_THREAD_ATTACH:
       29         case DLL_THREAD_DETACH:
       30         case DLL_PROCESS_DETACH:
       31                break;
       32     }
       33     return TRUE;
       34 }
       35  
       36  
       37 // This is an example of an exported variable
       38 KEYBOARDHOOK_API int nKeyBoardHook=0;
       39  
       40 // This is an example of an exported function.
       41 KEYBOARDHOOK_API int fnKeyBoardHook(void)
       42 {
       43 return 42;
       44 }
       45  
       46 // This is the constructor of a class that has been exported.
       47 // see KeyBoardHook.h for the class definition
       48 CKeyBoardHook::CKeyBoardHook()
       49 {
       50 return;
       51 }
       52   
       53 extern "C" KEYBOARDHOOK_API void InstallHook(void)
       54 {
       55 if (hInst)
       56 {
       57         hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardProc, hInst, 0);
       58 }
       59 }
       60  
       61 extern "C" KEYBOARDHOOK_API void UnHook(void)
       62 {
       63 if (hKeyHook)
       64 {
       65         UnhookWindowsHookEx(hKeyHook);
       66         hKeyHook = NULL;
       67 }
       68  
       69 hInst = NULL;
       70 }
       71  
       72 extern "C" KEYBOARDHOOK_API LRESULT CALLBACK KeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam)
       73 {
       74 TCHAR t_WndClassName[50] = { 0 };
       75 HWND hCurActiveWnd = NULL;
       76 HWND hCurForegroundWnd = NULL;
       77 BOOL bIsTaskBarMsg = FALSE;
       78 BOOL bIsOEMmsg = FALSE;
       79  
       80 PKBDLLHOOKSTRUCT pkbhs = (PKBDLLHOOKSTRUCT)lParam;
       81  
       82 if (WM_KEYDOWN == wParam)
       83 {
       84         uCount++;
       85         RETAILMSG(1, (TEXT("WM_KEYDOWN vk %d /r/n"),pkbhs->vkCode));
       86         //響應(yīng)按鍵聲,并限制需要向上Post的vkCode
       87         switch (pkbhs->vkCode)
       88         {
       89         case VK_UP:
       90                break;
       91         case VK_DOWN:
       92                break;
       93         case VK_LEFT:
       94                break;
       95         case VK_RIGHT:
       96                break;
       97         case VK_OEM_SELECT:
       98                bIsOEMmsg = TRUE;
       99                break;
      100         case VK_OEM_OK:
      101                bIsOEMmsg = TRUE;
      102                break;
      103         case VK_OEM_BACK:
      104                bIsOEMmsg = TRUE;
      105                break;
      106         case VK_OEM_DIAL:
      107                bIsOEMmsg = TRUE;
      108                break;
      109         case VK_NUMPAD1:
      110 case 0x31:
      111                break;
      112         case VK_NUMPAD2:
      113 case 0x32:
      114                break;
      115         case VK_NUMPAD3:
      116 case 0x33:
      117                break;
      118         case VK_NUMPAD4:
      119 case 0x34:
      120               break;
      121         case VK_NUMPAD5:
      122 case 0x35:
      123                break;
      124         case VK_NUMPAD6:
      125 case 0x36:
      126                break;
      127         case VK_NUMPAD7:
      128 case 0x37:
      129                break;
      130         case VK_NUMPAD8:
      131 case 0x38:
      132                break;
      133         case VK_NUMPAD9:
      134 case 0x39:
      135                break;
      136         case VK_NUMPAD0:
      137 case 0x30:
      138                break;
      139         case VK_OEM_ASTERISK:
      140                bIsOEMmsg = TRUE;
      141                break;
      142         case VK_OEM_POUND:
      143                bIsOEMmsg = TRUE;
      144                break;
      145         case VK_OEM_SIDEUP:
      146                bIsOEMmsg = TRUE;
      147                break;
      148         case VK_OEM_SIDEDOWN:
      149                bIsOEMmsg = TRUE;
      150                break;
      151         case VK_OEM_CAMERA:
      152                bIsOEMmsg = TRUE;
      153                break;
      154         default:
      155                uCount = 0;
      156                return CallNextHookEx(hKeyHook, nCode, wParam, lParam);    //繼續(xù)傳遞消息
      157         }
      158  
      159         if (bNeedPassOnceMsg)
      160         {
      161                return TRUE;
      162         }
      163  
      164         //只發(fā)送OEM消息,其它消息并不攔截。
      165         //攔截原消息,發(fā)送自定義消息。
      166         //限制需要向上Post的vkCode
      167         switch (pkbhs->vkCode)
      168         {
      169                       return CallNextHookEx(hKeyHook, nCode, wParam, (LPARAM)pkbhs);   //轉(zhuǎn)換為回車消息傳遞(未測(cè)試)
      170 }
      171         case VK_OEM_OK:
      172         case VK_OEM_BACK:
      173         case VK_OEM_DIAL:
      174         case VK_OEM_DISCONNECT:
      175                bIsOEMmsg = TRUE;
      176                break;
      177         case VK_NUMPAD1:
      178         case VK_NUMPAD2:
      179         case VK_NUMPAD3:
      180         case VK_NUMPAD4:
      181         case VK_NUMPAD5:
      182        case VK_NUMPAD6:
      183         case VK_NUMPAD7:
      184         case VK_NUMPAD8:
      185         case VK_NUMPAD9:
      186         case VK_NUMPAD0:
      187 case 0x30:
      188 case 0x31:
      189 case 0x32:
      190 case 0x33:
      191 case 0x34:
      192 case 0x35:
      193 case 0x36:
      194 case 0x37:
      195 case 0x38:
      196 case 0x39:
      197                break;
      198         case VK_OEM_ASTERISK:
      199         case VK_OEM_POUND:
      200         case VK_OEM_SIDEUP:
      201         case VK_OEM_SIDEDOWN:
      202         case VK_OEM_CAMERA:
      203                bIsOEMmsg = TRUE;
      204                break;
      205         default:
      206                return CallNextHookEx(hKeyHook, nCode, wParam, lParam);    //繼續(xù)傳遞消息
      207         }
      208  
      209         //只發(fā)送OEM消息,其它消息并不攔截。
      210         if (bOnlySendOEMMsg)
      211         {
      212                if (bIsOEMmsg)
      213                {
      214                       PostMessage(hTopWnd, WM_USER_KEYUP, (WPARAM)(pkbhs->vkCode), (LPARAM)uCount);
      215                       return TRUE;  //攔截OEM消息,不再向上傳遞此消息。                    
      216                }
      217                else
      218                {
      219                       return CallNextHookEx(hKeyHook, nCode, wParam, lParam);    //繼續(xù)傳遞其它消息
      220                }
      221         }
      222  
      223         //攔截原消息,發(fā)送自定義消息。
      224         if (bHoldUpMsg)
      225         {//菜單未彈出的情況
      226                PostMessage(hTopWnd, WM_USER_KEYUP, (WPARAM)(pkbhs->vkCode), 0L);
      227                return TRUE;  //攔截消息,不再向上傳遞此消息。
      228         }
      229 }
      230 else
      231 {
      232         uCount = 0;
      233 }
      234  
      235 return CallNextHookEx(hKeyHook, nCode, wParam, lParam);    //繼續(xù)傳遞消息
      236 }
      237  
      238 extern "C" KEYBOARDHOOK_API void SetAppHWND(HWND hCurAppWnd)
      239 {
      240 hAppWnd = hCurAppWnd;
      241 }
      242  
      243 extern "C" KEYBOARDHOOK_API void SetTopHWND(HWND hCurTopWnd)
      244 {
      245 hTopWnd = hCurTopWnd;
      246 }
      247  
      248 extern "C" KEYBOARDHOOK_API void SetHoldUpMsg(BOOL bHoldUp)
      249 {
      250 bHoldUpMsg = bHoldUp;
      251 }
      252  
      253 extern "C" KEYBOARDHOOK_API void SetOnlySendOEMMsg(BOOL bOnlySendOEM)
      254 {
      255 bOnlySendOEMMsg = bOnlySendOEM;
      256 }
      257  
      258 extern "C" KEYBOARDHOOK_API void SetNeedPassOnceMsg(BOOL bWhetherNeed)
      259 {
      260 bNeedPassOnceMsg = bWhetherNeed;
      261 }

      2.  建立頭文件

       

      // The following ifdef block is the standard way of creating macros which make exporting
      // from a DLL simpler. All files within this DLL are compiled with the KEYBOARDHOOK_EXPORTS
      // symbol defined on the command line. this symbol should not be defined on any project
      // that uses this DLL. This way any other project whose source files include this file see
      // KEYBOARDHOOK_API functions as being imported from a DLL, wheras this DLL sees symbols
      // defined with this macro as being exported.
      #ifdef KEYBOARDHOOK_EXPORTS
      #define KEYBOARDHOOK_API __declspec(dllexport)
      #else
      #define KEYBOARDHOOK_API __declspec(dllimport)
      #endif
       
      // This class is exported from the KeyBoardHook.dll
      class KEYBOARDHOOK_API CKeyBoardHook {
      public:
      CKeyBoardHook(void);
      // TODO: add your methods here.
      };
       
      extern KEYBOARDHOOK_API int nKeyBoardHook;
       
      KEYBOARDHOOK_API int fnKeyBoardHook(void);
       
      extern "C" KEYBOARDHOOK_API void InstallHook(void);
      extern "C" KEYBOARDHOOK_API void UnHook(void);
      extern "C" KEYBOARDHOOK_API LRESULT CALLBACK KeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam);
      extern "C" KEYBOARDHOOK_API void SetAppHWND(HWND hCurAppWnd);
      extern "C" KEYBOARDHOOK_API void SetTopHWND(HWND hCurTopWnd);
      extern "C" KEYBOARDHOOK_API void SetHoldUpMsg(BOOL bHoldUp);
      extern "C" KEYBOARDHOOK_API void SetOnlySendOEMMsg(BOOL bOnlySendOEM);
      extern "C" KEYBOARDHOOK_API void SetNeedPassOnceMsg(BOOL bWhetherNeed);

      3.  建立程序主文件

       1 if (hModule)
       2     {
       3         InHook = (pInstallHook)GetProcAddress(hModule, L"InstallHook");
       4         UnHook = (pUnHook)GetProcAddress(hModule, L"UnHook");
       5         SetAppHWND = (pSetAppHWND)GetProcAddress(hModule, L"SetAppHWND");
       6         SetTopHWND = (pSetTopHWND)GetProcAddress(hModule, L"SetTopHWND");
       7         SetHoldUpMsg = (pSetHoldUpMsg)GetProcAddress(hModule, L"SetHoldUpMsg");
       8         SetOnlySendOEMMsg = (pSetOnlySendOEMMsg)GetProcAddress(hModule, L"SetOnlySendOEMMsg");
       9         SetNeedPassOnceMsg = (pSetNeedPassOnceMsg)GetProcAddress(hModule, L"SetNeedPassOnceMsg");
      10  
      11         if (!InHook || !UnHook || !SetAppHWND || !SetTopHWND || !SetHoldUpMsg || !SetOnlySendOEMMsg || !SetNeedPassOnceMsg)
      12         {
      13             MessageBoxEx(hWnd, L"KeyboardHook.dll加載失敗,程序被終止。", L"Info", MB_OK);
      14             PostQuitMessage(0);
      15         }
      16     }
      17     else
      18     {
      19         MessageBoxEx(hWnd, L"KeyboardHook.dll加載失敗,程序被終止。", L"Info", MB_OK);
      20         PostQuitMessage(0);
      21     }
      22  
      23 InHook();
      24  

      DLL的編寫,也可以參考以下網(wǎng)址中的內(nèi)容:

      http://www.bc-cn.net/Article/kfyy/cyy/jszl/200709/6328_2.html

       

      posted @ 2016-03-08 21:01  91program  閱讀(246)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 9l精品人妻中文字幕色| 亚洲第一国产综合| 久久精品熟女亚洲av艳妇| 日日噜噜夜夜狠狠视频| 成人精品区| 中文字幕日韩一区二区不卡| 无码伊人66久久大杳蕉网站谷歌 | 国产目拍亚洲精品区一区| 亚洲色欲色欱WWW在线| 色www永久免费视频| 国产精品一区二区三区自拍 | 国产性色av免费观看| 99久久机热/这里只有精品| 久久人妻精品大屁股一区| 国产成人影院一区二区三区| 清河县| 国产日韩乱码精品一区二区| 国产老妇伦国产熟女老妇高清| 久久综合国产色美利坚| 激情五月日韩中文字幕| 中文国产成人精品久久一| A级毛片无码久久精品免费| 免费a级黄毛片| 亚洲人午夜精品射精日韩| 久久人与动人物a级毛片 | 精品一区二区成人精品| 和龙市| 毛多水多高潮高清视频| 亚洲国产99精品国自产拍| 日韩中文字幕av有码| 成人国产av精品免费网| 国产一区二区精品久久凹凸| 午夜精品极品粉嫩国产尤物| 亚洲国模精品一区二区| 镇远县| 她也色tayese在线视频| 中文字幕乱码人妻二区三区| 色成人亚洲| 91偷自国产一区二区三区| 亚洲产在线精品亚洲第一站一| 日韩国产精品一区二区av|