HTML Applications 参考

HTML Applications 概述

顾名思义,HTML Applications 是 HTML 应用程序,借助任何文本编辑器,使用等同于 HTML 的规则编写内容,将其以hta扩展名保存,得到的文件就是一个 HTML 应用程序,简称 HTA。

除了秉承 HTML 的许多特性之外,HTA 还有它自己特有的一些特性,这些特性用嵌入在 HTML 文档head元素中的HTA:Application元素来定义。下面的示例代码说明了HTA:Application元素在 HTA 中的应用:

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>HTA:Application</title>
 <HTA:Application showInTaskBar="no" />
</head>
<body onload="window.moveTo(screen.width*screen.height,screen.height*screen.width); alert(document.body.innerText); window.close()">
 <p>Welcome to HTA...</p>
</body>
</html>

复制上面的代码,将其保存为test.hta然后运行,它将显示一个对话框,确认该对话框后即退出程序。这是一个关于 HTA 的简单示例,将宿主平台所支持的脚本植入 HTA,它就可以完成很多有用的工作。

从以上示例可以看出,文档中title标签定义的内容将显示在 HTA 的标题栏中作为程序标题。

HTA 以 Microsoft® Internet Explorer 为宿主平台,由 mshta.exe 提供特性支持,对系统中 Internet Explorer 版本的更改也会更改 mshta.exe 的版本。由于 HTA 只依赖 IE,它集成了 IE 浏览器的对象模型、性能、渲染特性、协议支持以及通道下载技术等所有能力,却无须执行浏览器的严格安全模型和用户界面。因此在开发中可以以 IE 为标准,放心地使用各种 IE 支持的私有特性,而不必考虑这些特性与其它浏览器的兼容性。实际上 HTA 是一个非常宽松、快速的开发环境,在 HTA 中,可以省略任何非必须的标签,例如 html / head / body 等,这并不影响它的功能实现。

在文末的附录中提供了不同版本 mshta.exe 的合集,还有一个显示系统中 mshta.exe 版本的小程序,它也是用 HTA 做的。

注意

自 Internet Explorer 7 以后(截止目前的IE11),HTA 中 appVersion 特性返回的 IE 版本总是MSIE 7.0,因此不要使用这样的方法检测浏览器的版本。

在调试中要注意:同样的代码,在同一台计算机上的 html 形式和 hta 形式下表现可能并不相同,可以通过头部信息的meta元素进行兼容性设置,例如:<meta http-equiv="X-UA-Compatible" content="IE=9" />。这样做的话,兼容模式只能设置IE9及其以下版本,更高版将不解释hta:application标签中的内容。

HTA:Application 元素

启用 HTA 对象扩展模型。

语法

HTML <HTA:Application ... />
脚本 N/A

成员

属性 描述 对应的脚本特性 说明
applicationName 设置 HTA 的名称。 applicationName 检索 HTA 的名称。
border 设置 HTA 的边框类型。 border 检索 HTA 的边框类型。
borderStyle 设置 HTA 窗口内容的边框类型。 borderStyle 检索 HTA 窗口内容的边框类型。
caption 设置是否显示 HTA 窗口的标题栏。 caption 检索是否显示 HTA 窗口的标题栏。
N/A N/A commandLine 检索 HTA 的路径。
contextMenu 设置是否启用窗口内容的上下文菜单。 contextMenu 检索是否启用窗口内容的上下文菜单。
icon 设置 HTA 的图标。 icon 检索 HTA 的图标。
innerBorder 设置是否显示窗口内容的 3D 边框。 innerBorder 检索是否显示窗口内容的 3D 边框。
maximizeButton 设置是否显示窗口最大化按扭。 maximizeButton 检索是否显示窗口最大化按扭。
minimizeButton 设置是否显示窗口最小化按扭。 minimizeButton 检索是否显示窗口最小化按扭。
navigable 设置页面中链接的目标窗口是当前窗口还是新窗口。 navigable 检索页面中链接的目标窗口是当前窗口还是新窗口。
scroll 设置是否显示窗口滚动条。 scroll 检索是否显示窗口滚动条。
scrollFlat 设置是否以 3D 样式显示窗口滚动条。 scrollFlat 检索是否以 3D 样式显示窗口滚动条。
selection 设置是否允许选择文档内容。 selection 检索是否允许选择文档内容。
showInTaskBar 设置是否在任务栏上显示程序图标。 showInTaskBar 检索是否在任务栏上显示程序图标。
singleInstance 设置是否允许同时运行程序的多个实例。 singleInstance 检索是否允许同时运行程序的多个实例。
sysMenu 设置是否提供系统菜单。 sysMenu 检索是否提供系统菜单。
version 设置程序版本号。 version 检索程序版本号。
windowState 设置窗口的初始状态。 windowState 检索窗口的初始状态。
注:1、在表中元素属性按脚本特性的大小写规则进行描述,在实际编写中属性名大小写并无区别。
  2、所有的 HTA 脚本特性都是只读的。

