AutoHotKey:逐步将光标移动到位置

时间:2017-11-06 13:09:59

标签: autohotkey mousemove

我一直在打破这个问题: 我需要一步一步地将光标从当前位置移动到新位置,而不是通过MouseMove,因为它太快(即使最低速度为100)并且平滑(不够随机)。

我来的最远的是这个,但我认为必须有一个更好的方法:

desX = 100 ;new position X
desY = 100 ;new position Y
MouseGetPos, posX, posY
stepX = %desX% - %posX%
stepY = %desY% - %posY%
if(stepX > 0 & stepY > 0)
{
    while(posX < desX & posY < desY)
    {
        Random, randX, -1, 1
        posX := posX + randX
        posX++

        Random, randY, -1, 1
        posY := posY + randY
        posY++

        MouseMove, posX, posY, 100


        MouseGetPos, posX, posY
    }
}

这需要为每个可能的方向提供大量代码(例如NW,SW,NE,N)。

1 个答案:

答案 0 :(得分:1)

我建议编写一个单独的函数,使多个鼠标移动适合起点和终点。

实施例

gradual_mousemove(end_x,end_y,time=1000,delay=10) {
    ;preserve settings
    original_coordmode := A_CoordModeMouse

    CoordMode, Mouse, Screen
    MouseGetPos, start_x, start_y

    ;compute deltas
    dx := end_x - start_x
    dy := end_y - start_y

    ;delay ms per step
    step_t := time / delay

    original_mousedelay:=A_MouseDelay 
    SetMouseDelay, 0

    loop % step_t
    {
        p := (A_index/step_t)
        step_x := start_x + (p*dx)
        step_y := start_y + (p*dy)
        Click, %step_x%, %step_y%, 0 ;move without clicking

        sleep, %delay%

        ;debug info
        ;ToolTip X: %step_x%  Y: %step_y%  P: %p%  D: %delay%  T: %time%   S: %A_Index% / %step_t%

        MouseGetPos, mx, my
        if ( (mx==end_x) && (my==end_y) )
            break
    }

    ;ensure correct end point
    Click, %end_x%, %end_y%, 0

    ;reset settings
    CoordMode, Mouse, %original_coordmode%
    SetMouseDelay, %original_mousedelay%
}

您可能需要一起玩才能获得所需的正确速度和时间。这只是一个线性增量示例,您可以将其更改为使用对数模型或不使用。