C语言连点器小程序

 只支持windows系统,可直接运行(水一篇)

主体大概逻辑是用windows.h的鼠标操作,模拟鼠标点击,从而实现连点的功能,部分代码可自行修改,大概是这样的一个小控制台,不建议选择连点次数过多,暂时没有暂停功能,可自行添加,可用system("pause"),或者其他

单独功能演示

// 下面代码可持续获取鼠标位置
#include <stdio.h>
#include <windows.h>

int main() {
    POINT cursorPos;

    // 获取鼠标位置
    while (true)
    {
        if (GetCursorPos(&cursorPos)) {
            printf("鼠标当前位置:x=%d, y=%d\n", cursorPos.x, cursorPos.y);
        }
        else {
            printf("无法获取鼠标位置。\n");
        }
    }
    system("pause");
    return 0;
}


 下面代码是设置窗口,需要函数调用,传递参数,或者直接在内赋值,用bool是因为有整型和字符串两种类型,如果直接赋值可用void

//设置窗口大小
//bool setWindowsSize(const char* cTitle, int x, int y)
//{
//	//设置标题
//	SetConsoleTitleA(cTitle);
//	HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
//	HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
//	//获取最大窗口大小
//	COORD pos = GetLargestConsoleWindowSize(hStdOut);
//	COORD bufSize = { pos.X + 1, pos.Y + 1 };
//	//设置控制台窗口缓冲区大小
//	if (!SetConsoleScreenBufferSize(hStdOut, bufSize))
//	{
//		//设置失败
//		printf("缓冲区设置失败:(%d, %d) %d\n", bufSize.X, bufSize.Y, GetLastError());
//		return false;
//	}
//	SMALL_RECT srctWindow = { 0, 0, x, y };
//	//设置控制台窗口大小
//	if (!SetConsoleWindowInfo(hStdOut, true, &srctWindow))
//	{
//		//设置失败
//		printf("窗口设置失败:%d\n", GetLastError());
//		return false;
//	}
//	COORD buf = { x + 1, y + 1 };
//	//设置控制台缓冲区大小
//	if (!SetConsoleScreenBufferSize(hStdOut, buf))
//	{
//		//设置失败
//		printf("缓冲区设置失败:(%d, %d) %d\n", bufSize.X, bufSize.Y, GetLastError());
//		return false;
//	}
//	return true;
//}

 

 整体代码

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void Chosecmd();

POINT cursorPos;  

// 第一界面
void firstcmd()
{
    system("title 连点器");
    printf("************************\n");
    printf("* 欢迎进入连点器小程序 *\n");
    printf("************************\n\n");
    printf("************************\n");
    printf("*  请按照下图进行选择  *\n");
    printf("*----------------------*\n");
    printf("*    1.获取连点位置    *\n");
    printf("*----------------------*\n");
    printf("*    2.进行连点操作    *\n");
    printf("*----------------------*\n");
    printf("*        3.退出        *\n");
    printf("************************\n");
    
}

// 选则1下的界面
void secondcmd()
{
    system("title 位置选择");
    printf("************************\n");
    printf("*        a.开始        *\n");
    printf("*----------------------*\n");
    printf("*        b.返回        *\n");
    printf("************************\n");
}

