只支持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;
}