; 以下3个头参数均为必要:脚本全速运行、鼠标移动延时为0、鼠标全屏坐标系
SetBatchLines -1
SetMouseDelay 0
CoordMode Mouse

匀速移动鼠标(A_ScreenWidth / 2, A_ScreenHeight / 2, 10)

ExitApp

Esc::ExitApp

; 匀速移动鼠标(startX, startY, x, y, speed:=4) {  ; 【自行设定初始坐标】speed越小,移动越慢
匀速移动鼠标(x, y, speed:=4) {  ; speed越大越快
  MouseGetPos, startX, startY

  ; 计算移动距离和时间
  Random, 随机移动次数CPI, 15, 30  ; 随机移动次数应该与移动距离相匹配为最佳
  distance := Round(Sqrt((x - startX) ** 2 + (y - startY) ** 2))
  , duration := Round(distance / speed)
  , steps := Min(随机移动次数CPI, distance)
  ; stepSize := distance / steps

  ; 移动鼠标
  Loop %steps% {
    fraction := A_Index / steps
    , currentX := Round(startX + (x - startX) * fraction)
    , currentY := Round(startY + (y - startY) * fraction)
    MouseMove, currentX, currentY, 0
    DllCall("Sleep", "UInt", Round(duration / steps))  ; 精度更高,但阻塞线程
  }

  ; 确保最后一步到达目标位置
  MouseMove, x, y, 0
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。