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\r\n",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\r\n",GetLastError()));
 44     }
 45   }
 46 }
 47
 48 extern "C" MOUSEHOOK_API void UnMouseHook(void)
 49 {
 50   RETAILMSG(1,(L"[Mouse HOOK]Uninstall HOOK:0x%x\r\n",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\r\n",nCode));
 77    RETAILMSG(1,(L"[Mouse HOOK]Mouse Proc,wParam is: %d\r\n",wParam));
 78 #endif
 79   PMSLLHOOKSTRUCT pMouseHookStruct = (PMSLLHOOKSTRUCT)lParam;
 80 #if _DEBUG
 81   RETAILMSG(1,(L"[Mouse HOOK]Mouse Proc,mouseData is: %d\r\n",pMouseHookStruct->mouseData));
 82   RETAILMSG(1,(L"[Mouse HOOK]Mouse Proc,dwExtraInfo is: %d\r\n",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)\r\n",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 }  
时间: 2024-10-01 14:26:26

WinCE 6 鼠标钩子(HOOK)的相关文章

HOOK API (一)——HOOK基础+一个鼠标钩子实例

HOOK API (一)——HOOK基础+一个鼠标钩子实例 0x00 起因 最近在做毕业设计,有一个功能是需要实现对剪切板的监控和进程的防终止保护.原本想从内核层实现,但没有头绪.最后决定从调用层入手,即采用HOOK API的技术来挂钩相应的API,从而实现预期的功能.在这样的需求下,就开始学习了HOOK API. 0x01什么是HOOK API HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制[24].HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的

钩子编程(HOOK) 安装进程内鼠标钩子

作者 : 卿笃军 钩子函数: WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一.利用它们,您可以捕捉您自己进程或其它进程发生的事件.通过"钩挂",您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做"钩子函数",当每次发生您感兴趣的事件时,WINDOWS都将调用该函数. 下面介绍如何安装一个进程内的鼠标钩子. 第一步:打开VC6.0,新建一个基于对话框的MFC应用程序. 第二步:将如下代码拷贝到BOOL CInnerHookDlg::OnI

用Delphi实现Windows的鼠标钩子函数

Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助文件中,对Windows API函数的说明沿袭了 VC 的格式,和VC一样,对很多API函数的用法没有举例子详细说明,对一些深入系统内部的API函数更是语焉不详,给编程者带来不便.笔者仅就在Windows编程中鼠标钩子函数(HOOK)的实现,举例作一说明.   鼠标钩子函数也可叫做鼠标消息过滤器,是一种回调(CALLBACK)函数,归系统调用.如果用SetWindowsHook或SetWindows

钩子(hook)编程

一.钩子介绍 1.1钩子的实现机制 钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术.下图是windows应用程序传递消息的过程: 如在键盘中按下一键,操作系统将收到键按下消息,把消息放入消息队列,然后消息队列对消息进行派发,发给相应的应用程序,经过应用程序处理后发给操作系统,操作系统再调用相应的应用程序的创建的窗口过程. 我们可能通过钩子截获这些消息,让消息不再往下传递,或者说截获到感兴趣的消息后做点什么. 1.2钩子分类与实现 钩子分进程内钩子与全局

VC6 鼠标钩子 最简单样例

Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它能够截获并处理送给其它应用程序的消息,来完毕普通应用程序难以实现的功能.钩子能够监视系统或进程中的各种事件消息,截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生,完毕特定的功能,比方截获键盘.鼠标的输入,屏幕取词,日志监视等等.可见,利用钩子能够实现很多特殊而实用的功能.因此,对于高级编程人员来说,掌

windows钩子 Hook示例

1.首先编写一个 win32 dll工程. #include "stdafx.h" int WINAPI add(int a,int b) { return a+b; } BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } 在def文件添加显式导出: (没找到def文件需要添加) LIBRARY DESCRIPTION "AD

C#全局鼠标键盘Hook

原文出自:http://www.cnblogs.com/iEgrhn/archive/2008/02/17/1071392.html using System; using System.Collections.Generic; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace DCIEngine.Frame

c#键盘鼠标钩子

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows.Forms; 6 using System.Runtime.InteropServices; 7 using System.ComponentModel; 8 using System.Reflection; 9 10 namespace Alif.CommonAP

C#键盘钩子 鼠标钩子

最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> /// 用于设置窗口 /// </summary> /// <param name="hWnd"></param> /// <param name="hWndInsertAfter"></param> ///