我在访问Autohotkey中的%1%(由控制台传递给脚本的启动参数)时遇到问题。
当我使用以下代码时(在函数之外):
Msgbox %1%
我得到了传递给脚本的Param的输出。但是只要我使用以下代码:
HelloWorld() {
Msgbox %1%
}
HelloWorld()
输出为空。
我还尝试将%1%分配给全局变量,或者将其作为参数传递给函数,但它对我来说也不起作用。
谢谢
答案 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个,