AutoHotkey双循环按不同间隔发送文本 实现启动立即执行后定时
现有脚本的问题点
- 定时器默认行为:AHK的
SetTimer绑定固定间隔后,会先等一整个间隔周期才第一次执行回调,不会在设置完成的瞬间触发。 - 参数书写错误:原脚本Loop2的间隔值写的是
300500毫秒(折合300.5秒),和需求的30.5秒(对应30500毫秒)偏差极大,哪怕定时器逻辑正常,实际循环间隔也不对。 - 之前尝试
SetTimer, 回调, 0的误区:AHK中给SetTimer传0值的语义是生成一个只执行1次、跑完自动销毁的单次定时器,不是“立刻触发一次后再按固定周期循环”,这也是之前出现“只跑一次就停”的原因。
调整思路
不需要依赖SetTimer的特殊参数实现首次即时执行,只需要在F7切换到启动状态的分支里,先手动调用两个循环的执行逻辑完成首次全量发送,再绑定对应间隔的长期定时器,就能完全匹配预期的运行逻辑。
修正后可直接运行的脚本
#SingleInstance Force Toggle := false ; 初始化循环开关状态 F7:: Toggle := !Toggle if (Toggle) { ; 启动瞬间直接执行一次全量发送 Gosub, Loop1 Gosub, Loop2 ; 按需求绑定两个循环的定时间隔 SetTimer, Loop1, 14500 SetTimer, Loop2, 30500 } else { ; 关闭时直接终止两个定时器 SetTimer, Loop1, "Off" SetTimer, Loop2, "Off" } return F5::Reload Loop1: SendInput .word1{Enter} return Loop2: SendInput .word2{Enter} SendInput .word3{Enter} SendInput .word4{Enter} return
实际运行效果
- 按下F7启动:立刻触发一次Loop1和Loop2的发送动作,4个带回车的单词会一次性发向当前激活窗口
- 启动后:两个定时器独立运行,Loop1每14.5秒发送一次word1,Loop2每30.5秒连续发送3个单词
- 再次按下F7:立刻暂停所有定时发送动作
- 按下F5:直接重载脚本重置所有运行状态
内容的提问来源于stack exchange,提问作者JLChafardet
相关产品推荐
相关产品推荐

