[C++] 简易鼠标连击修正工具原理与实现
1、起因
近日鼠标的微动开关出问题了,偶尔单击鼠标变成双击,测试了下10次单击有2-3次会变为双击,网上买的鼠标还要两三天的时间才能到,于是就做了个简单的小工具先应付着。本程序原理较为简单,但由于本人水平有限,代码写的较烂,请各位多多指点。如果有学习c++的同学可以加入小编C++学习群:825414254获取素材以及开发工具资料
2、原理
利用鼠标钩子获取鼠标按下和弹起的操作,计算两次点击的时间差,如果太快了,那肯定就是微动开关的问题造成的,然后屏蔽掉第二次点击操作就可以了。
3、实现
3.1、主要API介绍
1、设置钩子SetWindowsHookEx
参数:idHook:消息类型 lpfn:消息处理函数 hMod:模块句柄 dwThreadId:关联的线程ID
2、取消钩子UnhookWindowsHookEx
参数:hhk:SetWindowsHookEx的返回值
3、查询计数器频率QueryPerformanceFrequency
参数:lpFrequency:计数器频率
4、查询计数器QueryPerformanceCounter
参数:lpPerformanceCount:计数器计数
3.2、基本流程
3.2.1主程序流程
程序启动,获取命令行参数,得到设置的延迟时间,启动钩子进行消息处理。
3.2.2消息处理流程
区分是否为第一次按下,第一次按下:记录按下时间A。非第一次按下:将上次按下时间设为A。
记录当前时间B,若B-A大于设置的间隔,则放行。若小于则取消本次按下操作,并设置一个标记,让对应的弹起操作也取消。
弹起操作与之类似。
3.3、代码实现
3.3.1、启动钩子
3.3.2、取消钩子
3.3.3、消息处理
3.3.4、主程序
4、添加其他部分
按照上面的代码,便可以做一个简易的鼠标连击修正工具,但是却无法操控,结束程序只能靠任务管理器结束进程。于是我做了一个托盘图标来控制,在这里代码不再赘述,有兴趣可以在附件中查看。
ps:本源码用VS2015编译通过,WIN10 X64 1709版本运行正常