在 vbscript 中使用 HTA

Posted

技术标签:

【中文标题】在 vbscript 中使用 HTA【英文标题】:Using HTA in vbscript 【发布时间】:2013-02-11 13:58:03 【问题描述】:

在为 VBscript 使用 HTA 用户表单时,我发现 HTA 不支持 WScript 及其对象/方法。

有没有其他方法可以创建用户表单,或者有什么方法可以让 HTA 支持 WScript?

【问题讨论】:

您需要使用哪些 WScript 成员?也许还有其他选择 我正在使用 WScript.Echo 和 FileSystemObject 对象 【参考方案1】:

WScript.Echo 的替代方法是简单地将内容添加到 DOM:

<script language="vbscript">
    dim div: set div = document.getElementById("output")
    div.innerText = "output"
</script>

<div id="output"/>

或者如果你想要一个对话框,你可以使用MsgBox()

<script language="vbscript">
    MsgBox "output"
</script>

你可以使用Scripting.FileSystemObject而不使用WScript

<script language="vbscript">
    dim fso: set fso = CreateObject("Scripting.FileSystemObject")
    dim path: path = fso.GetAbsolutePathName(".")
    '... etc
</script>

【讨论】:

【参考方案2】:

将您的Wscript 代码放入.wsf 文件并像这样调用脚本:

shell=new ActiveXObject('WScript.Shell');
shell.Exec('WScript //Job:job_id PATH_TO_YOUR_WSF_FILE');

通过.wsf,您还可以使用WScript.Sleep()WScript.SendKeys() 等HTA 中不可用的方法。

MSDN 上的更多信息:Windows Script Host

【讨论】:

我实际上是从 bat 文件中调用 vbs 文件。然后从 vbs 我调用 HTA 表单来获取用户输入并根据输入执行操作。 类似this?如果是这样,您需要 HTABox.document.write 我想的 JScript。 现在我有了从 bat 文件中调用 HTA 文件的想法。但是是否可以从 hta 获取数据到批处理文件? 如果您能告诉我如何在窗口之间进行交互,我会很高兴。我使用了临时文件,它工作正常,除了你不能传递真实的对象...... 我会将参数传递给 hta 文件,如下所示:@call scripts\UserForm.hta "src" "dest" "op" 稍后在 hta 中,我会将值存储在这些参数中,以便我可以使用它们在 bat 文件中。我不知道这是否有意义

以上是关于在 vbscript 中使用 HTA的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vbscript 中引用类型库(通常使用 xshell 库)

为啥我不能使用 VBscript 在 DAO.DBEngine.36 中使用“CompactDatabase”?

是否可以在vbscript中使用串行端口

使用以下vbscript在邮件正文中添加新行

如何在VBScript中使用ADODB结果集? [关闭]

如何在 VBScript 中使用正则表达式替换部分子字符串?