注意

HTA 如同 .exe 程序一样可以访问客户端文件和注册表,这可能使客户端计算机遭遇恶意脚本,因此不推荐使用安全性和来源可疑的 HTA。

说明

HTA:Application 元素需要结束标签,但因它是一个空标签,因此可以使用 <HTA:Application /> 这样的形式关闭。

在一个 HTA 中只允许一个 HTA:Application 标签,其后若有重复的都将被忽略。

尽管 <HTA:Application /> 标签在 HTA 中的任意位置都可以正常工作,但是仍然建议按照规范来写。

applicationName 属性/特性

设置或检索应用程序的名称。

语法

HTML <HTA:Application applicationName=sAppName ... >
脚本 sAppName = HTA:APPLICATION.applicationName

取值

sAppName 应用程序名称字符串。

说明

此属性没有默认值,当属性未设置时,对应的脚本特性将返回一个空字符串。

singleInstance 属性值设为 yes 时,程序将检查 applicationName 的值,以此值来标识不同的应用程序。

border 属性/特性

设置或检索 HTA 的窗口边框。

语法

HTML <HTA:Application border=sType ... >
脚本 sType = HTA:APPLICATION.border

取值

sType 描述边框类型的字符串。为以下值之一:
  • thick:默认值,显示正常的粗重型边框。
  • dialog:对话框边框。
  • none:没有窗口边框,包括窗口标题栏也没有了。
  • thin:细轻型的边框。

说明

此属性及其对应的脚本特性的默认值均为 thick

实际上 thick、diaglog、thin 的表现差异极小,而 thick 又是默认值。因此,在实际应用中 border 属性只有一个需要设置的值,即:在不需要窗口边框和标题栏时将其设置为 none

borderStyle 属性/特性

设置或检索 HTA 内容的边框样式。

语法

HTML <HTA:Application borderStyle=sStyle ... >
脚本 sStyle = HTA:APPLICATION.borderStyle

取值

sStyle 描述窗口内容边框样式的字符串。为以下值之一:
  • normal:默认值,显示正常边框。
  • complex:带凹凸的立体边框。
  • raised:3D 凸边框。
  • static:显示为 Windows 中不接受用户输入样式的 3D 边框。
  • sunken:3D 凹边框。

说明

此属性及其对应的脚本特性的默认值均为 normal

caption 属性/特性

设置或检索是否显示 HTA 窗口的标题栏。

语法

HTML <HTA:Application caption=bTitleBar ... >
脚本 bTitleBar = HTA:APPLICATION.caption

取值

bTitleBar 指明是否显示 HTA 窗口的标题栏。为以下值之一:
  • yes:默认值,显示标题栏。
  • no:不显示标题栏。

说明

此属性及其对应的脚本特性的默认值均为 yes

当设置为 no 时,标题栏上的程序图标、标题、最小化按钮、最大化按钮、关闭按钮都无法显示。在此情况下,用户只能使用 Alt + F4 组合键关闭程序,因而建议调用 window 对象的 close 方法提供关闭功能。

commandLine 特性

检索 HTA 的路径。

语法

HTML N/A
脚本 [sPath =] HTA:APPLICATION.commandLine

取值

sPath 返回 HTA 的路径。

说明

此特性没有默认值,它返回由一对双引号包含的路径字符串。

contextMenu 属性/特性

设置或检索是否允许显示 HTA 内容的上下文菜单。

语法

HTML <HTA:Application contextMenu=sContextMenu ... >
脚本 [sContextMenu =] HTA:APPLICATION.contextMenu

取值

sContextMenu 指定为下列值之一:
  • yes:默认值,允许显示 HTA 的上下文菜单。
  • no:禁止显示 HTA 的上下文菜单。

说明

此属性及其对应的脚本特性的默认值均为 yes

此属性设置为 no 时将禁用所有元素的上下文菜单,包括 textarea / input(type=text) 等。

icon 属性/特性

设置或检索 HTA 的图标。

语法

HTML <HTA:Application icon=sIcon ... >
脚本 [sIcon =] HTA:APPLICATION.icon

取值

sIcon 描述 HTA 图标路径和名称的字符串。

说明

此属性没有默认值,当属性未设置时,对应的脚本特性将返回一个空字符串。

除了直接使用标准的 ico 格式图标文件之外,还可以指定为包含图标资源的其它格式文件,如 exe / dll 文件,如果未进一步指明要调用的图标名称,将使用该文件中的默认图标。不指定图标或指定的图标不存在时,将显示 mshta.exe 的图标。

