zoukankan      html  css  js  c++  java
  • WinCE 6 鼠标钩子(HOOK)

     1 // MouseHook.h   
     2   
     3 #ifdef MOUSEHOOK_EXPORTS  
     4 #define MOUSEHOOK_API __declspec(dllexport)  
     5 #else  
     6 #define MOUSEHOOK_API __declspec(dllimport)  
     7 #endif  
     8   
     9 extern "C" MOUSEHOOK_API void CALLBACK InstallMouseHook(void);  
    10 extern "C" MOUSEHOOK_API void CALLBACK UnMouseHook(void);  
    11   
    12 extern "C" MOUSEHOOK_API LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam);  
      1 // MouseHook.cpp   
      2 // MouseHook.cpp : Defines the entry point for the DLL application.  
      3 //  
      4   
      5 #include "stdafx.h"  
      6 #include "MouseHook.h"  
      7 #include <Pwinuser.h>  
      8   
      9 // 告诉编译器将变量放入它自己的数据共享节中  
     10 #pragma data_seg("MouseHookData")  
     11   
     12 HINSTANCE ghInst = NULL;  
     13 HHOOK ghMouseHook = NULL;  
     14   
     15 #pragma data_seg()  
     16   
     17 // 告诉编译器设置共享节的访问方式为:读,写,共享  
     18 #pragma comment(linker, "/SECTION:MouseHookData,RWS")  
     19   
     20 BOOL APIENTRY DllMain(HANDLE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)  
     21 {  
     22   switch(ul_reason_for_call)  
     23   {  
     24   case DLL_PROCESS_ATTACH:  
     25     ghInst = (HINSTANCE)hModule;  
     26     break;  
     27   case DLL_THREAD_ATTACH:  
     28   case DLL_THREAD_DETACH:  
     29   case DLL_PROCESS_DETACH:  
     30     break;  
     31   }  
     32     return TRUE;  
     33 }  
     34   
     35 extern "C" MOUSEHOOK_API void InstallMouseHook(void)  
     36 {  
     37   RETAILMSG(1,(L"[Mouse HOOK]Install HOOK: 0x%x
    ",ghInst));  
     38   if(ghInst)  
     39   {  
     40     ghMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, ghInst, 0);  
     41     if(NULL == ghMouseHook)  
     42     {  
     43       RETAILMSG(1,(L"[Mouse HOOK]HOOK create failed: %d
    ",GetLastError()));  
     44     }  
     45   }  
     46 }  
     47   
     48 extern "C" MOUSEHOOK_API void UnMouseHook(void)  
     49 {  
     50   RETAILMSG(1,(L"[Mouse HOOK]Uninstall HOOK:0x%x
    ",ghMouseHook));  
     51   if(ghMouseHook)  
     52   {  
     53     UnhookWindowsHookEx(ghMouseHook);  
     54     ghMouseHook = NULL;  
     55   }  
     56   
     57   ghInst = NULL;  
     58 }  
     59   
     60 /* 
     61 nCode 
     62 [输入参数] 说明 HOOK 过程如何处理此消息。如果 nCode 小于零, HOOK 过程必须将此消息直接传递给下一个 CallNextHookEx, 并从 CallNextHookEx 返回. 
     63   本参数可以取以下的值:HC_ACTION 
     64 wParam 和 lParam 参数中包含鼠标消息的信息。 
     65 wParam 
     66 [输入参数] 鼠标消息标识. 本参数取如下值之一: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_MOUSEHWHEEL, WM_RBUTTONDOWN, 或 WM_RBUTTONUP.  
     67 lParam 
     68 [输入参数] 指定 MSLLHOOKSTRUCT 结构体. 其中包含坐标等信息。 
     69 */  
     70 // CE6 的鼠标 HOOK 的响应速度很慢, 原因不明!  
     71 extern "C" MOUSEHOOK_API LRESULT MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)  
     72 {  
     73   static POINT ptPre;  
     74   
     75 #if _DEBUG  
     76    RETAILMSG(1,(L"[Mouse HOOK]Mouse Proc,nCode is: %d
    ",nCode));  
     77    RETAILMSG(1,(L"[Mouse HOOK]Mouse Proc,wParam is: %d
    ",wParam));  
     78 #endif  
     79   PMSLLHOOKSTRUCT pMouseHookStruct = (PMSLLHOOKSTRUCT)lParam;  
     80 #if _DEBUG  
     81   RETAILMSG(1,(L"[Mouse HOOK]Mouse Proc,mouseData is: %d
    ",pMouseHookStruct->mouseData));  
     82   RETAILMSG(1,(L"[Mouse HOOK]Mouse Proc,dwExtraInfo is: %d
    ",pMouseHookStruct->dwExtraInfo));  
     83 #endif  
     84   
     85   if(HC_ACTION != nCode)  
     86   {  
     87     return CallNextHookEx(ghMouseHook, nCode, wParam, lParam);  
     88   }  
     89   
     90   if(ptPre.x != pMouseHookStruct->pt.x || ptPre.y != pMouseHookStruct->pt.y)  
     91   {  
     92 #if _DEBUG  
     93     RETAILMSG(1,(L"[Mouse HOOK]Mouse Proc,pt is: %d,%d(%d,%d)
    ",pMouseHookStruct->pt.x,pMouseHookStruct->pt.y,ptPre.x,ptPre.y));  
     94 #endif  
     95     ptPre = pMouseHookStruct->pt;  
     96   
     97     // 若注释掉此句, 则不再响应鼠标操作  
     98     return CallNextHookEx(ghMouseHook, nCode, wParam, lParam);  // 继续传递消息  
     99   }  
    100   
    101   return TRUE;  
    102 }  
    103   
    104 // 调用示例  
    105   
    106 // mouse hook test  
    107 typedef void (*pInstallMouseHook)(void);  
    108 typedef void (*pUnMouseHook)(void);  
    109 HINSTANCE ghMouseModule = NULL;  
    110 pInstallMouseHook  InMouseHook = NULL;  
    111 pUnMouseHook  UnMouseHook = NULL;  
    112   
    113   
    114 ghMouseModule = LoadLibrary(L"\AppStore\SystemInfo\MouseHook.dll");  
    115 if(ghMouseModule)  
    116 {  
    117   InMouseHook = (pInstallMouseHook)GetProcAddress(ghMouseModule,L"InstallMouseHook");  
    118   UnMouseHook = (pUnMouseHook)GetProcAddress(ghMouseModule,L"UnMouseHook");  
    119 }  
    120 if(NULL != InMouseHook)  
    121 {  
    122   InMouseHook();  
    123 }  
  • 相关阅读:
    SQL SERVER的检查点checkpoint
    MySQL备份说明
    声明对象和创建对象的区别
    getParameter的用法总结
    Jsp的九大对象,七大动作,三大指令
    为什么内部类访问的外部变量需要使用final修饰
    java synchronized详解
    网上选课系统需求说明书
    第三次作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/91program/p/5206454.html
Copyright © 2011-2022 走看看