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>