You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

鼠标宏脚本异常:无法重复循环且松键后不停止

问题描述

需求:按住鼠标左键时,鼠标按指定路径循环移动,松开左键立即停止。
当前问题:

  • 松开左键后,鼠标仍会执行完当前移动循环才停止
  • 按住左键时,只会执行一次移动路径,无法重复循环

演示效果:
鼠标移动演示

当前代码:

EnablePrimaryMouseButtonEvents(true);
function OnEvent(event, arg)
if IsKeyLockOn("numlock" )then


         if IsMouseButtonPressed(1) then
         
                Sleep(50)
                MoveMouseRelative(0, 1)
                Sleep(100)
                MoveMouseRelative(0, 16)
                Sleep(100)
                MoveMouseRelative(0, 26)
                Sleep(100)
                MoveMouseRelative(-2, 25)
                Sleep(100)
                MoveMouseRelative(10, 28)
                Sleep(100)
                MoveMouseRelative(8, 25)
                Sleep(100)
                MoveMouseRelative(10, 15)
                Sleep(100)
                MoveMouseRelative(-14, 15)
                Sleep(100)
                MoveMouseRelative(-34, -1)
                Sleep(100)
                MoveMouseRelative(-18, 0)
                Sleep(100)
                MoveMouseRelative(10, 10)
                Sleep(100)
                MoveMouseRelative(-13, 5)
                Sleep(100)
                MoveMouseRelative(-20, -5)
                Sleep(100)
       
          end
  coroutine.resume(cor)
  repeat
     Sleep(100)
     coroutine.resume(cor)
  until not IsMouseButtonPressed(1)
        end
    end
修复后的代码
EnablePrimaryMouseButtonEvents(true);

function OnEvent(event, arg)
    -- 仅在NumLock开启时生效
    if not IsKeyLockOn("numlock") then return end

    -- 监听鼠标左键按下事件
    if event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
        -- 循环执行移动路径,直到左键松开
        while IsMouseButtonPressed(1) do
            -- 执行指定移动路径
            Sleep(50)
            MoveMouseRelative(0, 1)
            Sleep(100)
            MoveMouseRelative(0, 16)
            Sleep(100)
            MoveMouseRelative(0, 26)
            Sleep(100)
            MoveMouseRelative(-2, 25)
            Sleep(100)
            MoveMouseRelative(10, 28)
            Sleep(100)
            MoveMouseRelative(8, 25)
            Sleep(100)
            MoveMouseRelative(10, 15)
            Sleep(100)
            MoveMouseRelative(-14, 15)
            Sleep(100)
            MoveMouseRelative(-34, -1)
            Sleep(100)
            MoveMouseRelative(-18, 0)
            Sleep(100)
            MoveMouseRelative(10, 10)
            Sleep(100)
            MoveMouseRelative(-13, 5)
            Sleep(100)
            MoveMouseRelative(-20, -5)
            Sleep(100)
            
            -- 如需切换方向循环,在此添加反向移动路径
            -- 示例反向步骤(可按需调整):
            -- Sleep(100)
            -- MoveMouseRelative(20, 5)
            -- ... 其他反向移动代码
        end
    end
end
修复说明
  1. 解决松开左键不停止问题:
    原代码一次性执行完所有移动步骤,未中途检查按键状态。修改后将移动逻辑放入while IsMouseButtonPressed(1)循环,每轮循环都会验证左键是否仍被按住,松开后立即终止。
  2. 解决按住左键不循环问题:
    原代码仅触发一次移动路径,通过while循环实现按住左键时重复执行路径,直到按键松开。
  3. 简化冗余逻辑:
    移除了未正确初始化的协程代码,直接通过事件监听+循环实现需求,逻辑更清晰。
  4. 方向切换扩展:
    若需要切换方向循环,可在每轮移动路径结束后添加反向移动步骤,同样包裹在while循环内即可。

内容的提问来源于stack exchange,提问作者user18953534

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:23:17