C++用API实现鼠标带轨迹移动

void Contra(int dual_X,int dual_Y); //带轨迹移动鼠标

int More(int mini,int maxi); //生成随机数


int More(int mini,int maxi) //生成随机数函数
{
        //参数:1.区间最小值;2.区间最大值

	srand((unsigned)time(NULL)); //初始化随机数种子
	int impo=mini+rand()%(maxi-mini+1);

	return impo;

}


void Contra(int dual_X,int dual_Y) //有轨迹移动鼠标
{

        //参数:1.目的地X坐标 2.目的地Y坐标

	double goverX=0,goverY=0; //轨迹X,Y
	double factuX=1,factuY=1; //当前鼠标坐标
	double problem_X=double(dual_X),problem_Y=double(dual_Y); //目的地坐标
	double used=0;
	int always=0;//移动次数
	int Priya=0; //随机次数
	int Shah=More(16,20); //移动步长
	int own=1; //移动延时
	int ShahX=0,ShahY=0; //移动偏差X,移动偏差Y
	
	CString Kara;


	POINT Paid; //声明一个结构存放鼠标当前X Y坐标
	GetCursorPos(&Paid); //获取鼠标当前位置

	factuX=double(Paid.x);//把当前鼠标坐标转换成双浮点数
	factuY=double(Paid.y);

	if (abs(factuX-problem_X)>abs(factuY-problem_Y))
	{
		used=abs(factuX-problem_X);
	}
	else
	{
		used=abs(factuY-problem_Y);
	}

	goverX=(problem_X-factuX)/used;  //轨迹X
	goverY=(problem_Y-factuY)/used;  //轨迹Y


	while(factuX!=problem_X || factuY!=problem_Y)
	{

		always++;//移动次数
		factuX=factuX+goverX; //当前X坐标+轨迹X
		factuY=factuY+goverY; //当前Y坐标+轨迹Y

		if (always==Shah) //移动次数==移动步长
		{
			always=0; //移动次数
			Priya++; //随机次数
			Shah=More(16,20); //移动步长
			own=More(3,6); //移动延时

			if (Priya==4)
			{
				//每运行5次就随机产生一个随机偏差轨迹,模拟手动移动轨迹
				ShahX=More(-12,12); //移动偏差X
				ShahY=More(-9,9); //移动偏差Y
				Priya=0; //随机次数

			}

			int metics_X=int(factuX); //把算出来的坐标转换为整数
			int metics_Y=int(factuY);
			
			SetCursorPos(metics_X+ShahX,metics_Y+ShahY); //任意移动鼠标的API也可以是驱动键盘

			Sleep(own); //随机延迟

		}
		

		if (abs(factuX-problem_X)<=Shah && abs(factuY-problem_Y)<=Shah)
		{

			SetCursorPos(dual_X,dual_Y); //移动到终点附近后直接移动到终点
			//任意移动鼠标的API也可以是驱动键盘
                        break;

		}



	}




}

按键精灵版

范例1:

Call 带轨迹鼠标移动(1540,147)

Function 带轨迹鼠标移动(x1,y1)
    GetCursorPos x2, y2
    If x1 <> x2 or y1 <> y2 Then  //<> --为不等于号
        For x = x2 To x1 Step Sgn(x1 - x2)
            MoveTo x, (y1+(y2-y1)*(x-x1)/(x2-x1))
        Next
    End If
End Function

按键精灵Sgn 函数:

描述

返回表示数字符号的整数。
语法

Sgn(number)
number 参数可以是任意有效的数值表达式。

返回值:

gn 函数有如下返回值:

如果 number 为    Sgn 返回

大于零               1
等于零               0
小于零               -1

范例2:

x1 = 17 : y1 = 25
GetCursorPos x, y //鼠标当前x y坐标

If abs(x - x1) > abs(y - y1) Then
cs = abs(x - x1) 
Else
cs = abs(y - y1)
End If

轨迹x = (x1 - x) / cs : 轨迹y = (y1 - y) / cs

Randomize
移动次数 = 0 : 随机次数 = 0 : 移动步长 = Int((20 - 16 + 1) * Rnd + 16)

While x <> x1 Or y <>y1
移动次数 = 移动次数 + 1
x = x + 轨迹x : y = y + 轨迹y

If 移动次数 = 移动步长 Then 
Randomize
移动次数 = 0 : 随机次数 = 随机次数 + 1 : 移动步长 = Int((20 - 16 + 1) * Rnd + 16) : 移动延时 = Int((6 - 3 + 1) * Rnd + 3)


If 随机次数 = 4 Then 


移动偏差x = Int((12 + 12 + 1) * Rnd - 12) : 移动偏差y = Int((9 + 9 + 1) * Rnd - 9) : 随机次数 = 0


End If

MoveTo x + 移动偏差x, y + 移动偏差y

Delay 移动延时
ElseIf abs(x - x1) <= 移动步长 and abs(y - y1) <= 移动步长 Then

MoveTo x1, y1

break


End If
Wend

猜你喜欢

转载自blog.csdn.net/l198738655/article/details/80888077