自动热键:如何在#ifwinactive后声明全局变量?

问题描述 投票:0回答:1

当我在#ifwinactive之后声明一个全局变量时,弹出一个错误信息,显示该变量没有声明。

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

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

#NoEnv  
#Warn  
SendMode Input 
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 2

然后我有很多窗口专用的热键。

#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
if-statement variables global-variables autohotkey declare
1个回答
4
投票

你声明的变量 a 以外 自动执行部分. 代码执行从未真正达到 a := 1,当你的第一个热键定义满足时,它就会停止。另外,这不是一个错误,只是一个警告。由于AHK的宽容度很高,如果你在使用前没有声明变量,其实并不重要。它将以默认值 毫无,这对你的工作 a != 1 检查。另外,当你运行 ^p 热键至少一次,它就会按照预期的方式运行。

但无论如何,为了摆脱警告,你可以在脚本的自动执行部分(在顶部)声明这个变量。

还有一个额外的事情要考虑。不要使用 #If 除非你真的需要它。它可能会引起麻烦(如文档中所说),这取决于你有什么样的脚本。如果你只需要检查win active检查和toggle,我不认为它真的需要使用 #If.

© www.soinside.com 2019 - 2024. All rights reserved.