学习游戏辅助制作:按键精灵模拟鼠标动作防检测
的有关信息介绍如下:有些游戏会检测到鼠标动作.频繁相同的点击很容易让游戏检测到我们使用了按键,这样的情况下,我们需要模拟鼠标移动,让鼠标像真是手动操作一样,慢慢的移动到终点。论坛里的一位大牛:we似曾相识曾经开展了"老鼠慢慢跑"的比赛征集帖,收集了各式各样模拟鼠标移动的代码,我们一起来看看~~~
内容提要
1、点到点模拟鼠标真实移动——直线2、点到点模拟鼠标真实移动——直线+转折3、点到点模拟鼠标真实移动——直线+振幅4、点到点模拟鼠标真实移动——曲线
场景
在mspaint画图工具中,让鼠标从点100,100移动到点800,600
NO.1-点到点模拟鼠标真实移动——直线
代码1作者:林家铺子
x1=800:y1=600//目标点
x2=100:y2=100//起始点
MoveTox2,y2
k=(y2-y1)/(x2-x1)
b=y2-k*x2
Forx=x2Tox1Stepsgn(x1-x2)
//sgn函数为返回表示数字符号的整数。当(x1-x2)>0时,返回值为1.当(x1-x2)<0时,返回值为-1.当=0时,返回值为0
LeftDown1
MoveTox,(k*x+b)
LeftUp1
Delay1
Next
代码2作者:_雪狼
Call鼠标慢慢跑(100,100,800,600,5)
Sub鼠标慢慢跑(x1,y1,x2,y2,time1)
Dima,x,y,i
x=x1:y=y1
a=x2/y2
MoveTox1,y1
Fori=yToy2-1
y=y+1
x=y*a
LeftDown1
MoveTox,y
Delaytime1
Next
EndSub
代码3-变速作者:playandhappy
//点到点直线移动,鼠标移动速度开始快后来越来越慢
Call老鼠慢慢跑(100,100,800,600,100)
Sub老鼠慢慢跑(x1,y1,x2,y2,times)
MoveTox1,y1
Whileabs(x1-x2)>5orabs(y1-y2)>5
GetCursorPosx1,y1
LeftDown1
MoveR(x2-x1)/4,(y2-y1)/4
LeftUp1
Delaytimes
Wend
LeftDown1
MoveTox2,y2
LeftUp1
EndSub
代码4-移动次数作者:fuyong198010222
//点到点直线移动,并且可以设置移动几次到达目标地点
Dima,b,c,d,n,t//起点(100,100),终点(800,600)
a=100:b=100:c=800:d=600
//匀速直线移动
UserVarn=100"多少次移动到位"
UserVart=50"每一次移动相隔多少时间"
Call老鼠慢慢跑()
Sub老鼠慢慢跑
MoveToa,b
Delayt
Forn
x=(c-a)/n:y=(d-b)/n
LeftDown1
MoveRx,y
LeftUp1
Delayt
Next
EndSub
代码5-移动间隔作者:xuyuzui
MoveTo100,100
Call老鼠慢慢跑(800,600,5,50)
Sub老鼠慢慢跑(x,y,mousestep,mouseDelay)
'x,y:移动终点坐标'mousestep:移动间距'mouseDelay:移动时间间隔(ms)
DimXstep,Ystep
Dimcurx,cury,PianYiX,PianYiY
GetCursorPoscurx,cury
Ifabs(curx-x) LeftDown1 MoveTox,y LeftUp1 ExitSub EndIf Xstep=(x-curx)/mousestep Ystep=(y-cury)/mousestep Ifabs(Xstep)>abs(Ystep)Then PianYiX=mousestep*sgn(Xstep) PianYiY=(y-cury)/abs(Xstep) Else PianYiX=(x-curx)/abs(Ystep) PianYiY=mousestep*sgn(Ystep) EndIf LeftDown1 MoveRPianYiX,PianYiY LeftUp1 DelaymouseDelay Call老鼠慢慢跑(x,y,mousestep,mouseDelay) EndSub NO.2-点到点模拟鼠标真实移动——直线+转折 代码1作者:VBS技术者 //tD几毫秒移动一点 call鼠标慢慢跑(100,100,800,600,5) Sub鼠标慢慢跑(X1,Y1,X2,Y2,tD) Dimxl,yl,xc,yc,endx,endy,sx,sy DimFORC,i xl=abs(clng(X1)-clng(X2)) yl=abs(clng(y1)-clng(y2)) EndX=X2 EndY=Y2 XC=1 YC=1 sx=x1 sy=y1 Ifclng(X1)>=clng(X2)Then EndX=X1 xc=-1 EndIf Ifclng(Y1)>=clng(Y2)Then EndY=Y1 yc=-1 EndIf Ifxl>ylThen FORC=xl Else FORC=yl EndIf Fori=1ToFORC+1 LeftDown1 MoveTosx,sy LeftUp1 Delayclng(tD) sx=sx+xc sy=sy+yc Ifsx=endxThen xc=0 EndIf Ifsy=endyThen yc=0 EndIf Next EndSub 代码2作者:dinwidi //点到点直线移动,先走x轴横坐标直线,然后转折走y轴纵坐标直线,直至终点(这是游戏里常用的单步移动的原理) Call老鼠慢慢跑(100,100,800,600,5) Sub老鼠慢慢跑(x1,y1,x2,y2,t) MoveTox1,y1 i=0 Forabs(x1-x2) LeftDown1 MoveTox1+(x2-x1)/abs(x2-x1)*i,y1 Delayt LeftUp1 i=i+1 Next i=0 Forabs(y1-y2)+1 LeftDown1 MoveTox2,y1+(y2-y1)/abs(y2-y1)*i LeftUp1 Delayt i=i+1 Next EndSub NO.3-点到点模拟鼠标真实移动——直线+振动 代码作者:lucky619486332 //点到点直线移动,移动中鼠标轻微震动 Call老鼠慢慢跑(100,100,800,600,50) Sub老鼠慢慢跑(x1,y1,x2,y2,t) MoveTox1,y1 Whilex2-x1<>0andy2-y1<>0 d1=x2-x1:d2=y2-y1 Ifabs(d1)>=abs(d2)Then xt=int(abs(d1/d2)) Forxt LeftDown1 MoveRd1/abs(d1),0 LeftUp1 Delayt Next LeftDown1 MoveR0,d2/abs(d2) LeftUp1 Delayt Else yt=int(abs(d2/d1)) Foryt LeftDown1 MoveR0,d2/abs(d2) LeftUp1 Delayt Next LeftDown1 MoveRd1/abs(d1),0 LeftUp1 Delayt EndIf GetCursorPosx1,y1 Wend EndSub NO.4-点到点模拟鼠标真实移动——曲线 代码作者:xxx_mail Sub鼠标慢慢跑(x1,y1,振幅,周期) Dimx0,y0,x,y,距离,q0,q1,r,t,a x0=100 y0=100 MoveTox0,y0 距离=sqr((x1-x0)^2+(y1-y0)^2) q1=角度计算((x1-x0),(y1-y0)) pi=Atn(1)*8 a=距离/pi t=周期/pi Fori=0Topistep0.001 x=x1-距离+i*a y=y1+振幅*sin(i) q0=角度计算(x-x1,y-y1) r=sqr((x-x1)^2+(y-y1)^2) x=x1+r*Cos((q0+q1)) y=y1+r*Sin((q0+q1)) LeftDown1 MoveTox,y LeftUp1 Delayt Next EndSub Function角度计算(x,y) Ifx=0Then x=0.0001 EndIf Ifx>0andy>=0Then 角度计算=(Atn(y/x)) ElseIfx>0andy<0Then 角度计算=(Atn(y/x))+pi ElseIfx<0Then 角度计算=(Atn(y/x))+pi/2 EndIf EndFunction