innerBorder 属性/特性

设置或检索是否显示 HTA 的内边框。

语法

HTML <HTA:Application innerBorder=sInnerBorder ... >
脚本 [sInnerBorder =] HTA:APPLICATION.innerBorder

取值

sInnerBorder 指定为下列值之一:
  • yes:默认值,显示内边框。
  • no:不显示内边框。

说明

此属性及其对应的脚本特性的默认值均为 yes

此属性指定 HTA 的内边框,与之对应的属性是 border,后者指定 HTA 的外边框。

maximizeButton 属性/特性

设置或检索窗口的最大化按扭是否可用。

语法

HTML <HTA:Application maximizeButton=bShowButton ... >
脚本 [bShowButton =] HTA:APPLICATION.maximizeButton

取值

bShowButton 指定为下列值之一:
  • yes:默认值,最大化按扭可用。
  • no:最大化按扭不可用。

说明

此属性及其对应的脚本特性的默认值均为 yes

窗口必须拥有标题栏,才能使此属性设置为 yes 时发挥作用。因此,当 border 属性或 caption 属性设置为 no 时将覆盖此属性的表现。

maximizeButton / minimizeButton 两者都设置为 no 时,窗口上将不显示这两个按扭。

此属性的设置也会影响到标题栏的右键菜单,以及 HTA 在任务栏上的按扭的右键菜单。

minimizeButton 属性/特性

设置窗口的最小化按扭是否可用。

语法

HTML <HTA:Application minimizeButton=bShowButton ... >
脚本 [bShowButton =] HTA:APPLICATION.minimizeButton

取值

bShowButton 指定为下列值之一:
  • yes:默认值,最小化按扭可用。
  • no:最小化按扭不可用。

说明

此属性及其对应的脚本特性的默认值均为 yes

窗口必须拥有标题栏,才能使此属性设置为 yes 时发挥作用。因此,当 border 属性或 caption 属性设置为 no 时将覆盖此属性的表现。

minimizeButton / maximizeButton 两者都设置为 no 时,窗口上将不显示这两个按扭。

此属性的设置也会影响到标题栏的右键菜单,以及 HTA 在任务栏上的按扭的右键菜单。

navigable 属性/特性

设置或检索是否允许在 HTA 中打开链接。

语法

HTML <HTA:Application navigable=sNavigable ... >
脚本 [sNavigable =] HTA:APPLICATION.navigable

取值

sNavigable 指定为下列值之一:
  • yes:允许在 HTA 中打开链接。
  • no:默认值,不允许在 HTA 中打开链接(将在新的浏览器窗口中打开)。

说明

此属性的默认值为 no,当属性未设置时,对应的脚本特性将返回 undefined

scroll 属性/特性

设置或检索是否显示 HTA 窗口的滚动条。

语法

HTML <HTA:Application scroll=sScroll ... >
脚本 [sScroll =] HTA:APPLICATION.scroll

取值

sScroll 指定为下列值之一:
  • yes:默认值,显示 HTA 窗口的滚动条。
  • no:不显示在 HTA 窗口的滚动条。
  • auto:根据内容需要自动控制是否显示 HTA 窗口的滚动条。

说明

此属性及其对应的脚本特性的默认值均为 yes

设置 body 元素的 scroll 属性为 no 也可以防止显示滚动条。

scrollFlat 属性/特性

设置或检索是否以 3D 样式显示滚动条。

语法

HTML <HTA:Application scrollFlat=sScrollFlat ... >
脚本 [sScrollFlat =] HTA:APPLICATION.scrollFlat

取值

sScrollFlat 指定为下列值之一:
  • yes:显示扁平样式的滚动条。
  • no:默认值,显示 3D 样式的滚动条。

说明

此属性及其对应的脚本特性的默认值均为 no

此属性的表现与 Windows 主题有关。例如,在 Windows 8 默认主题下,无论此属性设置为何值,始终显示扁平样式的滚动条。

selection 属性/特性

设置或检索页面内容是否可以被选择。

语法

HTML <HTA:Application selection=sSelection ... >
脚本 [sSelection =] HTA:APPLICATION.selection

取值

sSelection 指定为下列值之一:
  • yes:默认值,页面内容可以被鼠标或键盘选择。
  • no:页面内容不能被鼠标或键盘选择。

说明

此属性及其对应的脚本特性的默认值均为 yes

此属性设置为 no 时将禁止页面上下文菜单,它会覆盖 contextMenu="yes" 的设置。

此属性设置为 no 时,若 HTML 元素的 contentEditable 属性设置为 yes,那么该 HTML 元素的内容将可以被选择,但仍然不能显示上下文菜单。

showInTaskBar 属性/特性

设置或检索是否在 Windows 任务栏上显示 HTA。

