分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

翻MSDN可知,鼠标钩子类型有两个,一个是WH_MOUSE,另一个是WH_MOUSE_LL,

至于它们的区别,百度了一下:

1.WH_MOUSE只能监控钩子所在模块的鼠标事件。

2.WH_MOUSE_LL可以截获整个系统所有模块的鼠标事件。

-------------------------------------------------------------------------------------------------------------------------------------

这里我测试的是WH_MOUSE_LL,毕竟比较给力嘛。文章后面给出VS2008源码和成品下载地址。

//效果截图如下:

-----------------------------------------------------------------------------------------------------------------------------------------------------

安装鼠标钩子和卸载钩子,比较简单,这里我就不详细讲了,这里主要讲的是,如何让dll和主程序进行

通信,毕竟我们的鼠标钩子存在于dll文件中,对鼠标事件的捕获也是在dll文件中实现的,我们如何将

捕获到的鼠标消息告诉给主程序呢?即我们如何将捕获到的鼠标消息显示在对话框上面呢?

-----------------------------------------------------------------------------------------------------------------------------------------------------

这里我们通过发送消息的方式,让dll和主程序进行通信。即我们捕获到鼠标消息后,马上将其发送给

主程序,主程序收到该消息后,将其显示在程序界面上。为了给主程序发送消息,在主程序调用安装

鼠标钩子的函数时,我们将主窗口的句柄通过参数传递到dll中,这样我们就可以发送消息给主程序了。

下面说一下实现步骤。

--------------------------------------------------------------------------------------------------------------------------------------------------------

一、先说dll程序

1.在dll程序中,自定义一个消息,如下所示:

#define WM_MYMSG WM_USER + 305 //自定义消息,用于和主程序通信

2.在钩子安装函数中,保存主程序的窗口句柄,代码如下:

BOOL WINAPI StartHookMouse(HWND hWnd){ g_hWnd=hWnd; hhkMouse=::SetWindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc,g_hInstDll,0); if (hhkMouse==NULL) {  return FALSE; }  else {  return TRUE; }}

3.在鼠标钩子响应函数中,我们将捕获到的消息,发送给主程序,代码如下:

//低级鼠标钩子过程LRESULT CALLBACK LowLevelMouseProc(         int nCode,      // hook code         WPARAM wParam,  // message identifier         LPARAM lParam   // mouse coordinates         ){ //有鼠标消息时,将其发给主程序 if (g_hWnd!=NULL&&nCode==HC_ACTION) {  ::SendMessage(g_hWnd,WM_MYMSG,wParam,lParam); } return CallNextHookEx(hhkMouse,nCode,wParam,lParam);}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上就是dll程序的主要部分了,接下来我们在主程序中,调用dll中的钩子安装函数,并把自己的窗口句柄传到

dll中,然后就是处理我们在dll中自定义的消息了。主要步骤如下:

1.安装鼠标钩子时,把自身窗口句柄传到dll中,主要代码为:

StartHook(this->m_hWnd);

2.在主程序的头文件中,我们也需要自定义一个消息,且该消息一定要定义成和dll中定义的消息一样,不然会

接收不到dll发来的消息哦。

#define WM_MYMSG WM_USER + 305 //自定义消息,用于处理dll发来的消息,该消息的定义和dll中定义的消息要一模一样

3.声明消息处理函数

afx_msg LRESULT OnMyMsg(WPARAM wParam,LPARAM lParam);

4.消息映射

ON_MESSAGE(WM_MYMSG,OnMyMsg)

5.编写消息处理函数

LRESULT CHookMouseTestDlg::OnMyMsg(WPARAM wParam,LPARAM lParam)

{

//...处理消息WM_MYMSG的代码写在这里,到这一步算是大工告成了。

}

-----------------------------------------------------------------------------------------------------------------------------------------

关于MFC的消息映射,自定义消息的处理、发送等,以上我都是一笔带过了,如果你不了解这些,

百度一下即可,网上有很多的,在这里我就不重复了。需要说明的是,如果你想理解我这个程序,

前提是对MFC消息有一定的理解,能够理解自定义消息就更OK了。

-----------------------------------------------------------------------------------------------------------------------------------------

为了分析方便,以上的代码都不是很详细,具体请看原工程:

低级鼠标钩子VS2008源码.zip

低级鼠标钩子成品.zip

-------------------------------------------------------------------------------------------------------------------------------------------

您的十分满意是我追求的宗旨。

您的一点建议是我后续的动力。

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

