从 HTA 中启动应用程序_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:\Scripts\Test.txt):

复制代码 代码如下:

<html>
<head>
<script language="VBScript">
Sub RunProgram
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "notepad.exe c:\scripts\test.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:\scripts\test.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:\Scripts\Test.txt:

复制代码 代码如下:

<html>
<head>
<script language="VBScript">
Sub RunProgram
Const NORMAL_WINDOW = 1
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "notepad.exe", "c:\scripts\test.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 启动应用程序,两种方法都可以使用。

时间: 2024-10-11 04:25:31

从 HTA 中启动应用程序_hta的相关文章

android-在一个程序中启动其他程序老被强退?

问题描述 在一个程序中启动其他程序老被强退? 我已经获取了手机中的程序列表,并添加了setOnItemLongClickListener()方法代码部分如下lv.setOnItemLongClickListener(new OnItemLongClickListener(){ public boolean onItemLongClick(AdapterView<?> parent View v int position long id){ String activityName = null;

在matlab中怎么调用java程序,求指教,不需要传入参数,只需要在matlab中启动java程序

问题描述 在matlab中怎么调用java程序,求指教,不需要传入参数,只需要在matlab中启动java程序 不需要传入参数,只需要在matlab中启动java程序,java读取个文件在处理文件后保存就行 解决方案 很简单的,matlab的界面都是java写的,网上教程也很多.

教你在Word工具栏中启动应用程序

单击"工具"菜单下的"自定义"命令,打开"自定义"对话框,在常用工具栏上"插入超链接"按钮上右击鼠标,在弹出的菜单中执行"分配超链接"下的"打开"命令,打开"分配超链接"对话框,通过"查找范围"右侧的下拉按钮,找到计算器程序文件CALC.EXE(通常位于C:\Windows目录中),"确定"退出,关闭"自定义"

从Word工具栏中启动应用程序

以下操作在Word 2002和Word 2003中通过. 单击Word"工具"菜单下的"自定义"命令,打开"自定义"对话框,在常用工具栏上"插入超链接"按钮上右击鼠标,在弹出的菜单中执行"分配超链接"下的"打开"命令,打开"分配超链接"对话框,通过"查找范围"右侧的下拉按钮,找到计算器程序文件CALC.EXE(通常位于C:Windows目录中),&

PS3破解再出利器编程计算器也可启动破解程序

继上周有 网友将PS3破解的开源代码移植到诺基亚N900.Palm Pre手机之后,又有人在网上展示自己使用可编程计算器完成了PS3的破解. 这次的破解使用的是TI-84 Plus计算器,这款产品拥有Flash Rom和Mini USB接口支持.破解同样使用PSGroove开源代码,可以让编程计算器代替之前专用破解U盘的角色. 将破解代码进行相关的修改植入到计算器的ROM中,然后将计算器通过USB连接至PS3的控制器接口.连接之后,从计算器中启动破解程序,打开PS3的电源,就可以进入到PS3破解

在AndroidManifest.xml文件中设置Android程序的启动界面方法

  比如Android的Login程序和Android的Helloworld程序,但是却总不能正确运行一个正确的程序,郁闷了很久,终于在一次一次的测试后成功的在Android模拟器中运行了自建项目的程序.总结程序启动界面的设置经验如下: 在 MyEclipse建立的Android项目中,找到AndroidManifest.xml文件,双击打开. 设置程序运行后首先启动Login界面的AndroidManifest.xml文件代码如下: <?xml version="1.0" en

win7电脑中的哪些程序我们应该禁止启动?

  很多朋友可能都以为win7 32位系统开启之后,只有咱们打开的程序才算是启动的程序,其实不然,大家不妨试试打开电脑的任务管理器窗口,在进程这一栏是不是可以看到很多的内容,其实这些才是目前正在启动中的程序,也就是说,很多程序在咱们开启电脑的时候就已经默认开启了,那么在众多的程序中,到底哪些程序是咱们应该关闭的,对电脑无益甚至是有害的?下面,小编就来八一八吧! 1. SSDP Discovery 对于很多朋友来说,这个服务程序就显得有些多余了,只有当你的电脑有SSDP的设备的时候,这个程序才能起

“无法启动此程序,因为计算机中丢失MSVBVM50.DLL”的解决方法

  今天在Win8.1系统下运行"喜羊羊与灰太狼屏保.exe"程序时,突然弹出如图所示的"系统错误"窗口: 计算机中丢失MSVBVM50.DLL"的解决方法-msvbvm50.dll丢失"> 内容为"系统错误.无法启动此程序,因为计算机中丢失MSVBVM50.DLL.尝试重新安装该程序以解决此问题." 首先普及一下常识,MSVBVM50.DLL文件是什么东东呢?DLL是Dynamic Link Library 的缩写,D

广告-在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序

问题描述 在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序 大家好,我现在遇到这样的情况,我目前做的是一个android积分墙的项目,用户通过我的这个项目app做任务下载一个广告,当用户进入到我们的下载广告的apk 后,玩了一段时间后(玩了一段时间才会给积分),点击后退,当前的 广告apk 是退出了,同时我们的项目也退出了(原本我们的项目逻辑是不会退出的),回到了桌面......我们自己测试的时候并没有出现这样的情况,但是用户遇到了,并且用户反馈再次重启手机的时候,再