【问题标题】:Am I able to embed HTA code into VBScript? [duplicate]我可以将 HTA 代码嵌入到 VBScript 中吗? [复制]
【发布时间】:2021-10-07 19:43:11
【问题描述】:

已编辑

我的公司使用 VBScript 和 IE 创建用于收集和显示信息的弹出窗口。现在 IE 即将消失,我们无法在 Edge 中执行此操作。我们正在寻找一种方法来使用嵌入在 VBScript 中的 HTA,就像我们在 IE 中所做的那样。以下是我们目前拥有的:

Function Create_Display(File_Path)
   Set objIE = CreateObject("InternetExplorer.Application")
   objIE.Navigate "about:blank"

   Win_Title = "GROUP TYPE " & MyArray(3) & " FOUND"
   objIE.Document.body.innerHTML = "<title>" & Win_Title & "</title><p class='msg'>Group Type " & MyArray(3) & " Returned for TIN: <span>" & _
   TIN & "</span></p><table border=0><tr><th>Seq#</th><th>Group Name</th><th>Group NPI</th><th>MPIN</th><th>Group Type</th><th>Group Start Date</th><th>Group Term Date</th><th>Network Start Date</th><th>Network Term Date</th><th>Network ID</th></tr><tr><td>" & List & _
   "<p class='ctrl'><input type='hidden' id='Submit' name='Submit' value='0'><input type='submit' value='OK' id='SubmitButton' onclick='document.all.Submit.value=1' autofocus></p>"

   Set Style = objIE.Document.CreateStyleSheet
   Style.AddRule "p.msg", "font-family:calibri;font-weight:bold;text-decoration:underline;color:black;"
   Style.AddRule "p.not", "font-family:calibri;color:black;"
   Style.AddRule "p.ctrl", "text-align:center;"

   objIE.Visible = True

   objIE.Document.all.Submit.Focus
            
    Do Until FormExit = "GO"
       If objIE.Document.all.Submit.Value = 1 Then
            objIE.Quit
            Exit Function
       End If
    Loop
End Function

上面的代码会产生一个这样的弹出窗口:

由于我们将不再能够使用objIE 与 IE 交互,因此我们正在寻找一种以相同方式嵌入 HTA 的方法。如果 HTA 不能嵌入,我们可以用 WSH 做类似的事情吗?

例子:

 set objShell = CreateObject("shell.application")
 objShell.Navigate "about:blank"

【问题讨论】:

标签: vbscript wsh hta


【解决方案1】:

问题中的示例很简单,可以使用 MsgBox 处理,但我假设您需要进行比 MsgBox 提供的更多的格式化。在这种情况下,您可以创建一个 HTA MsgBox 替换。下面的示例 HTA 支持消息文本、对话框标题和样式(CSS 类名)的命令行参数。您可以通过许多不同的方式扩展它,例如支持不同的按钮选项(ala MsgBox)。

调用 HTA 以显示弹出消息的主 VBScript 文件示例:

Set oShell = CreateObject("WScript.Shell")

Sub HTAMsg(Msg,Title,StyleClass)
  oShell.Run ".\MsgBox.hta |" & Msg & "|" & Title & "|" & StyleClass,1,True
End Sub

FilePath = "C:\SomeDir\SomeFile.txt"
Msg = "File not found: " & FilePath
HTAMsg Msg, "Error", "S1"

MsgBox.hta:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" http-equiv="X-UA-Compatible" content="IE=7">
<html>
<head>
<hta:application
  id = oHTA
  border = dialog
  innerborder = no
  caption = yes
  sysmenu = no
  maximizebutton = no
  minimizebutton = no
  scroll = no
  singleinstance = no
  showintaskbar = no
  contextmenu = no
  selection = yes
>
<style>
.S1 {color:red; background-color:LemonChiffon; font-family:Calibri}
.S2 {color:blue; background-color:LightCyan; font-family:Comic Sans MS}
.S3 {color:black; background-color:MistyRose; font-family:Consolas}
</style>
</head>
<script language="VBScript">
x = 320
y = 200
Window.ResizeTo x, y
Window.MoveTo (Screen.AvailWidth - x)/2, (Screen.AvailHeight - y)/2
CmdLine = oHTA.commandLine
Params = Split(CmdLine,"|")
MsgText = Params(1)
MsgTitle = Params(2)
MsgStyle = Params(3)

Sub window_OnLoad
  document.title = MsgTitle
  msg.InnerHTML = MsgText & "<br><br>"
  document.body.ClassName = MsgStyle
End Sub

Sub Done
  Self.Close
End Sub
</script>
<body>
  <div id=msg>
  </div>
  <input type=button value="OK" style='width:6em' onclick=Done>
</body>
</html>

【讨论】:

  • 我看到您实际上提供了对建议重复项的答案。没有 MSHTA COM 接口,因此您无法像 IE 那样从 Vbscript 控制它。为什么不使用建议的 Run 方法?它有一些优点,例如将所有样式保存在一个地方。如果您需要按钮按下的返回值,您可以使用注册表值,如建议的副本中所述。另一种方法是将所有代码移动到 HTA 中并从界面驱动它,而不是相反。除此之外,我会考虑转向 C#。
  • 我刚刚看到您编辑的问题。鉴于要显示的格式和数据,我建议通过文件(可能是 HTML 格式)将数据传递给 MsgBox HTA。但是,实际上,您最好将整个脚本作为 HTA 编写。
  • 我确实回答了建议的副本。我在该链接中没有看到任何与我要查找的内容相近的内容。如果我理解正确,由于整个代码都在 vbscript 中,我没有时间将其转换为 C#,有什么方法可以将数据从 vbscript 传递到 HTA 以显示它?必须进行交互,因为在 vbscript 结束之前有更多选项供用户选择……所以 HTA 必须回到 vbscript。这是相当复杂的,并且是其他从未回答过的问题的一部分。
  • Macro Express Pro,我们公司用来运行最终用户工具的应用程序,这些工具可以自动化用户交互以提高效率和准确性,确实允许 HTA,所以我想我可以在 HTA 中重做这个项目,如果我我问是不可能的。
  • 要执行您的要求,需要在调用 Vbscript 和 HTA 之间创建自己的接口,这可能涉及每半秒左右轮询一次。那将是复杂且容易出错的。最好在 HTA 中重写整个内容。
猜你喜欢
  • 2013-11-02
  • 2010-09-15
  • 1970-01-01
  • 2013-05-08
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
相关资源
最近更新 更多