【C++连点器一】梦的开始--控制台程序实现基本功能

开始扒拉新的东西——连点器

老规矩,环境要说清楚:我用的是Visual Studio 2022 C++

相较以前,这次是一个较大(稍微一点大)的系列,预计是两期:

【C++连点器一】梦的开始--控制台程序实现基本功能

【C++连点器二】进阶之路--Easy-X程序实现界面美化

今天是第一期

基本功能:

1.基础的连点功能

2.连点按键的选择,目前是三种【鼠标左键,鼠标中键,鼠标右键】

3.点击间隔的设置 

 设计思路:

头文件:
#include <iostream>//基本操作
#include <Windows.h>//主要会用到按键侦测,模拟鼠标事件,光标控制,标题,窗口设置
#include <conio.h>//也是用于按键侦测

六个函数:

1.void SHCursor(BOOL is_HIDE);//控制光标的显示和隐藏

2.void Welcome();//可有可无

3.void Click();//主要的连点功能【对应功能1】

4.void SetInterval();//设置连点间隔【对应功能3】

5.void OutputList();//可选按键列表的显示【服务于KeyChoose】

6.void KeyChoose();//选择按键【搭配OutputList】【对应功能2】

主要的全局变量:

int ClickInterval = 50;//点击间隔
int KeyDownNum = 1;//控制要点击按键,用法:KeyDownValue[KeyDownNum - 1]

KeyUpValue[KeyDownNum - 1]


HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取实例输出句柄


HWND hwnd = GetForegroundWindow();//获取最前端的窗口


string keych[4] = { ">>","鼠标左键","鼠标中键","鼠标右键" };//服务与OutputList()函数

//两个存放鼠标事件的数组
DWORD KeyDownValue[3] = { MOUSEEVENTF_LEFTDOWN ,MOUSEEVENTF_MIDDLEDOWN,MOUSEEVENTF_RIGHTDOWN };


DWORD KeyUpValue[3] = { MOUSEEVENTF_LEFTUP,MOUSEEVENTF_MIDDLEUP,MOUSEEVENTF_RIGHTUP };

一个关键宏定义:

//用于按键的侦测(按键是否按下) 返回true或false

#define KEY_DOWN(VK_Key) ((GetAsyncKeyState(VK_Key) & 0x8000) ? 1:0)

函数实现:

 1.void SHCursor(BOOL is_HIDE);//控制光标的显示和隐藏
//控制光标隐藏和显示
void SHCursor(BOOL is_HIDE)//这里传入一个布偶参数,控制显示和隐藏
{
	CONSOLE_CURSOR_INFO CursorInfo;//光标有关的变量
	GetConsoleCursorInfo(hOut, &CursorInfo);//获取光标的信息
	CursorInfo.bVisible = is_HIDE;//更改光标的隐藏和显示
	SetConsoleCursorInfo(hOut, &CursorInfo);//设置光标的隐藏和显示
}
 2.void Welcome();//可有可无
//可有可无的欢迎函数,不予注释
void Welcome()
{
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
	cout << "\n\n\n\t\t";
	string welcome[9] = { "欢", "迎", "使", "用\n\t\t", "菜", "鸟", "连", "点", "器" };
	for (int i = 0; i < 9; i++)
	{
		cout << welcome[i];
		Sleep(250);
	}
	cout << endl;
	Sleep(250);
}
 3.void Click();//主要的连点功能【对应功能1】
