Fork me on GitHub

C++制作简易鼠标连点器

我们可以通过调用mouse_event函数来实现模拟鼠标操作。
mouse_event函数位于user32.dll的API中,参数如下:

1
2
3
4
5
6
7
void mouse_event(
DWORD dwFlags,
DWORD dx,
DWORD dy,
DWORD dwData,
ULONG_PTR dwExtraInfo
);

具体的dwFlags参数请参考此链接

模拟鼠标长按不松开

这里使用KEY_DOWN(GetAsyncKeyState)来检测按键事件,如果按下”L”,则开始左键连点,按下”R”代表右键连点,按下空格表示暂停当前连点任务。
使用now变量来记录当前状态。同时,添加延时(单位毫秒)(Sleep)来缓解一些卡顿问题。
具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<cstdio>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
int main(){
char a;
int now=0;
printf("by:hlwdy\n");
printf("L: Left button\nR: right click\n");
printf("Space: stop\n");
while(1)
{
if(KEY_DOWN(VK_SPACE)){
now=0;
printf("Space\n");
Sleep(100);
}
if(KEY_DOWN('L')){
now=1;
printf("L\n");
Sleep(100);
}
if(KEY_DOWN('R')){
now=2;
printf("R\n");
Sleep(100);
}
if(now==1){
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Sleep(15);
}
if(now==2){
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
Sleep(15);
}
Sleep(20);
}
return 0;
}

模拟鼠标连续点击

还有一种,就是模拟鼠标连续点击(按下+弹起)
只需要在按下后再进行弹起模拟即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<cstdio>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
int main(){
char a;
int now=0;
printf("by:hlwdy\n");
printf("L: Left button\nR: right click\n");
printf("Space: stop\n");
while(1)
{
if(KEY_DOWN(VK_SPACE)){
now=0;
printf("Space\n");
Sleep(100);
}
if(KEY_DOWN('L')){
now=1;
printf("L\n");
Sleep(100);
}
if(KEY_DOWN('R')){
now=2;
printf("R\n");
Sleep(100);
}
if(now==1){
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Sleep(15);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//弹起
}
if(now==2){
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
Sleep(15);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
Sleep(20);
}
return 0;
}

注意事项

如果程序没用好,可能会导致鼠标乱点,使得电脑无法控制。
另外,此程序存在一定bug,可能会引起一些现象。