近几年来,XUL方兴未艾,以XAML(WPF),XUL等新技术,代表着一种以标记语言和脚本构造桌面应用程序的潮流,但是有一项Microsoft的技术却一直默默无名,这就是HTA技术,甚至有时候,它也背上了“木马”的恶名,但是HTA却是一切XUL技术的鼻祖。
MSHTA技术起源时间不详,我能查找的是的1999年3月发布的ie 5.0就带有mshta.exe运行时,(Win98SE),远远早于XUL和XAML。与这两种XUL技术不同的是,HTA技术并没有产生新的标记,而只是利用现成的HTML标记,这虽然在流媒体、动画技术等等方便表现力较弱,却带来一个很大的好处,即我们利用现成的网页来构造桌面应用程序。
所谓的HTA,即HTML Application的缩写(HTML应用程序),它通过MSHTA运行时,可以直接将HTML保存成HTA的格程序,该程序就是一个独立的应用软件,与VB、C++等程序语言所设计的软件没什么差别。也有人把HTA称为Javascript/vbscript的GUI. 无疑,现成的javascript框架和AJAX手法都能为HTA所用。
最简单的HTA程序,可以不需要任何脚本,而只是一段纯的html,只需要将其后缀名改为.hta,双击即可运行。
<!—example1.hta-->
<html>
<head>
<title>第一个HTA的例子</title>
<style>
p {font-size:24;cursor:hand}
</style>
</head>
<body>
<center>
<p>HTA</P>
运行的效果就和一个普通winform没有区别:
借助脚本语言,HTA可以运行程序、存取文件、调用ActiveX和COM,因此它几乎能完成桌面应用的一切工作,因此利用HTA技术中HTML的强大表现力,HTA可以超炫的界面表现。
如果你想控制HTA程序外观,可以在<HEAD>标签中,添加一行<HTA:Application...>,它提供了边框、标题、最大化按钮、最小化按钮的控制手段。
<HTA:Application
border=”thick”
caption=”yes”
maximizebutton=”yes”
minimizebutton=”yes”
sysmenu=”yes”
windowstate=”normal”
>
HTA技术可以透过WMI和ActiveX实现强大的功能
<html>
<head>
<title>Spreadsheet Example</title>
</head>
<Script Language="VBScript">
Sub Window_Onload
Spreadsheet1.TitleBar.Caption = "Process Information"
End Sub
Sub GetProcesses
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process")
i = 1
For Each objProcess in colProcesses
strCell = "A" & i
Spreadsheet1.Range(strCell).Cells(1) = objProcess.Name
strCell = "B" & i
Spreadsheet1.Range(strCell).Cells(1) = objProcess.WorkingSetSize
strCell = "C" & i
Spreadsheet1.Range(strCell).Cells(1) = objProcess.HandleCount
i = i + 1
Next
End Sub
</script>
<body bgcolor="buttonface">
<br>
<object classid="clsid:0002E559-0000-0000-C000-000000000046" id="Spreadsheet1">
<param name="DisplayToolbar" value="0">
<param name="DisplayWorkbookTabs" value="0">
<param name="DisplayTitleBar" value="-1">
</object>
<p><input type="button" value="Get Process Information" onclick="GetProcesses">
</body>
</html>
为插入和配置电子表格控件,我们使用以下几行代码:
<object classid="clsid:0002E559-0000-0000-C000-000000000046" id="Spreadsheet1">
<param name="DisplayToolbar" value="0">
<param name="DisplayWorkbookTabs" value="0">
<param name="DisplayTitleBar" value="-1">
</object>
而WMI提供了当前运行进程的信息,最后运行效果如下