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

如何在AutoHotKey中用Lua编写按住指定键重复按键序列的宏

AutoHotKey中用Lua实现按住按键重复执行序列并即时停止的宏

以下是符合需求的完整实现,包含按键监听、循环执行和即时停止逻辑:

#Persistent
#Include <Lua>

; 初始化Lua环境
lua := new Lua()
lua.DoString("
    stop_flag := false

    function run_sequence()
        stop_flag := false
        while not stop_flag do
            ; 执行你提供的按键序列,每段后检查停止标记
            PressKey('j')
            Sleep(30)
            ReleaseKey('j')
            Sleep(30)
            if stop_flag then break end

            PressKey('k')
            Sleep(30)
            ReleaseKey('k')
            Sleep(30)
            if stop_flag then break end

            PressKey('s')
            Sleep(20)
            PressKey('k')
            Sleep(30)
            ReleaseKey('k')
            Sleep(20)
            ReleaseKey('s')
            Sleep(30)
            if stop_flag then break end
        end
    end

    function stop_sequence()
        stop_flag := true
    end

    ; 绑定AHK的按键操作到Lua函数
    PressKey := function(key)
        ahk.SendInput('{' .. key .. ' down}')
    end

    ReleaseKey := function(key)
        ahk.SendInput('{' .. key .. ' up}')
    end

    Sleep := function(ms)
        ahk.Sleep(ms)
    end
")

; 按住v键时启动序列循环
v::
    lua.DoString("run_sequence()")
return

; 松开v键时立即停止序列
~v Up::
    lua.DoString("stop_sequence()")
return

关键说明

  • #Persistent:保持脚本后台运行,避免执行后自动退出
  • stop_flag:核心控制变量,松开按键时设为true,循环中每段操作后检查该变量,确保即时停止
  • 每段按键操作后添加if stop_flag then break end:保证松开按键后不会等待当前序列完成,直接终止循环
  • ~v Up中的~:保留v键本身的输入功能,若不需要v键原功能,去掉~即可
  • PressKey/ReleaseKey:封装AHK的SendInput,实现按键的按下与释放

新手注意事项

  1. 确保你使用的AutoHotKey版本支持Lua,推荐使用AutoHotkey_H v2,它内置Lua绑定
  2. 测试时可暂时调大Sleep的数值,方便观察停止逻辑是否生效
  3. 若按键序列执行异常,检查按键名称是否正确(比如大小写、特殊键的写法)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:32:55