如何解决AHK 如何将变量传递给函数内部的“运行”?
我对自动热键相当陌生,最近在尝试将变量作为自动热键中“运行”命令的参数传递时遇到了一个问题。任何人都可以告诉我我缺少什么还是这是一个错误?
Gui,Setup:Add,Edit,w100 vProgram
Gui,Button,Default w100 gSubmit,OK
Gui,Setup:Show,Setup
WinWaitClose,Setup
ExitApp
Submit:
Gui,Setup:Submit
RunStuff()
RunStuff() {
Run,%Program%
}
我什至尝试将行更改为:
RunStuff() {
run,Program
}
非常感谢您的帮助,提前致谢。
解决方法
首先,同时
WinWaitClose,Setup
ExitApp
也许是聪明的想法,您应该通过定义名称为 GuiClose
的函数(或标签)来使用 GuiClose
event 做到这一点。
GuiClose()
{
ExitApp
}
另外,给 gui 一个名字是多余的,尽管如果你打算添加更多的 gui,那就足够了。
要运行 cmd 命令,您需要使用 /c
(docs) 开关启动 cmd。
您的示例 netsh wlan connect ssid=%networkname% name=%networkname%
会这样做:
networkname := "name"
Run,%A_ComSpec% /c netsh wlan connect ssid=%networkname% name=%networkname%
Run,% A_ComSpec " /c netsh wlan connect ssid=" networkname " name=" networkname
第一行是旧语法,我真的不推荐它。
第二行是表达式语法。
内置变量 A_ComSpec
(docs) 包含 cmd.exe 的路径。
基于您的代码在记事本中打开文件的示例程序:
Gui,Setup:Add,Edit,w300 vFilePath,% "C:\Users\User\Desktop\this is a text file.txt"
Gui,Button,Default w100 gSubmit,OK
Gui,Setup:Show,Setup
return
Submit:
Gui,Setup:Submit
Run,% "notepad.exe """ FilePath """"
return
GuiClose()
{
ExitApp
}
注意文件路径如何包含空格,因此参数需要用引号括起来。""""
可能看起来很奇怪,但在 AHK 中引用是 escaped 与另一个引用。因此,外部引号指定您正在编写字符串,而内部 ""
只是一个转义的引号。所以这会产生 "
。
在学习 AHK 时,遗留语法与现代表达式语法可能会有点混乱。当您查找内容时,您会看到很多遗留语法。这主要是因为 AHK 在几年前更加流行(当时可以使用遗留语法)。
要开始了解遗留与现代表达的差异,这里有一个非常好的文档页面:
https://www.autohotkey.com/docs/Language.htm
编辑:
回答通过编辑添加到 OP 中的新问题。
RunStuff() {
Run,%Program%
}
变量 Program
未在函数作用域中定义。
让我们考虑这个示例代码
var1 := 1
var2 := 2
global var3 := 3
function()
return
function()
{
global var2
MsgBox,% "var1: " var1 "`nvar2: " var2 "`nvar3: " var3 "`n"
}
var1
未在函数作用域中定义,因此消息框中不会打印任何内容。
由于 var2
行,global var2
将在函数作用域之外使用。var3
也可以在函数作用域之外使用,因为 var3 被定义为超级全局。真的不推荐超级全局,因为任何地方都将使用该变量。在较大的脚本上很容易遇到问题,但对于较小的脚本来说很方便,例如,您知道自己将要做什么并且没有任何外部库。
您可以从这里阅读相关文档:
https://www.autohotkey.com/docs/Functions.htm#Locals
您似乎认为您的问题出在 gui 输出上。
我认为您可能想以不同的方式检查:
您可以创建一个脚本来分析您的运行输入。
例如:
脚本 #1,我们称之为“1.ahk”
Run,2.ahk param1 param 2 "param 3"
脚本 #2,我们称之为“2.ahk”
txt := "Params as seen by ahk:`n"
for i,param in A_Args
txt .= i " = " param "`n"
MsgBox % txt
通过运行脚本“1.ahk”你可以看到“2.ahk”创建的消息:
Params as seen by ahk:
1 = param1
2 = param
3 = 2
4 = param 3
我认为这很能说明它如何理解空格以及引号如何防止拆分参数。
现在,如果您针对“2.ahk”运行 gui 输出,您可能会看到与之前看到的有所不同的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。