懒得费脑子写东西,就从按键论坛抄了个代码
但是下面的代码无论如何都无法准确移动到屏幕坐标100,100
熟悉的给看看到底啥地方问题!
Sub GoTMouse(x1, y1)
x1 = 100 : y1 = 100 '这里是临时测试移动到的屏幕坐标
Dim x = MousePosition.X, Y = MousePosition.Y
Dim 移动偏差x, 移动偏差y, 移动延时
Dim cs
Randomize()
If Math.Abs(x - x1) > Math.Abs(Y - y1) Then
cs = Math.Abs(x - x1)
Else
cs = Math.Abs(Y - y1)
End If
Dim 轨迹x = (x1 - x) / cs, 轨迹y = (y1 - Y) / cs
Dim 移动次数 = 0, 随机次数 = 0, 移动步长 = Int((20 - 16 + 1) * Rnd() + 16)
While x <> x1 And Y <> y1
移动次数 = 移动次数 + 1
x = x + 轨迹x : Y = Y + 轨迹y
If 移动次数 = 移动步长 Then
Randomize()
移动次数 = 0 : 随机次数 = 随机次数 + 1 : 移动步长 = Int((20 - 16 + 1) * Rnd() + 16) : 移动延时 = 2
If 随机次数 = 4 Then
移动偏差x = Int((12 + 12 + 1) * Rnd() - 12) : 移动偏差y = Int((9 + 9 + 1) * Rnd() - 9) : 随机次数 = 0
End If
SetCursorPos(x + 移动偏差x, Y + 移动偏差y)
Threading.Thread.Sleep(移动延时)
ElseIf Math.Abs(x - x1) <= 移动步长 And Math.Abs(Y - y1) <= 移动步长 Then
x = x1 : Y = y1
SetCursorPos(x1, y1)
End If
End While
End Sub
------解决思路----------------------
你凭什么断定x、y是同时到达目标点坐标的?
对 (Math.Abs(x - x1) <= 移动步长) 要优先处理,并且要各自分开处理。
即 x 或 y 之一到达目标坐标后就在这个方向不再移到,等两个方向一起到达目标坐标后就整体结束。