Autohotkey按键无法终止循环(全局变量写入问题)
解决AutoHotkey循环无法通过全局变量终止的问题
你的问题根源是AutoHotkey v2的函数(包括热键代码块)默认使用局部变量——即便你在全局作用域声明了checkbit,热键函数内部如果不明确指定使用全局变量,会自动创建同名局部变量,导致全局的checkbit根本没被修改或读取。
修正方法很简单,在每个热键的代码块开头,声明要使用全局的checkbit变量:
global checkbit := 0 ^F1::{ global checkbit checkbit := 0 Loop { Send "{Enter}" Sleep 1000 if (checkbit = 1) { msgbox "exiting loop" break } } return } ^F2::{ global checkbit msgbox "exiting" checkbit := 1 return }
关键修改说明
- 在
^F1和^F2的代码块内第一行添加global checkbit,明确告诉函数:这里使用的checkbit是全局作用域的变量,不是局部变量。 - 把条件判断改成
if (checkbit = 1)(加括号是AHK v2推荐的表达式写法,逻辑更清晰)。
这样修改后,按下^F2时会正确修改全局的checkbit值,^F1里的循环就能检测到这个变化并终止。
内容的提问来源于stack exchange,提问作者Altron Lee
相关产品推荐
相关产品推荐

