如何检测按键按住时长?AutoHotkey脚本异常问题排查
问题解决:根据按键按住时长执行不同动作
问题根源分析
你的脚本里,按住空格键时,Space::热键会重复触发(这是AutoHotkey默认的按键重复行为),导致StartTime被不断重置为最新的A_TickCount,所以松开时计算的时长只是最后一次触发到松开的间隔,自然总是很小的数值。
另外明确:A_TickCount就是系统启动后经过的毫秒数,文档里的“system”指的就是系统运行时长,这个理解是正确的。
修正后的脚本
要实现需求,需要避免按住按键时重复重置StartTime,可以用KeyWait等待按键松开,在同一个热键流程里完成计时和判断:
#SingleInstance, Force #NoEnv $Space:: StartTime := A_TickCount KeyWait, Space ; 暂停脚本,等待空格键松开 HoldDuration := A_TickCount - StartTime ; 根据时长执行对应动作 if (HoldDuration < 500) { tooltip, 执行foo,按住时长:%HoldDuration%ms ; 此处替换为你的foo动作代码 } else { tooltip, 执行bar,按住时长:%HoldDuration%ms ; 此处替换为你的bar动作代码 } return Esc::ExitApp
关键说明
- 用
$Space::代替Space:::防止脚本自身发送的按键触发热键,确保热键只响应物理按键操作 KeyWait, Space:让脚本暂停直到空格键被松开,这样StartTime只会在按键首次按下时赋值一次,不会被重复覆盖- 松开按键后计算实际按住时长,再通过
if/else逻辑分支执行对应动作
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

