Autohotkey:如何在#ifwinactive 之后声明全局变量
Autohotkey: how to declare global variable after #ifwinactive
当我在#ifwinactive 之后声明一个全局变量时,弹出一条错误消息显示该变量未声明。
我有一个很长的脚本,其中有很多#ifwinactive ahk_exe xxx。在这些代码下方,我想声明一个全局变量。但这是行不通的。每当我 运行 脚本时,它都会警告我未声明全局变量。这是我的脚本的简要说明。
在脚本的顶部我有这些环境设置:
#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 2
然后我有很多window特定的热键:
#ifwinactive ahk_exe Explorer.EXE
;some hotkeys
#ifwinactive ahk_exe WINWORD.EXE
;some extra hotkeys
;etc.
在底部,我尝试声明一个全局变量,这是发生错误的地方:
#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
您在 auto-execute section 之外声明变量 a
。
代码执行实际上从未达到 a := 1
,它会在满足您的第一个热键定义时停止。
另外,这不是错误,只是警告。由于 AHK 的宽容程度,如果您在使用前不声明变量实际上并不重要。它将以 nothing 的默认值开始,这适用于您的 a != 1
检查。
此外,在您 运行 至少一次 ^p
热键之后,它会按预期运行。
但无论如何,要消除警告,您需要在脚本的自动执行部分(顶部)声明变量。
还有一件需要考虑的事情:
不要使用 #If
除非你真的需要它。它可能会导致麻烦(如文档所述),具体取决于您拥有的脚本类型。
如果一个 win active check,并且你需要检查一个切换,我认为它真的不值得使用 #If
.
当我在#ifwinactive 之后声明一个全局变量时,弹出一条错误消息显示该变量未声明。
我有一个很长的脚本,其中有很多#ifwinactive ahk_exe xxx。在这些代码下方,我想声明一个全局变量。但这是行不通的。每当我 运行 脚本时,它都会警告我未声明全局变量。这是我的脚本的简要说明。
在脚本的顶部我有这些环境设置:
#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 2
然后我有很多window特定的热键:
#ifwinactive ahk_exe Explorer.EXE
;some hotkeys
#ifwinactive ahk_exe WINWORD.EXE
;some extra hotkeys
;etc.
在底部,我尝试声明一个全局变量,这是发生错误的地方:
#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
您在 auto-execute section 之外声明变量 a
。
代码执行实际上从未达到 a := 1
,它会在满足您的第一个热键定义时停止。
另外,这不是错误,只是警告。由于 AHK 的宽容程度,如果您在使用前不声明变量实际上并不重要。它将以 nothing 的默认值开始,这适用于您的 a != 1
检查。
此外,在您 运行 至少一次 ^p
热键之后,它会按预期运行。
但无论如何,要消除警告,您需要在脚本的自动执行部分(顶部)声明变量。
还有一件需要考虑的事情:
不要使用 #If
除非你真的需要它。它可能会导致麻烦(如文档所述),具体取决于您拥有的脚本类型。
如果一个 win active check,并且你需要检查一个切换,我认为它真的不值得使用 #If
.