Lua鼠标脚本循环失效排查:右键按住后左键触发上滑异常
问题分析与修正方案
你的Lua脚本无法正常工作,核心问题有两个:
- 阻塞事件处理:在
OnEvent函数内使用repeat...until循环会占用主线程,导致后续的左键按下/松开、Num Lock状态变更等事件无法被响应,脚本会卡在循环里,没法正确检测左键的状态变化。 - 未覆盖终止条件:原循环仅判断右键是否松开,没考虑左键松开后需要停止鼠标移动的需求。
修正后的代码
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
相关产品推荐
相关产品推荐

