VBScript - 将参数传递给 HTA
VBScript - Pass argument to HTA
我正在使用 VBScript 编写一些脚本,我需要将一些变量值传递给我将用作前端的 HTA,以显示正在进行的更新。
我该怎么做?
VBScript-------
TestVar1 = "Something 1"
TestVar2 = "Something 2"
wshShell.Run "Updater.hta " & TestVar1 & TestVar2
然后
HTA-------
TestVar1 = Something.Arguments(0)
TestVar2 = Something.Arguments(1)
Msgbox TestVar1
Msgbox TestVar2
我知道那不是完全正确的代码,我只是把它放在一起来说明我正在尝试做的事情。
如果你们能提供任何帮助来解决这个问题,那就太好了,谢谢!
将您的参数括在引号中。由于 VBScript 使用 "
作为字符串文字,您需要通过将其加倍 ""
来转义它,或者您可以使用 Chr()
函数来指定引号字符:
TestVar1 = "Something 1"
TestVar2 = "Something 2"
Dim strParams
strParams = strParams & " " & Chr(34) & TestVar1 & Chr(34)
strParams = strParams & " " & Chr(34) & TestVar2 & Chr(34)
wshShell.Run "updater.hta" & strParams
在您的 HTA 中,Arguments
集合不可用。相反,您必须解析 HTA 对象的 CommandLine
属性。在这种情况下,您的 HTA 收到的 CommandLine
将如下所示:
"updater.hta" "Something 1" "Something 2"
所以你有两个选项来检索你的参数。您可以使用正则表达式来获取引号内的所有内容,或者您可以 Split()
引号上的 CommandLine
。如果您的其中一个参数中有引号 ,事情就会变得更加棘手,您可能需要考虑使用不同的字符来括起您的参数。
这是一个使用 Split()
提取参数的 HTA 框架:
<head>
<HTA:APPLICATION
ID="myhta"
APPLICATIONNAME="HTA Test"
>
</head>
<script language="VBScript">
Sub Window_OnLoad()
a = Split(myhta.CommandLine, Chr(34))
MsgBox "Arg 1 = " & a(3)
MsgBox "Arg 2 = " & a(5)
End Sub
</script>
当您使用 Split()
时,您会得到如下内容:
a = Split(myhta.CommandLine, Chr(34))
' a(0) = <blank>
' a(1) = "updater.hta"
' a(2) = " "
' a(3) = "Something 1"
' a(4) = " "
' a(5) = "Something 2"
' a(6) = <blank>
所以 a(3)
成为你的第一个参数,a(5)
成为你的第二个参数。
如果你想使用正则表达式,它变成:
Sub Window_OnLoad()
With New RegExp
.Global = True
.Pattern = """([^""]+)"""
Set c = .Execute(myhta.CommandLine)
End With
For i = 1 To c.Count - 1 ' Skip i = 0 (the HTA filename)
MsgBox "Arg " & i & " = " & c(i).SubMatches(0)
Next
End Sub
这将显示:
Arg 1 = Something 1
Arg 2 = Something 2
我知道这是 post 有点旧,但它帮助我找到了 Macro Express Pro 的解决方案。
在调用 HTA 之前,我们的用户必须从其他应用程序(例如 IBM 个人通信或 PCOMM、仿真器)收集数据。然后我们使用“Program Launch”调用 HTA 并将数据作为参数传递:
Program Launch: "Group Record.hta" (Normal)
Parameters: "%Variable1%" "%Variable2%"
为了处理 HTA 从 Macro Express Pro 接收数据,我开发了以下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="x-ua-compatible" content="ie=9" />
<title>Group Record Display</title>
<HTA:APPLICATION
ID="myhta"
APPLICATIONNAME = "Group Record Display"
/>
</head>
<script language="VBScript">
Sub Main()
strArg = Split(myhta.CommandLine, chr(34))
For i = 3 to (UBound(strArg) - 1)
If strArgLine = "" Then
strArgLine = strArg(i)
Else
strArgLine = strArgLine & "," & strArg(i)
If i = UBound(strArg) Then
Exit For
End If
End If
Next
Var1 = strArg(3) 'Whatever was passed to this index
Window_Title = Split(strArg(5), " ") 'PCOMM session "Session A - [24 x 80]"
For j = 0 to 3
If Len(Window_Title(j)) = 1 Then
strSession = Window_Title(j) 'Session letter "A"
Exit For
End If
Next
document.getElementById("MainDisplay").InnerHTML = Var1
End Sub
</script>
<body onLoad=Main()>
<div id="MainDisplay"></div>
</body>
</html>
我正在使用 VBScript 编写一些脚本,我需要将一些变量值传递给我将用作前端的 HTA,以显示正在进行的更新。
我该怎么做?
VBScript-------
TestVar1 = "Something 1"
TestVar2 = "Something 2"
wshShell.Run "Updater.hta " & TestVar1 & TestVar2
然后
HTA-------
TestVar1 = Something.Arguments(0)
TestVar2 = Something.Arguments(1)
Msgbox TestVar1
Msgbox TestVar2
我知道那不是完全正确的代码,我只是把它放在一起来说明我正在尝试做的事情。
如果你们能提供任何帮助来解决这个问题,那就太好了,谢谢!
将您的参数括在引号中。由于 VBScript 使用 "
作为字符串文字,您需要通过将其加倍 ""
来转义它,或者您可以使用 Chr()
函数来指定引号字符:
TestVar1 = "Something 1"
TestVar2 = "Something 2"
Dim strParams
strParams = strParams & " " & Chr(34) & TestVar1 & Chr(34)
strParams = strParams & " " & Chr(34) & TestVar2 & Chr(34)
wshShell.Run "updater.hta" & strParams
在您的 HTA 中,Arguments
集合不可用。相反,您必须解析 HTA 对象的 CommandLine
属性。在这种情况下,您的 HTA 收到的 CommandLine
将如下所示:
"updater.hta" "Something 1" "Something 2"
所以你有两个选项来检索你的参数。您可以使用正则表达式来获取引号内的所有内容,或者您可以 Split()
引号上的 CommandLine
。如果您的其中一个参数中有引号 ,事情就会变得更加棘手,您可能需要考虑使用不同的字符来括起您的参数。
这是一个使用 Split()
提取参数的 HTA 框架:
<head>
<HTA:APPLICATION
ID="myhta"
APPLICATIONNAME="HTA Test"
>
</head>
<script language="VBScript">
Sub Window_OnLoad()
a = Split(myhta.CommandLine, Chr(34))
MsgBox "Arg 1 = " & a(3)
MsgBox "Arg 2 = " & a(5)
End Sub
</script>
当您使用 Split()
时,您会得到如下内容:
a = Split(myhta.CommandLine, Chr(34))
' a(0) = <blank>
' a(1) = "updater.hta"
' a(2) = " "
' a(3) = "Something 1"
' a(4) = " "
' a(5) = "Something 2"
' a(6) = <blank>
所以 a(3)
成为你的第一个参数,a(5)
成为你的第二个参数。
如果你想使用正则表达式,它变成:
Sub Window_OnLoad()
With New RegExp
.Global = True
.Pattern = """([^""]+)"""
Set c = .Execute(myhta.CommandLine)
End With
For i = 1 To c.Count - 1 ' Skip i = 0 (the HTA filename)
MsgBox "Arg " & i & " = " & c(i).SubMatches(0)
Next
End Sub
这将显示:
Arg 1 = Something 1
Arg 2 = Something 2
我知道这是 post 有点旧,但它帮助我找到了 Macro Express Pro 的解决方案。
在调用 HTA 之前,我们的用户必须从其他应用程序(例如 IBM 个人通信或 PCOMM、仿真器)收集数据。然后我们使用“Program Launch”调用 HTA 并将数据作为参数传递:
Program Launch: "Group Record.hta" (Normal)
Parameters: "%Variable1%" "%Variable2%"
为了处理 HTA 从 Macro Express Pro 接收数据,我开发了以下代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="x-ua-compatible" content="ie=9" />
<title>Group Record Display</title>
<HTA:APPLICATION
ID="myhta"
APPLICATIONNAME = "Group Record Display"
/>
</head>
<script language="VBScript">
Sub Main()
strArg = Split(myhta.CommandLine, chr(34))
For i = 3 to (UBound(strArg) - 1)
If strArgLine = "" Then
strArgLine = strArg(i)
Else
strArgLine = strArgLine & "," & strArg(i)
If i = UBound(strArg) Then
Exit For
End If
End If
Next
Var1 = strArg(3) 'Whatever was passed to this index
Window_Title = Split(strArg(5), " ") 'PCOMM session "Session A - [24 x 80]"
For j = 0 to 3
If Len(Window_Title(j)) = 1 Then
strSession = Window_Title(j) 'Session letter "A"
Exit For
End If
Next
document.getElementById("MainDisplay").InnerHTML = Var1
End Sub
</script>
<body onLoad=Main()>
<div id="MainDisplay"></div>
</body>
</html>