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

Logitech G Hub Lua脚本:G1键循环切换功能实现遇阻求助

问题分析与解决方案

你的代码无法中断循环的核心原因是:当OnEvent函数进入while循环后,会阻塞整个脚本的事件处理线程——Logitech的Lua脚本是单线程执行的,OnEvent不执行完毕,就无法响应新的G1按键事件,所以你第二次按G1的操作,要等到循环因safety计数到5结束后,才会被处理。

修改后的代码

local msMakro = false
local safety = 0

function OnEvent(event, arg)
    OutputLogMessage("Event: "..event.." Arg: "..arg.."\n")
    
    -- 处理G1按键触发
    if event == "G_PRESSED" and arg == 1 then
        OutputLogMessage("\nG1 Pressed \n")
        msMakro = not msMakro
        OutputLogMessage("msMakro = "..tostring(msMakro).."\n")
        
        -- 启动循环时重置safety计数
        if msMakro then
            safety = 0
        end
    end
      
    -- 循环逻辑:每次迭代都检查msMakro状态,同时处理新事件
    while msMakro and safety < 5 do
        PressAndReleaseKey("a")
        Sleep(math.random(1000, 1500))
        safety = safety + 1
        OutputLogMessage("safety = "..safety.."\n")
        
        -- 关键:处理队列中的事件,让新的G1按键能触发状态反转
        ProcessEvents()
    end
end

关键修改说明

  • 加入ProcessEvents():在循环内部调用这个函数,会让脚本暂时跳出循环,处理队列中等待的事件(比如你第二次按G1的操作),这样msMakro的值会被及时反转,循环条件不满足时就会终止。
  • 重置safety:每次启动循环(msMakro变为true时)重置计数,避免第二次触发循环时,safety已经是5导致循环直接不执行。
  • 简化日志输出:把多个OutputLogMessage合并成一行,让日志更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:21:08