【C++】一个简单的模拟实现鼠标脚本精灵

主要实现了C++里的GetAsynckeyState(VK_NAME)方法来监控鼠标的操作状态,然后利用GetCursorPos(LPPOINT lp)来获取鼠标位置,最后读取录制的操作数据,进行操作重放;
下载链接:https://download.csdn.net/download/qq_42799236/12562298

使用说明

工具的使用比较简单粗暴,第一次运行请先打开如图(鼠标脚本1.0.exe)文件,会出现下图模式选择界面代表运行成功,如果报错请先运行资源里的(环境配置.bat)文件;
在这里插入图片描述
第二步先进行鼠标操作的录制,输入1按回车确认,即选择模式1.录制脚本:
在这里插入图片描述
出现上图则意味着工具已经开始记录你的鼠标操作并存储,目前暂不支持模拟鼠标拖拽和鼠标右键活动,其它单击或双击操作将被记录:
在这里插入图片描述
如图,当你确定自己鼠标操作结束后,按键盘左上角的ESC键结束录制,工具将统计你的操作数和用时;
录制好了你所需要的操作,下面关闭工具重新打开,并输入2按回车选择执行刚刚录制的脚本;
下一步便是要确认一下你想要执行多少次刚刚的操作,以及每次执行完休息多久,单位为秒,按回车确认:
在这里插入图片描述
注意事项:
①重新录制脚本将覆盖先前录制的脚本,如果要进行备份,请将bin目录里的data.dat文件备份在其它文件夹里,重新录制脚本将生成新的data.dat文件,如果要执行任意备份脚本,只要把它的data.dat文件放回bin目录里;
②工具里的文件夹或者文件都是必要的,大小并不大,如果删除将导致工具运行失败;

C++源码

#include<iostream>
#include<windows.h>
#include<fstream>
#include<time.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;

typedef struct act{//定义存储鼠标操作信息的结构体对象;
long x;
long y;
long t;
}action;

action aa [500]; //定义操作数组;
int count = 0;		//操作计数;
int k=1;		//循环计数
float cost = 0.0;//脚本总耗时
int delay=3
	; //接收脚本延时
int num = 0; //接收脚本次数

void store(){//定义存储操作的方法;
	
	POINT ptB = {0,0};	//获取鼠标坐标;
	LPPOINT xy = &ptB;
	GetCursorPos(xy);
	long x = xy->x;
	long y = xy->y;

	SYSTEMTIME sys;//获取当日经过毫秒数;
	GetLocalTime(&sys);
	long h = sys.wHour*60*60*1000;
	long m = sys.wMinute*60*1000;
	long s = sys.wSecond*1000;
	long ms = sys.wMilliseconds;
	long t =0;
	t = h+m+s+ms;

	struct act temp;//创建操作对象;
	temp.x=x;		//存储鼠标坐标,当日用时;
	temp.y=y;
	temp.t=t;
	if(count == 0){
		aa[count] = temp;
		printf("x=%d,y=%d,t=%d,count=%d 第一次操作存入成功!\n",aa[count].x,aa[count].y,aa[count].t,count);
		count++;
	}
	if((temp.x==aa[count-1].x)&&(temp.t-aa[count-1].t<120)){//过滤同点时间间隔过短的点击
	}
	else {
		aa[count] = temp;
		printf("x=%d,y=%d,t=%d,count=%d 操作存入成功!\n",aa[count].x,aa[count].y,aa[count].t,count);
		count++;//记录最后一次操作时也进行了count++,所以总操作数为count;
	}
}

void out(){//定义数据输出文件方法
	ofstream outfile;
	outfile.open("data.dat",ios::trunc);
	int i ;
	outfile << count <<endl;
	for(i = 0;i<count;i++){
	outfile << aa[i].x << " " <<aa[i].y<< " "<< aa[i].t <<endl; 
	}
	outfile.close();
}
void initial(){
	cout<<"-------------------------------------------------\n";
	cout<<"请输入脚本需要循环的次数:(输入0为无限循环)\n";
	cin>>num;
	cout<<"请输入脚本每次循环后休息时间,(按回车确认,建议不要设置为0)\n";
	cin>>delay;
	printf("配置成功!脚本将循环%d次,每次循环后休息%d秒:\n",num,delay);
	Sleep(1000);
	cout<<"----------------下面开始执行脚本------------------\n";
}

void in(){//定义从文件读取数据方法
	ifstream infile;
	infile.open("data.dat");
	int i;
	infile >> count;
	for(i =0;i<count;i++){
	infile >> aa[i].x;
	infile >> aa[i].y;
	infile >> aa[i].t;
}
	//将每个结构体的t存放休眠时间;
	for(i = 0;i<count;i++){
		if(i==(count-1)){
		aa[i].t=0;
		}else{
		aa[i].t=aa[i+1].t-aa[i].t;
		cost = cost+aa[i].t;
		}
	}
	infile.close();
}

