[C++] 簡易滑鼠連擊修正工具原理與實現

image
1、起因
近日滑鼠的微動開關出問題了,偶爾單擊滑鼠變成雙擊,測試了下10次單擊有2-3次會變為雙擊,網上買的滑鼠還要兩三天的時間才能到,於是就做了個簡單的小工具先應付著。本程式原理較為簡單,但由於本人水平有限,程式碼寫的較爛,請各位多多指點。 如果有學習c++的同學可以加入小編C++學習群:825414254獲取素材以及開發工具資料

image
2、原理
利用滑鼠鉤子獲取滑鼠按下和彈起的操作,計算兩次點選的時間差,如果太快了,那肯定就是微動開關的問題造成的,然後遮蔽掉第二次點選操作就可以了。

image
3、實現
3.1、主要API介紹
1、設定鉤子SetWindowsHookEx

image
引數:idHook:訊息型別 lpfn:訊息處理函式 hMod:模組控制代碼 dwThreadId:關聯的執行緒ID
2、取消鉤子UnhookWindowsHookEx

image
引數:hhk:SetWindowsHookEx的返回值
3、查詢計數器頻率QueryPerformanceFrequency

image
引數:lpFrequency:計數器頻率
4、查詢計數器QueryPerformanceCounter

image
引數:lpPerformanceCount:計數器計數

image
3.2、基本流程
3.2.1主程式流程
程式啟動,獲取命令列引數,得到設定的延遲時間,啟動鉤子進行訊息處理。
3.2.2訊息處理流程
區分是否為第一次按下,第一次按下:記錄按下時間A。非第一次按下:將上次按下時間設為A。
記錄當前時間B,若B-A大於設定的間隔,則放行。若小於則取消本次按下操作,並設定一個標記,讓對應的彈起操作也取消。
彈起操作與之類似。
3.3、程式碼實現
3.3.1、啟動鉤子

image
3.3.2、取消鉤子

image
3.3.3、訊息處理

image
3.3.4、主程式

image
4、新增其他部分
按照上面的程式碼,便可以做一個簡易的滑鼠連擊修正工具,但是卻無法操控,結束程式只能靠工作管理員結束程序。於是我做了一個托盤圖示來控制,在這裡程式碼不再贅述,有興趣可以在附件中檢視。
ps:本原始碼用VS2015編譯通過,WIN10 X64 1709版本執行正常