如何用自定义breakout函数终止AutoHotkey热键?
解决方法
因为函数内部的return只会退出函数本身,没法终止热键的执行流程,所以可以用以下两种方式实现你的需求:
方法一:返回判断结果,在热键中终止执行
把breakout()改成返回布尔值的函数,热键调用后根据返回值决定是否return终止热键:
f::{ send "a" sleep 1000 ; 调用breakout,判断是否需要终止热键 if (breakout("f")) { return } send "a" sleep 1000 } breakout(var){ ; 返回判断结果:如果之前的按键不是目标热键且不为空,返回true return (A_PriorKey != var && A_PriorKey != "") }
这个方法逻辑直观,只需要把判断逻辑封装到函数里,热键中只做简单的判断和终止操作。
方法二:抛出异常中断执行
如果不想在热键里写if判断,可以在breakout()中抛出异常,通过异常中断热键的执行流程:
f::{ try { send "a" sleep 1000 breakout("f") ; 满足条件时抛出异常,直接终止try块内的后续代码 send "a" sleep 1000 } catch { ; 捕获异常,无需额外操作,热键执行到此结束 } } breakout(var){ if (A_PriorKey != var && A_PriorKey != ""){ throw "TerminateHotkey" ; 抛出异常中断执行 } }
这种方式把终止逻辑完全封装在函数里,热键代码更简洁,但需要用try/catch捕获异常。
内容的提问来源于stack exchange,提问作者kite
相关产品推荐
相关产品推荐

