羽夏闲谈——鼠标连点器

前言

  玩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,再加可以自定义的设置代码,一个连点器就彻底完成了。

posted @ 2021-10-10 11:34  寂静的羽夏  阅读(1142)  评论(0编辑  收藏  举报