1、起因

近日鼠标的微动开关出问题了,偶尔单击鼠标变成双击,测试了下10次单击有2-3次会变为双击,网上买的鼠标还要两三天的时间才能到,于是就做了个简单的小工具先应付着。

 

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版本运行正常