int fun_1(){//录制操作
	while (true){//循环监控鼠标按键情况
if(KEY_DOWN(VK_LBUTTON)){
	//调用存储方法将本次操作进行存档;
	store();
	}
if(KEY_DOWN(VK_ESCAPE)){
	//调用输出方法进行全部操作存为文件;
	out();
	cout<<"-------------------------------------------------\n";
	printf("录制结束!共录制了%d个操作,耗时%d毫秒!\n",count,(aa[count-1].t-aa[0].t));
	printf("如要执行刚刚录制脚本,请重新运行本工具并选择模式2!\n");
	return 0;
	}
Sleep(20);//循环时间间隔,防止太占内存
	}
}

int fun_2(){//执行操作
	int i;
	for(i = 0;i<count;i++){
		SetCursorPos(aa[i].x,aa[i].y);
		mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);
		printf("执行第%d步完毕!\n",i+1);
		Sleep(aa[i].t);
		if(KEY_DOWN(VK_ESCAPE)){
			cost=cost*(k-1)+delay*(k-1);
			while(i!=-1){
			cost=cost+aa[i].t;
			i--;
			}
	cout<<"-------------------------------------------------\n";
	printf("脚本提前结束!共执行了%d次脚本,耗时%.3f秒\n",k,cost/1000.0);
	k=0;
	return 0;
	}	
	}
	return 0;
}

void choose(){
	cout << "请选择运行模式:"<< "(输入1或2进行选择,按ENTER回车确认选择)\n"<<"1.录制脚本\n"<<"2.执行脚本\n";
	char ch;
	switch(ch = getchar()){
	case '1':{
			 system("cls");
			 cout<< "您选择录制脚本,下面开始录制鼠标操作:(按ESC结束录制)\n";
			 cout<<"-------------------------------------------------\n";
			 fun_1();
			 break;
			 }
	case '2':{
			 system("cls");
			 cout<< "您选择执行脚本,下面请先进行一些配置.\n";
			 	in();
			initial();
			while(k){
			 fun_2();
			 if(k==0||k==num) break;
			 printf("第%d次循环执行完毕,%d秒后进入下一循环!(提前结束请长按ESC或关闭本窗口)\n",k,delay);
			 k++;
			 Sleep(1000*delay);
			}
			if(num!=0&&k==num){
			cout<<"-------------------------------------------------\n";
			cost=cost*num+delay*1000*(num-1);
			printf("第%d次循环执行完毕,总耗时%.3f秒,脚本停止执行。\n",num,cost/1000.0);
			}
			 }
	}
	system("pause");
}

int main(){
	cout << "欢迎使用,鼠标脚本工具开始运行!\n";
	cout<<"-------------------------------------------------\n";
	choose();
}
【c】是一门编程语言,可以用来实现鼠标脚本精灵鼠标脚本精灵是一种能够模拟操作鼠标的程序,可以帮助用户自动执行一系列鼠标操作,提高工作效率。 通过【c】语言,我们可以编写一个简单模拟鼠标脚本精灵的程序。首先,我们需要了解【c】语言中的鼠标模拟库,如Windows API的一些函数,例如"GetCursorPos"、"SetCursorPos"、"mouse_event"等。这些函数可以帮助我们获取和设置鼠标位置,以及模拟鼠标点击、移动等操作。 接下来,我们可以编写一个简单脚本实现鼠标脚本精灵的功能。我们可以定义一系列的操作步骤,例如移动鼠标到指定位置、点击鼠标左键、双击鼠标右键等。然后,根据自己的需求,将这些操作步骤封装成函数,再通过调用这些函数,实现一连串的鼠标操作。 例如,我们可以编写一个函数"moveAndClick",实现鼠标移动到指定位置并点击操作。这个函数可以调用【c】语言中的函数实现鼠标移动和点击操作,例如使用"SetCursorPos"函数将鼠标移动到指定位置,再使用"mouse_event"函数模拟鼠标点击操作。 通过这样的方式,我们可以逐步编写实现各种鼠标操作的函数,并将它们组合起来,实现一个完整的模拟鼠标脚本精灵。这个程序可以根据用户的需求,自动执行一系列鼠标操作,提高工作效率。 需要注意的是,编写【c】语言的鼠标脚本精灵需要对【c】语言和相关的库函数有一定的了解,同时也需要考虑操作系统的兼容性。因此,在使用【c】语言实现鼠标脚本精灵前,需要对编程语言和相关API进行充分的学习和了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值