// 选择二下的操作
void thread()
{
    // 定义鼠标点击的次数,时间,x,y
    int numClicks, interval, x, y;
    printf("请输入你想要点击的次数: ");
    scanf_s("%d", &numClicks);
    printf("请输入你想要间隔的时间毫秒,1秒=1000毫秒: ");
    scanf_s("%d", &interval);
    printf("请输入X坐标: ");
    scanf_s("%d", &x);
    printf("请输入Y坐标: ");
    scanf_s("%d", &y);
    int add = numClicks;
    for (int i = 0; i < numClicks; i++)   // 通过for循环循环点击次数
    {
        // 移动鼠标到指定位置
        SetCursorPos(x, y);
        // 模拟鼠标按下和释放事件  注意按下和释放算是鼠标点击的一次操作
        INPUT input[2] = { 0 };
        // 左键按下
        input[0].type = INPUT_MOUSE;
        input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
        // 左键释放
        input[1].type = INPUT_MOUSE;
        input[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
        SendInput(2, input, sizeof(INPUT));
        // 间隔时间 自定义
        Sleep(interval);
        add--;
    }
   if (add == 0)
    {
        printf("操作完成,是否返回上级界面?(输入'r'返回上级界面,其他键退出程序): ");
        char choice;
        scanf_s(" %c", &choice);
        if (choice == 'r') {
            system("cls");            
            firstcmd();
            Chosecmd();
        }
        else
        {
            exit(0);
        }
    }
}

// 选择1下面的a操作
void second()
{
    // 延迟3秒记录鼠标位置,并且打印输出
    printf("请把鼠标移动到你想要点击的位置\n");
    for (int i = 3; i > 0; i--)
    {
        printf("%d\n", i);
        Sleep(1000);
    }
    if (GetCursorPos(&cursorPos))
    {
        printf("鼠标当前位置:x=%d, y=%d\n", cursorPos.x, cursorPos.y);
    }
    else
    {
        printf("无法获取鼠标位置。\n");
    }
}

void stop()
{
    // 暂停功能
}
void begin()
{
    // 恢复功能
}

// 控制控制台
bool setWindowsSize(const char* cTitle, int x, int y)
{
    //设置标题
    SetConsoleTitleA(cTitle);
    HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    //获取最大窗口大小
    COORD pos = GetLargestConsoleWindowSize(hStdOut);
    COORD bufSize = { pos.X + 1, pos.Y + 1 };
    //设置控制台窗口缓冲区大小
    if (!SetConsoleScreenBufferSize(hStdOut, bufSize))
    {
        //设置失败
        printf("缓冲区设置失败:(%d, %d) %d\n", bufSize.X, bufSize.Y, GetLastError());
        return false;
    }
    SMALL_RECT srctWindow = {0,0,x,y};
    //设置控制台窗口大小
    if (!SetConsoleWindowInfo(hStdOut, true, &srctWindow))
    {
        //设置失败
        printf("窗口设置失败:%d\n", GetLastError());
        return false;
    }
    COORD buf = {x+1,y+1};
    //设置控制台缓冲区大小
    if (!SetConsoleScreenBufferSize(hStdOut, buf))
    {
        //设置失败
        printf("缓冲区设置失败:(%d, %d) %d\n", bufSize.X, bufSize.Y, GetLastError());
        return false;
    }
    return true;
}

// 第一界面下的各个选项执行
void Chosecmd()
{
    // 通过循环保证每次回到上级界面
    while (true)
    {

        int chose = 0;
        printf("请输入选择:");
        scanf_s("%d", &chose);
        int i = 1;
        while (i)
        {
            // 通过一个自定义整数,当他为0,返回上级界面
            if (chose == 1)
            {
                char chosea = 0;
                system("cls");
                secondcmd();
                printf("请选择:");
                scanf_s("%c", &chosea);
                if (chosea == 'a')
                {
                    second();
                    system("pause");
                }
                if (chosea == 'b')
                {
                    system("cls");
                    i = 0;
                    firstcmd();

                }
            }
            else if (chose == 2)
            {
                system("cls");
                printf("您获取的鼠标位置为:x=%d, y=%d\n", cursorPos.x, cursorPos.y);
                thread(); // 点击结束后没有退出判断
            }
            else if (chose == 3)
            {
                return ;
            }
            else
            {
                i = 0;
                system("cls");
                firstcmd();
                printf("输入有错误请重新输入\n");
            }

        }
    }
}

// 设置窗口大小,主函数
int main() 
{
    setWindowsSize("连点器", 30, 15);  // 名字,x,y
    firstcmd();
    Chosecmd();
    return 0;
}

微信公众号:猫蛋儿安全

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值