羽夏闲谈——鼠标连点器
前言
玩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,再加可以自定义的设置代码,一个连点器就彻底完成了。
本文来自博客园,作者:寂静的羽夏 ,一个热爱计算机技术的菜鸟
转载请注明原文链接:https://www.cnblogs.com/wingsummer/p/15388941.html