- 初中三年级
- 2220985
- 396
- 0
- 532 朵
- 2506 个
- 334 个
- 480
- 2013-10-27
|
1#
t
T
发表于 2014-10-16 15:13
|
|只看楼主
模拟真实鼠标动作防检测——“老鼠慢慢跑” 有些游戏会检测到鼠标动作.频繁相同的点击很容易让游戏检测到我们使用了按键,这样的情况下,我们需要模拟鼠标移动,让鼠标像真是手动操作一样,慢慢的移动到终点。 论坛里的一位大牛:we似曾相识 曾经开展了"老鼠慢慢跑"的比赛征集帖,收集了各式各样模拟鼠标移动的代码,我们一起来看看~~~
|
内容提要 1点到点模拟鼠标真实移动——直线 2点到点模拟鼠标真实移动——直线+转折 3点到点模拟鼠标真实移动——直线+振幅 4点到点模拟鼠标真实移动——曲线 |
场景 在mspaint画图工具中,让鼠标从点100,100 移动到点800,600 | NO.1-点到点模拟鼠标真实移动——直线
代码1 作者:林家铺子
- x1 = 800 : y1 = 600 //目标点
- x2 = 100 : y2 = 100//起始点
- MoveTo x2,y2
- k = (y2 - y1) / (x2 - x1)
- b = y2 - k * x2
- For x = x2 To x1 Step sgn(x1 - x2)
- //sgn函数为返回表示数字符号的整数。当(x1 - x2)>0时,返回值为1.当(x1 - x2)<0时,返回值为-1.当=0时,返回值为0
- LeftDown 1
- MoveTo x, (k * x + b)
- LeftUp 1
- Delay 1
- Next
复制代码 | 运行效果:- 您所在的用户组无法下载或查看附件
代码2 作者:_雪狼
- Call 鼠标慢慢跑(100,100,800,600,5)
- Sub 鼠标慢慢跑(x1, y1, x2, y2,time1)
- Dim a, x, y, i
- x = x1 : y = y1
- a = x2 / y2
- MoveTo x1, y1
- For i = y To y2-1
- y = y + 1
- x = y * a
- LeftDown 1
- MoveTo x, y
- LeftUp 1
- Delay time1
- Next
- End Sub
复制代码 | 运行效果:- 您所在的用户组无法下载或查看附件
代码3-变速 作者:playandhappy
- //点到点直线移动,鼠标移动速度开始快后来越来越慢
- Call 老鼠慢慢跑(100,100,800,600,100)
- Sub 老鼠慢慢跑(x1,y1,x2,y2,times)
- MoveTo x1,y1
- While abs(x1-x2)>5 or abs(y1-y2)>5
- GetCursorPos x1, y1
- LeftDown 1
- MoveR (x2 - x1) / 4, (y2 - y1) / 4
- LeftUp 1
- Delay times
- Wend
- LeftDown 1
- MoveTo x2, y2
- LeftUp 1
- End Sub
复制代码 | 运行效果:
- 您所在的用户组无法下载或查看附件
代码4-移动次数 作者:fuyong198010222
- //点到点直线移动,并且可以设置移动几次到达目标地点
- Dim a, b, c, d ,n,t //起点(100,100),终点(800,600)
- a = 100 : b = 100 : c = 800 : d = 600
- //匀速直线移动
- UserVar n=100 "多少次移动到位"
- UserVar t=50 "每一次移动相隔多少时间"
- Call 老鼠慢慢跑()
- Sub 老鼠慢慢跑
- MoveTo a, b
- Delay t
- For n
- x = (c - a) / n : y = (d - b) / n
- LeftDown 1
- MoveR x, y
- LeftUp 1
- Delay t
- Next
- End Sub
复制代码 | 运行效果:- 您所在的用户组无法下载或查看附件
代码5-移动间隔 作者:xuyuzui
- MoveTo 100,100
- Call 老鼠慢慢跑(800, 600, 5, 50)
- Sub 老鼠慢慢跑(x, y, mousestep, mouseDelay)
- 'x,y : 移动终点坐标 ' mousestep: 移动间距 'mouseDelay : 移动时间间隔(ms)
-
- Dim Xstep, Ystep
- Dim curx, cury, PianYiX, PianYiY
- GetCursorPos curx, cury
- If abs(curx - x) < mousestep And abs(cury - y) < mousestep Then
- LeftDown 1
- MoveTo x, y
- LeftUp 1
- Exit Sub
- End If
- Xstep = (x - curx) / mousestep
- Ystep = (y - cury) / mousestep
- If abs(Xstep) > abs(Ystep) Then
- PianYiX = mousestep * sgn(Xstep)
- PianYiY = (y - cury) / abs(Xstep)
- Else
- PianYiX = (x - curx) / abs(Ystep)
- PianYiY = mousestep * sgn(Ystep)
- End If
- LeftDown 1
- MoveR PianYiX, PianYiY
- LeftUp 1
- Delay mouseDelay
- Call 老鼠慢慢跑(x, y, mousestep, mouseDelay)
- End Sub
复制代码 | 运行效果:- 您所在的用户组无法下载或查看附件
|
NO.2-点到点模拟鼠标真实移动——直线+转折
代码1 作者:VBS技术者
- //tD几毫秒移动一点
- call 鼠标慢慢跑(100,100,800,600,5)
- Sub 鼠标慢慢跑(X1,Y1,X2,Y2,tD)
- Dim xl,yl,xc,yc,endx,endy,sx,sy
- Dim FORC,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
- If clng(X1)>=clng(X2) Then
- EndX = X1
- xc = -1
- End If
- If clng(Y1)>=clng(Y2) Then
- EndY = Y1
- yc = -1
- End If
- If xl>yl Then
- FORC = xl
- Else
- FORC = yl
- End If
- For i = 1 To FORC+1
- LeftDown 1
- MoveTo sx, sy
- LeftUp 1
- Delay clng(tD)
- sx = sx + xc
- sy = sy + yc
- If sx=endx Then
- xc = 0
- End If
- If sy=endy Then
- yc=0
- End If
- Next
- End Sub
复制代码 |
运行效果:
- 您所在的用户组无法下载或查看附件
代码2 作者:dinwidi
- //点到点直线移动,先走x轴横坐标直线,然后转折走y轴纵坐标直线,直至终点 (这是游戏里常用的单步移动的原理)
- Call 老鼠慢慢跑(100,100,800,600,5)
- Sub 老鼠慢慢跑(x1, y1, x2, y2, t)
- MoveTo x1,y1
-
- i = 0
- For abs(x1 - x2)
- LeftDown 1
- MoveTo x1+(x2-x1)/abs(x2-x1)*i,y1
- Delay t
- LeftUp 1
- i = i + 1
- Next
- i = 0
- For abs(y1 - y2)+1
- LeftDown 1
- MoveTo x2, y1 + (y2 - y1) / abs(y2 - y1) * i
- LeftUp 1
- Delay t
- i = i + 1
- Next
- End Sub
复制代码 |
运行效果:
- 您所在的用户组无法下载或查看附件
| NO.3-点到点模拟鼠标真实移动——直线+振动
代码 作者:lucky619486332
- //点到点直线移动,移动中鼠标轻微震动
- Call 老鼠慢慢跑(100,100,800,600,50)
- Sub 老鼠慢慢跑(x1, y1, x2, y2, t)
- MoveTo x1,y1
- While x2 - x1 <> 0 and y2 - y1 <> 0
- d1 = x2 - x1 : d2 = y2 - y1
- If abs(d1) >= abs(d2) Then
- xt = int(abs(d1 / d2))
- For xt
- LeftDown 1
- MoveR d1 / abs(d1), 0
- LeftUp 1
- Delay t
- Next
- LeftDown 1
- MoveR 0, d2 / abs(d2)
- LeftUp 1
- Delay t
- Else
- yt=int(abs(d2 / d1))
- For yt
- LeftDown 1
- MoveR 0, d2 / abs(d2)
- LeftUp 1
- Delay t
- Next
- LeftDown 1
- MoveR d1 / abs(d1), 0
- LeftUp 1
- Delay t
- End If
- GetCursorPos x1, y1
- Wend
- End Sub
复制代码 | 运行效果:
- 您所在的用户组无法下载或查看附件
| NO.4-点到点模拟鼠标真实移动——曲线
代码 作者:xxx_mail
- Sub 鼠标慢慢跑(x1,y1,振幅,周期)
-
- Dim x0,y0,x,y, 距离,q0,q1,r,t,a
- x0 = 100
- y0 = 100
- MoveTo x0,y0
- 距离=sqr((x1-x0)^2+(y1-y0)^2)
- q1 = 角度计算((x1-x0),(y1-y0))
- pi = Atn(1)*8
- a = 距离/pi
- t=周期/pi
- For i=0 To pi step 0.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))
- LeftDown 1
- MoveTo x, y
- LeftUp 1
- Delay t
- Next
- End Sub
- Function 角度计算(x, y)
- If x = 0 Then
- x = 0.0001
- End If
- If x > 0 and y >= 0 Then
- 角度计算 = (Atn(y / x))
- ElseIf x > 0 and y < 0 Then
- 角度计算 = (Atn(y / x))+pi
- ElseIf x < 0 Then
- 角度计算 = (Atn(y / x)) + pi/2
- End If
- End Function
复制代码 | 运行效果:
- 您所在的用户组无法下载或查看附件
| NO.5 为了加强模拟效果,我们可以将上述代码中移动间隔时间、移动距离使用随机数来代替。 | 如果童鞋们对于本帖里的内容有疑问或者建议,欢迎跟帖讨论~~
|