羽夏閑談——鼠標連點器


前言

  玩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,再加可以自定義的設置代碼,一個連點器就徹底完成了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM