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

Lua鼠标脚本循环失效排查:右键按住后左键触发上滑异常

问题分析与修正方案

你的Lua脚本无法正常工作,核心问题有两个:

  1. 阻塞事件处理:在OnEvent函数内使用repeat...until循环会占用主线程,导致后续的左键按下/松开、Num Lock状态变更等事件无法被响应,脚本会卡在循环里,没法正确检测左键的状态变化。
  2. 未覆盖终止条件:原循环仅判断右键是否松开,没考虑左键松开后需要停止鼠标移动的需求。

修正后的代码

local rmb_held = false
local lmb_held = false

function OnEvent(event, arg)
    -- Num Lock关闭时直接重置状态,停止功能
    if not IsKeyLockOn("numlock") then
        rmb_held = false
        lmb_held = false
        return
    end

    -- 更新右键按下/松开状态
    if event == "MOUSE_BUTTON_PRESSED" and arg == 2 then
        rmb_held = true
    elseif event == "MOUSE_BUTTON_RELEASED" and arg == 2 then
        rmb_held = false
    end

    -- 更新左键按下/松开状态,触发移动循环
    if event == "MOUSE_BUTTON_PRESSED" and arg == 1 then
        lmb_held = true
        MoveMouseUpLoop()
    elseif event == "MOUSE_BUTTON_RELEASED" and arg == 1 then
        lmb_held = false
    end
end

function MoveMouseUpLoop()
    -- 同时满足右键按住、左键按住、Num Lock开启三个条件时,持续移动鼠标
    while rmb_held and lmb_held and IsKeyLockOn("numlock") do
        MoveMouseRelative(0, -10)
        Sleep(10)
    end
end

修正说明

  • 用状态变量rmb_held和lmb_held跟踪鼠标按键状态,避免阻塞主事件处理线程,确保所有按键事件都能被正常响应。
  • 将鼠标移动逻辑拆分到独立的MoveMouseUpLoop函数中,循环内同时检查所有终止条件(右键松开、左键松开、Num Lock关闭),满足任一条件立即停止移动。
  • 增加Num Lock关闭时的状态重置逻辑,确保功能彻底停用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:20