You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:45:04