Logitech G-Hub Lua脚本能否监听多事件?实现G4释放即终止执行
Logitech G-Hub Lua脚本:G4释放时终止执行流程
我有一个可在Logitech G-Hub上运行的Lua脚本,当前逻辑是G4按键按下时执行一系列操作,代码如下:
function OnEvent(event, arg) if (event == "G_PRESSED" and arg == 4) then PressKey("s") Sleep(200) PressKey("lctrl") Sleep(300) -- 更多后续操作 end end
我需要实现G4按键被释放时立即终止整个脚本的执行流程,曾尝试在每个步骤后判断事件,但这种写法无法生效:
function OnEvent(event, arg) if (event == "G_PRESSED" and arg == 4) then PressKey("s") if (event == "G_RELEASED" and arg == 4) then return end Sleep(200) if (event == "G_RELEASED" and arg == 4) then return end PressKey("lctrl") if (event == "G_RELEASED" and arg == 4) then return end Sleep(300) if (event == "G_RELEASED" and arg == 4) then return end end end
请问如何实现G4释放时立即终止后续命令执行?
可以实现,核心思路是用全局变量标记G4的释放状态,并在执行流程的每个环节(包括等待过程中)检查这个状态,一旦检测到释放就终止流程。
具体实现步骤:
- 定义全局变量记录G4是否被释放
- 在
OnEvent中处理G_RELEASED事件,更新全局变量 - 自定义一个带释放检查的休眠函数,替代原生
Sleep,避免长时间休眠无法响应释放事件 - 在执行流程的每一步操作后,检查全局变量,若已释放则终止并清理按键状态
完整代码示例:
-- 全局变量:标记G4是否被释放 local g4_released = false function OnEvent(event, arg) -- 处理G4释放事件,更新标记并清理按键 if event == "G_RELEASED" and arg == 4 then g4_released = true ReleaseKey("s") ReleaseKey("lctrl") return end -- 处理G4按下事件 if event == "G_PRESSED" and arg == 4 then -- 重置释放标记 g4_released = false -- 执行第一步操作 PressKey("s") if g4_released then return end SafeSleep(200) if g4_released then return end -- 执行第二步操作 PressKey("lctrl") if g4_released then return end SafeSleep(300) if g4_released then return end -- 后续更多操作,重复上述检查逻辑 -- ... -- 所有操作完成后释放按键 ReleaseKey("s") ReleaseKey("lctrl") end end -- 自定义休眠函数:每隔10ms检查一次G4释放状态 function SafeSleep(duration) local start_time = GetRunningTime() while GetRunningTime() - start_time < duration do if g4_released then return end Sleep(10) end end
关键说明:
- 全局变量
g4_released在G4按下时重置为false,释放时设为true SafeSleep函数通过短间隔休眠+状态检查,确保在等待过程中能及时响应G4释放事件- 每一步操作后都检查
g4_released,一旦为true立即终止流程,同时在G_RELEASED事件中主动清理按住的按键,避免按键卡住
内容的提问来源于stack exchange,提问作者John Lexus
相关产品推荐
相关产品推荐