低级鼠标钩子WH MOUSE LL相关推荐

  1. 低级鼠标钩子WH_MOUSE_LL

    翻MSDN可知,鼠标钩子类型有两个,一个是WH_MOUSE,另一个是WH_MOUSE_LL, 至于它们的区别,百度了一下: 1.WH_MOUSE只能监控钩子所在模块的鼠标事件. 2.WH_MOUSE_ ...

  2. 游戏修改器制作教程二:键盘鼠标钩子

    本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...

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

    用Delphi实现Windows的鼠标钩子函数 Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助 文件中,对Windows API函数的说明沿袭了 V ...

  4. [转]VSTO Office二次开发应用程序键盘鼠标钩子

    可能在使用VSTO技术对Office的相关程序进行操作时,会碰到用程序去控制一些快捷键的操作,可以对键盘进行挂钩,此时使用P/Invoke函数实现. 原文链接:<VSTO应用程序中加入键盘钩子& ...

  5. VSTO Office二次开发应用程序键盘鼠标钩子

    可能在使用VSTO技术对Office的相关程序进行操作时,会碰到用程序去控制一些快捷键的操作,可以对键盘进行挂钩,此时使用P/Invoke函数实现. 原文链接:<VSTO应用程序中加入键盘钩子& ...

  6. 低级键盘钩子,在WIN7以上版本的问题

    最近在项目用到低级键盘钩子.发现一个很奇怪的事情,在开发环境和测试环境下都正常运行的键盘钩子, 到了现场环境,总是偶发性出现 键盘钩子不能用了,而且退出时产生1404 错误. 后经过阅读MSDN 的R ...

  7. 使用钩子函数[3] - 建立一个全局的鼠标钩子

    分两步: 一.建立 DLL, 并在 DLL 实现钩子的设置.释放和钩子函数; 二.再建一个工程调用测试. 第一步: 做 DLL 先建立一个 DLL 工程, 自动初始的代码如下(去掉注释了): libr ...

  8. 低级键盘钩子 DLL

    C语言封装的低级键盘钩子(HOOK)的DLL程序, +源码,  并有测试程序... 下载地址 : http://download.csdn.net/detail/hemmingway/4570548

  9. 【IPC-钩子】WM_COPYDATA和鼠标钩子小程序

    [IPC-钩子]WM_COPYDATA和鼠标钩子小程序 作者:  来自:  阅读次数: 218 [大 中 小] -------------------------------------------- ...

  10. 基于低级键盘钩子的dota改键(全局+免DLL注入)MFC实现(源码+总结)

    上一篇文章已经写了基于 普通键盘钩子(单线程+DLL)来实现dota改键.http://blog.csdn.net/a576323437/article/details/8037138 这一次,基于 ...

最新文章

  1. 同样是持久化,竟然有这么大的差别!
  2. JVM中GC对象配置
  3. Exercising Walk CodeForces - 1332A(思维)
  4. bkwin设置文本控件为多行模式
  5. php传中文给Java_完美解决PHP中文乱码(转) - - JavaEye技术网站
  6. DOM 节点的创建、删除、替换
  7. 三星发布8nm芯片Exynos 850
  8. python编程输入三个数按大小输出_编程:输入3个数,按从小到大的顺序输出
  9. Nginx 上传图片500错误 open() /var/lib/nginx/tmp/
  10. JSP-02动态网页技术基础
  11. 单片机学习(四)——ESP8266(最全教程和说明)
  12. 【考研英语语法】一般将来时练习题
  13. 学习笔记(2):程序员的数学:微积分-常用导数(二):最常用到的技巧
  14. 为什么用MongoDB而不用Redis
  15. switch 贯穿的妙用
  16. 相机取相,如何给类似圆柱的侧面打光均匀
  17. 1.4 矩阵方程(第1章 线性代数中的线性方程组)
  18. 广发证券基于分布式架构的新一代估值系统实践
  19. mysql数据库d导出数据_mysql数据库导入导出
  20. X32汇编AAA,AAS,AAM,AAD,DAS,DAA

热门文章

  1. 一个将汉字转换成拼音的npm包
  2. Invest模型-碳储量计算
  3. CSS行内样式内部样式外部样式
  4. 斐波那契数列 Java 实现。
  5. 【DL BC】矩阵乘积操作简述
  6. Neo4j下载安装教程
  7. 什么是电子元器件 电子元件和电子器件的区别
  8. 常用电子产品行业标准及认证
  9. 聚类分析matlab算例,应用Matlab聚类方法分析大坝监测资料
  10. uc/os-II的内存改进与实现TLSF算法的详解,移植实现(二)