//主要连点功能
void Click()
{
	SHCursor(FALSE);
	system("cls");
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);//设置字体颜色
    /*SetConsoleTextAttribute()函数和system("color 0a")不同,
    这个函数可以进行单独的字体颜色、背景设置
    */
	cout << "\t...菜鸟连点器..." << endl;
	cout << endl;
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
	cout << "当前点击间隔:" << ClickInterval << "ms" << endl << "当前点击模式:" << keych[KeyDownNum] << endl << endl;
	cout << "操作:\n1.按下[Alt]键后启动连点器,松开后关闭\n2.按下[ctrl]键设置连点间隔(间隔默认为50ms/次)\n3.按下[M]键设置连点模式" << endl;
	SetConsoleTitle(L"菜鸟连点器[未启动]");
	while (1)
	{
		while (KEY_DOWN(18))
		{
			SetConsoleTitle(L"菜鸟连点器[已启动]");
			Sleep(ClickInterval - 1);
			mouse_event(KeyDownValue[KeyDownNum - 1], 0, 0, 0, 0);
			mouse_event(KeyUpValue[KeyDownNum - 1], 0, 0, 0, 0);
		}
		if (KEY_DOWN(17))
		{
			SetInterval();
		}
		if (KEY_DOWN(77))
		{
			KeyChoose();
		}
		SetConsoleTitle(L"菜鸟连点器[未启动]");
		Sleep(1);//不放这个你试试...
	}
}
4.void SetInterval();//设置连点间隔【对应功能3】
//没有能注释的地方,都是很常规的操作
void SetInterval()
{
	system("cls");
	SHCursor(TRUE);
	int set;
	cout << "设置点击间隔(输入后按下回车键确认)" << endl;
	cout << "输入点击间隔(毫秒)(1s = 1000ms):";
	cin >> set;
	ClickInterval = set;
	if (ClickInterval <= 0)
	{
		MessageBox(hwnd, L"间隔必须大于零", L"ERROR", MB_OK | MB_SETFOREGROUND | MB_ICONERROR | MB_SYSTEMMODAL);
		return SetInterval();
	}
	else
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cout << "\t(:设置完成!!!!!" << endl;
	}
	Sleep(100);
	Click();
}
 5.void OutputList();//可选按键列表的显示【服务于KeyChoose】
//按键列表显示
void OutputList()
{
	system("cls");
	cout << "\t使用按键[1][2][3]选择连点模式" << endl;
	cout << "\t使用按键[Enter]确认设置" << endl;
	if (KeyDownNum == 1)
	{
		cout << "\t" << keych[0] << keych[1] << endl;
		cout << "\t" << "  " << keych[2] << endl;
		cout << "\t" << "  " << keych[3] << endl;
	}
	else if (KeyDownNum == 2)
	{
		cout << "\t" << "  " << keych[1] << endl;
		cout << "\t" << keych[0] << keych[2] << endl;
		cout << "\t" << "  " << keych[3] << endl;
	}
	else if (KeyDownNum == 3)
	{
		cout << "\t" << "  " << keych[1] << endl;
		cout << "\t" << "  " << keych[2] << endl;
		cout << "\t" << keych[0] << keych[3] << endl;
	}
}
 6.void KeyChoose();//选择按键【搭配OutputList】【对应功能2】
void KeyChoose()
{
	int ch = 0;
	while (1)
	{
		OutputList();
		ch = _getch();
		if (ch == 49)
		{
			KeyDownNum = 1;//KeyDownNum很重要,关系到KeyDownValue,KeyUpValue的取值,关系到连点的按键
		}
		else if (ch == 50)
		{
			KeyDownNum = 2;
		}
		else if (ch == 51)
		{
			KeyDownNum = 3;
		}
		else if (ch == 13)
		{
			break;
		}
		else return KeyChoose();
	}
	Click();
}

所有代码:

#include <iostream>
#include <Windows.h>
#include <conio.h>
#define KEY_DOWN(VK_Key) ((GetAsyncKeyState(VK_Key) & 0x8000) ? 1:0)

using namespace std;

int ClickInterval = 50;
int KeyDownNum = 1;

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
HWND hwnd = GetForegroundWindow();

string keych[4] = { ">>","鼠标左键","鼠标中键","鼠标右键" };
DWORD KeyDownValue[3] = { MOUSEEVENTF_LEFTDOWN ,MOUSEEVENTF_MIDDLEDOWN,MOUSEEVENTF_RIGHTDOWN };
DWORD KeyUpValue[3] = { MOUSEEVENTF_LEFTUP,MOUSEEVENTF_MIDDLEUP,MOUSEEVENTF_RIGHTUP };

void SHCursor(BOOL is_HIDE);
void Welcome();
void OutputList();
void KeyChoose();
void SetInterval();
void Click();

