前言
玩95版植物大戰殭屍的打殭屍遊戲被打自閉了,到了進度中間殭屍出的速度就離譜,打都打不完,手和滑鼠都要點費了。我堂堂一個會程式設計的人,想通過這個關卡,於是乎寫一個滑鼠連點器的念頭就起來了。
就這麼離譜
原理
何為滑鼠連點器,顧名思義,通過某種方式實現快速在某個位置連續點選。本次我們將用C語言
來實現一個簡陋的滑鼠連點器。為啥說簡陋呢?一是不好看,是一個黑框控制檯;二是不能隨便自定義設定,需要改程式碼。但滑鼠連點器的精髓都在於此。
既然實現滑鼠連點器的功能,我們就必須找到能夠模擬出滑鼠點選的API
。經過查詢,找到如下庫函式:
WINUSERAPI VOID WINAPI mouse_event(
DWORD dwFlags,
DWORD dx,
DWORD dy,
DWORD dwData,
ULONG_PTR dwExtraInfo);
這個函式的功能是用於滑鼠的移動和點選。從函式的名稱就知道這東西是幹啥的,發起一個滑鼠事件,滑鼠不就能幹點選、滾輪滾動、移動游標的事情嗎?我們需要點選滑鼠幾下,呼叫這個函式幾次不就行了嗎?實現模擬點選呼叫如下:
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); //當前位置點選一次滑鼠
我比較懶,我想點選鍵盤的某一個按鍵就在我滑鼠的位置持續連點,就需要知道這個按鍵的狀態,那麼用到下面這個API
:
WINUSERAPI SHORT WINAPI GetAsyncKeyState(int vKey);
如果我想檢測Control
這個按鍵的狀態,我們需要這樣呼叫:
GetAsyncKeyState(VK_CONTROL);
VK_CONTROL
是一個列舉,它的值代表一個按鍵,其他的按鍵自行檢視。
所有需要的函式都瞭解了,我們就開始寫程式碼了。
#include <windows.h> //GetAsyncKeyState 和 mouse_event 兩個函式需要引用的標頭檔案
int main()
{
//輪巡按鍵狀態
while (1)
{
//CONTROL鍵是否被按下,是的話進入連點迴圈
while (GetAsyncKeyState(VK_CONTROL))
{
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Sleep(5); //更改引數可以調整連點頻率
}
//ESCAPE鍵被按下的話,直接退出迴圈結束
if (GetAsyncKeyState(VK_ESCAPE))
break;
Sleep(10); //更改此引數可以調整輪巡按鍵頻率
}
return 0;
}
上面的程式碼還呼叫了Sleep
函式,這個函式是用來暫停一會兒當前執行緒的。故名思意就是先睡一會不操作。睡到指定時間再醒過來繼續執行。傳遞的引數是時間,單位是毫秒。通過這個可以調整頻率,減少CPU
負擔。
測試
讓那些殭屍們感受到恐懼吧!!!
結語
本人火絨粉,從論壇看到 點選器傳播病毒暗刷流量 ,有些感慨。就這一個小功能就被下毒,有點感慨很多軟體越來越流氓,IT現在的軟體環境比較良心的少了。
說點題外話,軟體免費功能強大,投放廣告你投也就罷了,能不能投點正常的廣告?有些軟體原本良心,現在動不動就公開下毒,蒐集資訊或暗刷流量或劫持等等有意思嗎?哪些軟體我就不說了,隨便就一大堆。
好了,不說了。現在做一個小總結:通過GetAsyncKeyState
獲取指定按鍵狀態確定開始連點,用mouse_event
實現模擬點選,連點器的功能就完全實現了。加一個 GUI,再加可以自定義的設定程式碼,一個連點器就徹底完成了。