Autohotkey / AHK - 函数中无法访问Param%1%

时间:2018-04-18 17:32:00

标签: command-line parameters autohotkey args

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

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

Msgbox %1%

我得到了传递给脚本的Param的输出。但是只要我使用以下代码:

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

输出为空。

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

谢谢

2 个答案:

答案 0 :(得分:2)

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

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()

答案 1 :(得分:2)

只需将您的cli变量声明为Global - 在函数外部 - 使它们全局可用任何和所有内部函数。对我来说,这就是我使用我的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,但是都是空的)。

H个,