语法

HTML <HTA:Application showInTaskBar=bShow ... >
脚本 [bShow =] HTA:APPLICATION.showInTaskBar

取值

bShow 指定为下列值之一:
  • yes:默认值,允许在任务栏显示。
  • no:不允许在任务栏显示。

说明

此属性及其对应的脚本特性的默认值均为 yes

此属性不会影响用户使用 Alt + Tab 组合键打开应用程序切换列表时的表现。

singleInstance 属性/特性

设置或检索是否允许打开应用程序的多个实例。

语法

HTML <HTA:Application singleInstance=bOpen ... >
脚本 [bOpen =] HTA:APPLICATION.singleInstance

取值

bOpen 指定为下列值之一:
  • yes:只能同时运行应用程序的一个实例。
  • no:默认值,可以同时运行应用程序的多个实例。

说明

此属性及其对应的脚本特性的默认值均为 no

当此属性设置为 yes 时,applicationName 属性必须有且仅有唯一的值。当启动一个 singleInstance=yes 的 HTA 时,系统将首先检测是否已经有相同 applicationName 值的程序在运行,若检测到则不会执行任何操作,否则将打开请求的 HTA。

sysMenu 属性/特性

设置或检索是否启用应用程序窗口的系统菜单。

语法

HTML <HTA:Application sysMenu=bMenu ... >
脚本 [bMenu =] HTA:APPLICATION.sysMenu

取值

bMenu 指定为下列值之一:
  • yes:默认值,启用窗口的系统菜单。
  • no:禁用窗口的系统菜单。

说明

此属性及其对应的脚本特性的默认值均为 yes

禁用系统菜单时,窗口标题栏的关闭、最大化、最小化按扭及程序图标都不被显示。在这种情况下,Windows Vista/7/8 任务栏上的右键菜单只提供关闭功能,Windows XP 以下平台任务栏上的右键菜单也将被禁用。

version 属性/特性

设置或检索应用程序的版本号。

语法

HTML <HTA:Application version=sVersion ... >
脚本 [sVersion =] HTA:APPLICATION.version

取值

sVersion 定义应用程序版本号的字符串。

说明

此属性没有默认值,当属性未设置时,对应的脚本特性将返回一个空字符串。

windowState 属性/特性

设置或检索窗口的初始大小。

语法

HTML <HTA:Application windowState=sWindowSize ... >
脚本 [sWindowSize =] HTA:APPLICATION.windowState

取值

sWindowSize 指定为下列值之一:
  • normal:默认值,系统默认大小的窗口。
  • minimize:启动时不显示主窗口,以最小化形式显示在任务栏。
  • maximize:最大化满屏窗口。

说明

此属性及其对应的脚本特性的默认值均为 normal

在 Windows XP 平台上,此属性设为 minimize 时,window 对象的的 resizeTo 方法和 moveTo 方法必须在 HTA:Application 标签之前调用才能被执行;反之,若设为 maximize 时,window 对象的的 resizeTo 方法和 moveTo 方法必须在 HTA:Application 标签之后调用才能被执行。

windowState 设置为 maximize,并且 border 设置为 none 时,HTA 将以全屏呈现。

application 属性

表明是否为对象启用 HTA 安全机制。

语法

HTML <ELEMENT APPLICATION=bApplication ... >
脚本 N/A

取值

bApplication 布尔值(yes/no),表明对象内容的可信性。
默认为 no,即:所有的 frame/iframe 都是不被信任的。

说明

application 属性仅用于 HTA 中包含的 iframeframe 元素。

使用此属性可以在 HTA 的不同框架中同时访问因特网上的内容和安全内容,也可以使 HTA 能够使用跨域脚本。

此属性具有继承性。例如,当一个受信任的 iframe 内含 frame 时,后者也将被信任,反之,要使子框架被信任,其父框架必须设为信任。

HTA 的安全机制会防止它内嵌的未信任框架内的脚本访问,未信任的框架也不能从 HTA 中打开链接。

附录

这里收集了一些与 HTA 有关的资料、代码和程序等。

附录A 其它参考资料

附录B 常见问题

在 HTA 中使用 WshShell 对象
要在 HTA 中使用 WshShell 对象,请使用下面的代码:
var WshShell = new ActiveXObject("WScript.Shell");
无法在 HTA 中使用 CreateObject 方法创建 WshShell 对象。
在 HTA 中使用 Windows Shell 对象
用下面的代码:
var WdsShell=new ActiveXObject("Shell.Application");
参考资料:https://soulteary.com/2012/01/30/shell-application.html
在 HTA 中使用 WIA 对象
用下面的代码:
var imgObj=new ActiveXObject("WIA.ImageFile");

附录C 常用代码

2010-2022 © Hawk <-thanks & love my Benben->