Autohotkey 错误:此动态变量为空。如果此变量不是动态变量,请从中删除%符号。(AHK)

Autohotkey 错误:此动态变量为空。如果此变量不是动态变量,请从中删除%符号。(AHK),autohotkey,Autohotkey,我在#include方面遇到问题。我将此文档用于语法:。我有一个简单的测试程序,其中包括vars.ahk文件 vars.ahk: ; Test vars global x1 := 1 global x2 := 2 #include C:\Users\user\Desktop\vars.ahk function(x, x1, x2) { ; global x1, x2 If (x=1) { newvar := %x1% } else if (

我在
#include
方面遇到问题。我将此文档用于语法:。我有一个简单的测试程序,其中包括vars.ahk文件

vars.ahk:

; Test vars
global x1 := 1
global x2 := 2
#include C:\Users\user\Desktop\vars.ahk

function(x, x1, x2) {

    ; global x1, x2

    If (x=1) {
        newvar := %x1%
    }
    else if (x=2) {
        newvar := %x2%
    }
    msgbox, the value is %newvar% 
}

function(1, %x1%, %x2%)

msgbox, finished
我的ahk计划。ahk:

; Test vars
global x1 := 1
global x2 := 2
#include C:\Users\user\Desktop\vars.ahk

function(x, x1, x2) {

    ; global x1, x2

    If (x=1) {
        newvar := %x1%
    }
    else if (x=2) {
        newvar := %x2%
    }
    msgbox, the value is %newvar% 
}

function(1, %x1%, %x2%)

msgbox, finished

我的目标是在msgbox中显示vars.ahk文件中的变量,但它不起作用。我在运行此代码时收到错误。如果我试图将vars.ahk或my_ahk_program.ahk中的任何变量定义为全局变量,而不是将它们传递到函数中,那么msgbox将显示为无值。如何让
#include
处理变量?提前谢谢

您在现代表达式语句中使用的是传统语法。
通过将变量包装在
%
中引用变量是传统AHK中的正确方法。
但是,当您使用例如或a时,您不是在编写遗留AHK,而是希望使用现代表达式语法

因此,如警告消息所示,抛开
%
s,一切都会好起来的。
除了在您的应用程序中,您可以使用传统语法,因为命令是一种传统的命令,并且任何命令中的每个参数在默认情况下都使用传统语法(除非文档中另有规定)。
当然,您也可以(应该?)抛弃MsgBox命令中的遗留语法,方法是强制参数对表达式求值,方法是先用一个
%
表达式,然后用空格。像这样:
MsgBox,%”该值为“newvar


关于使用
%%
%%
的更多信息,我的上一个答案是这样做的!非常感谢你。我不知道有一个v1和v2的自动热键!不确定你是否无意中说了v1和v2,或者是从谷歌那里发现的。但确实存在一个v2。它仍处于阿尔法阶段。我们在这里写的是严格意义上的v1。v1既包括传统语法,也包括较新的表达式语法。v2根本没有遗留语法。所以我想这是完全抛弃传统语法的另一个原因。哦,我认为传统,你指的是v1语法,但现在我意识到传统语法有所不同。与强制命令有关。在你的帖子之后,我意识到文档有一个查看v1或v2语法的选项,所以我混淆了这两者。事实证明,关于自动热键,我仍然有很多不理解/不知道的地方!