int main() {
	SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 400, 250, SWP_NOMOVE);
	SetConsoleTitle(L"菜鸟连点器[未启动]");
    //窗口风格设置
	HWND Con = FindWindow(L"ConsoleWindowClass", NULL);
	int GWStyle = (int)GetWindowLong(Con, GWL_STYLE);
	SetWindowLong(Con, GWL_STYLE, GWStyle & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);

	Welcome();
	Click();
	return 0;
}

void SHCursor(BOOL is_HIDE)
{
	CONSOLE_CURSOR_INFO CursorInfo;
	GetConsoleCursorInfo(hOut, &CursorInfo);
	CursorInfo.bVisible = is_HIDE;
	SetConsoleCursorInfo(hOut, &CursorInfo);
}

void Welcome()
{
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
	cout << "\n\n\n\t\t";
	string welcome[9] = { "欢", "迎", "使", "用\n\t\t", "菜", "鸟", "连", "点", "器" };
	for (int i = 0; i < 9; i++)
	{
		cout << welcome[i];
		Sleep(250);
	}
	cout << endl;
	Sleep(250);
}

void Click()
{
	SHCursor(FALSE);
	system("cls");
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
	cout << "\t...菜鸟连点器..." << endl;
	cout << endl;
	SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
	cout << "当前点击间隔:" << ClickInterval << "ms" << endl << "当前点击模式:" << keych[KeyDownNum] << endl << endl;
	cout << "操作:\n1.按下[Alt]键后启动连点器,松开后关闭\n2.按下[ctrl]键设置连点间隔(间隔默认为50ms/次)\n3.按下[M]键设置连点模式" << endl;
	SetConsoleTitle(L"菜鸟连点器[未启动]");
	while (1)
	{
		while (KEY_DOWN(18))
		{
			SetConsoleTitle(L"菜鸟连点器[已启动]");
			Sleep(ClickInterval - 1);
			mouse_event(KeyDownValue[KeyDownNum - 1], 0, 0, 0, 0);
			mouse_event(KeyUpValue[KeyDownNum - 1], 0, 0, 0, 0);
		}
		if (KEY_DOWN(17))
		{
			SetInterval();
		}
		if (KEY_DOWN(77))
		{
			KeyChoose();
		}
		SetConsoleTitle(L"菜鸟连点器[未启动]");
		Sleep(1);
	}
}

void OutputList()
{
	system("cls");
	cout << "\t使用按键[1][2][3]选择连点模式" << endl;
	cout << "\t使用按键[Enter]确认设置" << endl;
	if (KeyDownNum == 1)
	{
		cout << "\t" << keych[0] << keych[1] << endl;
		cout << "\t" << "  " << keych[2] << endl;
		cout << "\t" << "  " << keych[3] << endl;
	}
	else if (KeyDownNum == 2)
	{
		cout << "\t" << "  " << keych[1] << endl;
		cout << "\t" << keych[0] << keych[2] << endl;
		cout << "\t" << "  " << keych[3] << endl;
	}
	else if (KeyDownNum == 3)
	{
		cout << "\t" << "  " << keych[1] << endl;
		cout << "\t" << "  " << keych[2] << endl;
		cout << "\t" << keych[0] << keych[3] << endl;
	}
}

void KeyChoose()
{
	int ch = 0;
	while (1)
	{
		OutputList();
		ch = _getch();
		if (ch == 49)
		{
			KeyDownNum = 1;
		}
		else if (ch == 50)
		{
			KeyDownNum = 2;
		}
		else if (ch == 51)
		{
			KeyDownNum = 3;
		}
		else if (ch == 13)
		{
			break;
		}
		else return KeyChoose();
	}
	Click();
}

void SetInterval()
{
	system("cls");
	SHCursor(TRUE);
	int set;
	cout << "设置点击间隔(输入后按下回车键确认)" << endl;
	cout << "输入点击间隔(毫秒)(1s = 1000ms):";
	cin >> set;
	ClickInterval = set;
	if (ClickInterval <= 0)
	{
		MessageBox(hwnd, L"间隔必须大于零", L"ERROR", MB_OK | MB_SETFOREGROUND | MB_ICONERROR | MB_SYSTEMMODAL);
		return SetInterval();
	}
	else
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
		cout << "\t(:设置完成!!!!!" << endl;
	}
	Sleep(100);
	Click();
}

结束,未完待续...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值