如何从HTA中启动应用程序
如何从 HTA 中启动应用程序?
问:
您好,脚本专家!对于 HTA,有没有什么可以替代 Wscript.Shell 命令?我需要运行某个应用程序并指定要打开的文件。
-- DL
答:
您好,DL。是的,我们确实知道这样的命令,可以在 HTA 中使用并可以替代 Wscript.Shell 命令,我们一会儿就会向您介绍。不过,在介绍它之前,我们应注意到您实际上可以在 HTA 中使用 Wscript.Shell 对象。这是一个常会引发混淆之处:因为您在 HTA 中无法使用某些命令(如 Wscript.Echo 和 Wscript.Sleep),人们就认为您在 HTA 中无法使用任何 WSH 命令。
继续之前,还有一个问题:为什么您在 HTA 中无法使用 Wscript.Echo 和 Wscript.Sleep 呢?是这样,这些方法是 Wscript 对象的属性,而您是无法创建 Wscript 对象实例。Wscript 对象是自动创建的,而且只有在您运行 Windows Script Host(即 Wscript.exe 或 Cscript.exe)时才会创建。正因为这一点,才可以说以下脚本绝对有效:

Wscript.Echo "Hey."

请注意,我们没有创建 Wscript 对象,该对象是在我们调用 Windows Script Host 时自动创建的。
但这只限于 Wscript 对象。还有其他您可以创建的 WSH 对象,包括 Shell 对象。例如,下面是一个简单的小 HTA,它创建 Wscript.Shell 对象,然后运行 Notepad.exe(并在此过程中打开文件 C:ScriptsTest.txt):

<html>
<head>
<script language="VBScript">
Sub RunProgram
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "notepad.exe c:scriptstest.txt"
End Sub
</script>
</head>
<body>
<button onclick="RunProgram">Run Program</button> <p>
</body>
</html>

如您可以看到的,这差不多是您能获得的最简单的 HTA:它只由一个按钮组成,单击时会运行名为 RunProgram 的子例程。请看一下 RunProgram 的代码:

Sub RunProgram
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "notepad.exe c:scriptstest.txt"
End Sub

就是这样:我们创建 Wscript.Shell 对象的一个实例,然后调用 Run 方法。这样就为 Run 传递了单一参数:可执行文件名 (notepad.exe) 后跟想要打开的文件的路径。这就是我们需要做的一切。
顺便说一句,只要是在 HTA 中运行该脚本,则不会有任何问题。如果尝试在 HTML 文件(即文件扩展名为 .htm 的文件)中运行它,则会显示一个消息框,警告您有一个 ActiveX 控件正在尝试于页面上运行。此时必须单击是以允许该子例程创建 Shell 对象,并随后运行它。这是因为 WSH 对象被认为“对脚本编写是不安全的”。
注意:是啊,这听起来有点怪,竟然认为脚本编写对象对脚本编写是不安全的。但这是因为 Internet Explorer 使用与 WSH 不同的脚本宿主和不同的安全模型。幸好 HTA 使用与 Internet Explorer 不同的安全模型,这意味着您在 HTA 内创建 Shell 对象时不会遇到此问题。
那么,如果是使用那个替代命令呢?嗯,如果出于某种原因您不想使用 Wscript.Shell 对象,则可以改为使用 Windows Shell 对象。下面的 HTA 也可以启动记事本并打开文件 C:ScriptsTest.txt:

<html>
<head>
<script language="VBScript">
Sub RunProgram
Const NORMAL_WINDOW = 1
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "notepad.exe", "c:scriptstest.txt", , , NORMAL_WINDOW
End Sub
</script>
</head>
<body>
<button onclick="RunProgram">Run Program</button> <p>
</body>
</html>

坦白地讲,我们认为使用 Windows Shell 对象与使用 Wscript.Shell 对象相比并没有什么真正的优势:这两个对象的功能基本上一样。不过,如果您想要摆弄一下 Windows Shell,请查阅有关 ShellExecute 方法的文档。重要的是这一点:如果想要从 HTA 启动应用程序,两种方法都可以使用。
最新资讯
委内瑞拉总统:将借助华为等技术在全国建立4G系统

委内瑞拉总统:将借助华

委内瑞拉将立即投资国家通信领域,并借助包括华为、中兴
消息称OYO将上架携程和美团

消息称OYO将上架携程

据环球旅讯消息,携程、美团即将对OYO进行解禁,在这两大
“朱诺”号证实木星磁场随时间变化

“朱诺”号证实木星磁

研究人员在最新一期《自然·天文学》杂志上指出,新研究
俯瞰”生命进程,中国科学家将主导基因组标签计划

俯瞰”生命进程,中国科

国际合作的人类基因组计划(HGP)耗时13年、花费30亿美元
曾像地球一样宜居的金星 最后为何死气沉沉?

曾像地球一样宜居的金

据外媒报道,现在金星是一个人类无法居住的恐怖地方,但它
华润万家入驻饿了么,腾讯、阿里系边界逐渐模糊

华润万家入驻饿了么,腾

不论如何,华润万家能同时牵手阿里、腾讯两大阵营,都为线
最新文章
HTA编辑HOST文件的脚本

HTA编辑HOST文件的脚

一个修改HOST文件的小工具,利用FSO实现,代码比较长,功能
学习正则帮手笨狼正则练习器

学习正则帮手笨狼正则

把下面的文件保存为hta文件,运行即可
hta实现的笨狼XSLT练习器

hta实现的笨狼XSLT练

学习XSLT的朋友,用这个小工具不错
hta实现的定时关机小程序

hta实现的定时关机小

这个小程序使用hta写的,用了vbscript代码实现,喜欢的朋
用来通知论坛有新贴子的hta代码

用来通知论坛有新贴子

做了个用来通知论坛有新贴子的hta把下面的代码copy到
用vbs如何确定在 HTA 中选择了哪些文本?

用vbs如何确定在 HTA

问:您好,脚本专家!如何确定在HTA中选择了哪些文本?--DO答: