C++制作简易鼠标连点器 | Hlwdy's blog
C++制作简易鼠标连点器
发表于 2020-07-09 共 529 字
分类于 C++

我们可以通过调用mouse_event函数来实现模拟鼠标操作。

mouse_event函数位于user32.dll的API中,参数如下:

void mouse_event(
  DWORD     dwFlags,
  DWORD     dx,
  DWORD     dy,
  DWORD     dwData,
  ULONG_PTR dwExtraInfo
);

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

模拟鼠标长按不松开

这里使用KEY_DOWN(GetAsyncKeyState)来检测按键事件,如果按下"L",则开始左键连点,按下"R"代表右键连点,按下空格表示暂停当前连点任务。

使用now变量来记录当前状态。同时,添加延时(单位毫秒)(Sleep)来缓解一些卡顿问题。

具体代码如下:

#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;  
}

模拟鼠标连续点击

还有一种,就是模拟鼠标连续点击(按下+弹起)

只需要在按下后再进行弹起模拟即可:

#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,可能会引起一些现象。

筛选文章
类别选择 (分类/标签)
全屏 关闭