论坛首页 编程语言技术论坛

HTA,XUL技术的鼻祖

浏览 5287 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-20  
近几年来,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提供了当前运行进程的信息,最后运行效果如下



  • 大小: 7.5 KB
  • 大小: 18.7 KB
   发表时间:2009-06-21   最后修改:2009-06-21
其实我觉得 Ruby 社区没有花精力去搞好和宣传 ActiveScriptRuby 是重大的战略失误 ……
0 请登录后投票
   发表时间:2009-06-21  
night_stalker 写道
其实我觉得 Ruby 社区没有花精力去搞好和宣传 ActiveScriptRuby 是重大的战略失误 ……

说实话,宣传ruby的基本上都是搞rails的
0 请登录后投票
   发表时间:2009-06-23  
对了,我就想知道例如 google update 那种桌面软件,界面就像web 一样,是怎么做的捏?
0 请登录后投票
   发表时间:2009-06-23   最后修改:2009-06-23
这个是我刚做出来的软件原型。注意一点:hta不依赖ie而存在,因此它甚至可以运行在winpe中。(需要定制winpe)



  • 大小: 57.9 KB
0 请登录后投票
   发表时间:2009-06-23  
hta确实很有意思,hta执行的效果和ie的显示效果是一样的。当时也想测一下hta是否真的不依赖ie。我做的hta效果如下图:

http://www.javaei.com/content/download/2009/6/index2009623.hta
0 请登录后投票
   发表时间:2009-06-23  
有一个jabber客户端叫,  http://pandion.be/

是一个使用hta 技术的很好范例
0 请登录后投票
   发表时间:2010-01-11  
竟有此物?以前真没听说过,留下备用吧
0 请登录后投票
   发表时间:2010-01-21  
以前不知道啊 呵呵
0 请登录后投票
   发表时间:2010-01-25  
54五味子 写道
以前不知道啊 呵呵



最近apple以一贯无耻的抄袭精神,在iphone里沿用了hta技术,并改名为PastryKit
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics