Autohotkey:如何在#ifwinactive 之后声明全局变量

Dav*_* J. 0 variables if-statement autohotkey global-variables declare

当我在#ifwinactive 之后声明一个全局变量时,会弹出一条错误消息,显示该变量未声明。

我有一个很长的脚本,里面有很多#ifwinactive ahk_exe xxx。在这些代码下面,我想声明一个全局变量。但这不起作用。每当我运行脚本时,它都会警告我未声明全局变量。这是我的脚本的简要介绍。

在脚本的顶部,我有这些环境设置:

#NoEnv  
#Warn  
SendMode Input 
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 2
Run Code Online (Sandbox Code Playgroud)

然后我有许多特定于窗口的热键:

#ifwinactive ahk_exe Explorer.EXE
;some hotkeys
#ifwinactive ahk_exe WINWORD.EXE
;some extra hotkeys
;etc.
Run Code Online (Sandbox Code Playgroud)

在底部,我尝试声明一个全局变量,这就是发生错误的地方:

#ifwinactive
a := 1
^p::
    if (a != 1){
        a := 1
    } else {
        a := 0
    }
return 

#if winactive("- YouTube -") and a != 1
    p::msgbox,Yes
#if a = 1 and winactive("- YouTube -")
    p::msgbox,no
#if
Run Code Online (Sandbox Code Playgroud)

0x4*_*64e 5

您在自动执行部分a之外声明变量。 代码执行从未真正到达,当您的第一个热键定义满足时它就会停止。 此外,这不是错误,只是警告。由于 AHK 的宽容度,如果您在使用前不声明变量实际上并不重要。它将以默认值nothing 开始,这适用于您的检查。 此外,在您至少运行一次热键后,它将按预期运行。
a := 1
a != 1
^p

但无论如何,为了摆脱警告,您需要在脚本的自动执行部分(顶部)声明变量。

还有一点需要考虑:除非您确实需要,否则
不要使用#If它。它可能会导致麻烦(如文档所述),具体取决于您拥有的脚本类型。
如果您只需要检查 win 主动检查和切换开关,我认为这真的不值得使用#If.