Autohotkey热键块调用全局变量为空,如何正确声明跨块全局变量?
问题根因
AutoHotkey 中 #If 是热键触发条件伪指令,仅对块内包裹的热键/热字符串生效,块内不属于热键的代码不会在脚本启动时自动执行,你写在#If块内的变量赋值语句从未被运行,因此热键中读取变量值为空。
正确声明多热键共享全局变量的方法
全局变量的初始化需要放在脚本自动执行段,也就是脚本最顶部、所有热键/标签之前的位置,不需要嵌套在#If块内。
修改后的可运行代码如下:
; 自动执行段:脚本启动时优先运行,在此处初始化全局变量 allActsRowY := 76 act1X := 249 allTownsY := 133 allTownsX := 245 clickDelay := 30 #If (true) ; Act 1 WP Town Shortcut ^1:: ; 若热键内需修改全局变量,需添加global声明,只读场景可省略,建议保留避免歧义 global Click, left, %act1X%, %allActsRowY% Sleep, %clickDelay% Click, left, %allTownsX%, %allTownsY% return #If
注意事项
- 所有需要跨热键共享的变量都在自动执行段初始化即可,所有热键块均可直接读取
- 若热键内需要修改全局变量的值,必须在热键块首行添加
global声明,否则变量会被识别为热键子程的局部变量 #If块仅用于限定热键的触发条件,不要放置普通执行代码,这类代码不会被自动触发运行- 原代码中
Sleep, clickDelay属于语法错误,AutoHotkey v1中命令的参数使用变量时需要用%包裹,否则会将变量名解析为字面量,无法读取变量值
内容的提问来源于stack exchange,提问作者Paul Erlenmeyer
相关产品推荐
相关产品推荐

