罗技G910键盘G5键Lua脚本故障:释放后未执行后续坐标点击
解决罗技G910 G5键连点脚本无法执行收尾操作的问题
问题根源
原脚本的核心错误在于**repeat...until的条件逻辑完全失效**:
- 在
G_PRESSED事件的回调函数中,event和arg的值是固定的,不会随着按键释放自动更新 - 原条件
until "G_RELEASED" and arg ==5中,字符串"G_RELEASED"在Lua里会被判定为true,导致循环永远不会终止,后续的收尾移动点击代码根本没有机会执行 - 若错误修改为
until event == "G_RELEASED" and arg ==5,则这个条件永远无法满足(因为当前事件还是G_PRESSED),会出现连点停不下来的情况
此外,罗技G系列脚本是事件驱动的,不能在G_PRESSED回调里直接等待G_RELEASED事件,必须通过全局变量跟踪按键状态。
修正后的脚本
-- 全局变量:标记G5键是否处于按压状态 local g5IsHeld = false -- 预定义目标坐标,方便后续修改 local pointFirst = { x = 52250, y = 46464 } local pointSecond = { x = 51841, y = 48832 } function OnEvent(event, arg) -- G5键按压且M键处于状态3时触发 if event == "G_PRESSED" and arg == 5 and GetMKeyState("kb") == 3 then g5IsHeld = true -- 第一步:移动到第一个坐标并点击 MoveMouseTo(pointFirst.x, pointFirst.y) Sleep(math.random(25, 40)) PressMouseButton(1) ReleaseMouseButton(1) Sleep(math.random(25, 40)) -- 移动到第二个坐标,准备连点 MoveMouseTo(pointSecond.x, pointSecond.y) Sleep(360) -- 持续连点,直到G5键被释放 while g5IsHeld do PressMouseButton(1) Sleep(math.random(25, 40)) ReleaseMouseButton(1) Sleep(math.random(25, 40)) end -- G5键释放时触发收尾操作 elseif event == "G_RELEASED" and arg == 5 then g5IsHeld = false -- 收尾:移动到第一个坐标并点击 Sleep(math.random(25, 40)) MoveMouseTo(pointFirst.x, pointFirst.y) Sleep(math.random(25, 40)) PressMouseButton(1) ReleaseMouseButton(1) end end
关键修改说明
- 全局状态跟踪:用
g5IsHeld布尔变量替代原脚本的错误条件,精准控制连点循环的启停 - 事件拆分处理:将G5键的按压和释放拆分为两个独立的事件分支,符合罗技脚本的事件驱动逻辑
- 可读性优化:把固定坐标抽成变量,后续调整更便捷
- 循环逻辑修复:用
while g5IsHeld替代repeat...until,确保G5释放时能立即终止连点,执行收尾操作
内容的提问来源于stack exchange,提问作者Todd Harris
相关产品推荐
相关产品推荐

