当前位置: 代码迷 >> VB Dotnet >> 遇到一个有关问题~关于操作鼠标带轨迹移动的
  详细解决方案

遇到一个有关问题~关于操作鼠标带轨迹移动的

热度:356   发布时间:2016-04-25 01:58:30.0
遇到一个问题~关于操作鼠标带轨迹移动的!
懒得费脑子写东西,就从按键论坛抄了个代码

但是下面的代码无论如何都无法准确移动到屏幕坐标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 之一到达目标坐标后就在这个方向不再移到,等两个方向一起到达目标坐标后就整体结束。
  相关解决方案