Autohotkey / AHK - 参数 %1% 在函数中不可访问

Autohotkey / AHK - Param %1% not accessible within a function

我在访问 Autohotkey 中的 %1%(已由控制台传递给脚本的启动参数)时遇到问题。

当我使用以下代码(在函数之外)时:

Msgbox %1%

我得到了传递给脚本的参数的输出。但是一旦我使用以下代码:

HelloWorld() {
    Msgbox %1% 
}
HelloWorld()

输出为空。

我也尝试过将 %1% 分配给全局变量,或将其作为参数传递给函数,但对我来说都不起作用。

谢谢

我认为命令行参数变量被认为是全局变量,因此为了在函数内的非表达式上下文中使用它们,您必须将它们声明为全局变量:

HelloWorld() {
    global 1
    Msgbox %1% 
}
HelloWorld()

一旦您想在表达式中使用它们(例如在 MsgBox 的文本参数中使用 %),它会变得更加混乱,因为它们将被视为数字,因此您必须通过变量间接访问它们:

HelloWorld() {
    ;global 1
    ; Neither of these two expressions access the variable named "1"
    ;Msgbox % 1
    ;Msgbox % %1%

    ; You have to do this instead:
    p := 1
    MsgBox % %p% ; p is translated to 1 and then "1" is used as a variable name
}
HelloWorld()

请注意,这样做不需要 global 1

如果您使用的是最新版本的 AHK,您可能想要使用新引入的内置变量 A_Args,它是一个保存命令行参数的数组。由于是内置的,它不必声明为全局的,最终使代码更清晰:

HelloWorld() {
    MsgBox % "Number of command line args received: " A_Args.Length() "`n"
             . "First argument: " A_Args[1]
}
HelloWorld()

只需将您的 cli 变量声明为全局变量 - 在函数外部 - 使它们全局可用 任何和所有内部函数。对我来说,这就是我使用 AHK 版本(版本 1.1.25.01)的方式:

Global 1, 2, 3
HelloWorld() {
    MsgBox Hello`t1:`t%1%`n`t2:`t%2%`n`t3:`t%3%
}
HelloWorld()

注意,这些是不同的命令行:

"Scripts\myScript.ahk" one two three
"Scripts\myScript.ahk" "one two" three
"Scripts\myScript.ahk" "one" "two three"
"Scripts\myScript.ahk" "one two three"

第一个是三个独立的参数,第二个和第三个只有两个,最后一个只有一个参数(2和3存在,但为空)。

Hth,