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