VC++全局钩子实现鼠标坐标值实时捕获

自从使用.NET WinForm后已经很长时间没用VC++ MFC写过程序了,今天一问友给出一道VC++的题。

题目:使用钩子(HOOK)实现鼠标在屏幕上移动时实时捕获当前位置坐标,并在程序对话框的文本框中实时显示。

要求:不是仅捕获鼠标在程序窗口客户区时的坐标值,而是当鼠标移出程序窗口客户区也能捕获到鼠标在屏幕中的位置坐标。

实现思路:由于局部钩子只能监视本进程内的某个指定线程的事件消息,而按照此程序要求程序窗口不是活动窗口时也能监视到鼠标位置并将坐标值传给主程序的消息处理程序进行处理,所以需要使用系统钩子(全局钩子)。又由于要捕获鼠标信息,所以要用鼠标钩子,也就是在注册钩子时将类型为WH_MOUSE。该钩子要捕获WM_MOUSEMOVE消息并将消息传递给主程序的OnMouseMove()鼠标移动消息处理函数来进行处理,并将捕获的鼠标位置坐标值显示在对话框的Edit控件中。

        实现最终效果如下图,左边的图片浏览器是活动窗口,鼠标指针也在左边的窗口中,右边的程序窗口依然能获取鼠标位置并在文本框中显示坐标。

图片

 

实现步骤(仅列出关键代码):

一、编写全局钩子DLL

      全局钩子必须单独的编写成dll文件。在VC++中新建一DLL项目,命名为"hook",该钩了的dll入口函数代码就不给出了。主要看钩子安装函数InstallMyHook、卸载函数UninstallMyHook以及回调函数hookproc。

InstallMyHook钩子安装函数代码如下:<

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值