zoukankan      html  css  js  c++  java
  • HTA程序:VBS/JS脚本GUI

    1.概述

      HTA全称Html Application,在Windows中由mshta.exe加载执行,是一种本地程序。可使用html元素来构建界面,用JS或VBS来构建执行逻辑,从而强化Windows脚本的交互能力与友好性。只要将Html文件扩展名改为.hta即可将html当做一个hta程序来运行。

    2.<HTA:APPLICATION>元素

      <HTA:APPLICATION>元素必须全大写,其中的APPLICATION不可少;它拥有一些属性【它们是只读的】,用以来控制HTA进程和窗口的一些特性,具体如下:

    【1】applicationName:string=>设置HTA程序的名称,在singleInstance属性设置为"Yes"时有用

    【2】border:enum=>设置HTA窗口的边框类型,默认值Thick

     所有允许的值:                  Thick         粗边框

                                           Dialog       对话框【大小不可调整】

                                           None         无边框【无标题栏】

                                           Thin          窄边框

    【3】borderSytle:enum=>设置HTA窗口的边框风格,默认值是Normal

     所有允许的值:                  Normal     普通

                                           Complex  凹凸格式组合边框

                                           Raised      凸出的3D边框

                                           Static        3D边框格式

                                           Sunken     凹进的3D边框

    【4】caption:Yes/No=>设置HTA窗口是否显示标题,默认值为Yes

    【5】commandLine:string=>此属性保存了HTA程序的启动参数【无法通过在<HTA:APPLICATION>元素中设置来定义,是受调用传递的参数控制的】,参数可以在Script块中通过<Id>.commandLine来引用,如本程序则是Test.commandLine。它的各个参数之间以空格分隔;包含空格的参数请在调用时,用引号引起来,否则会被当成多个参数;第一个参数总是HTA程序的文件路径;其参数需要自己手动解析;因为这个属性的存在,你可以方便地使用JS/VBS总调用各种HTA界面,而后通过window.onunload来记录下结果,以方便总调程序获取HTA交互结果

    【6】contextMenu:Yes/No=>是否显示右键上下文菜单

    【7】icon:stirng=>设置应用程序的图标文件路径,须是有效的ico图标文件,如icon="c:\a.ico"

    【8】innerBorder:Yes/No=>是否显示内部边框的3D边界

    【9】navigable:Yes/No=>是否在本窗口加载新navigate(url)的链接,当navigable=Yes时,window.navigate(url)方法加载的页面将在本HTA窗口中加载,而不是新的浏览器页面

    【10】maximizeButton:Yes/No=>是否显示最大化按钮,默认值Yes

    【11】minimizeButton:Yes/No=>是否显示最小化按钮,默认值Yes

    【12】scroll:Yes/No=>是否在页面右侧显示垂直滚动条,默认值是Yes

    【13】scrollFlat:Yes/No=>设置滚动条是3D(No)或者平面的(Yes)

    【14】selection:Yes/No=>设置内容是否可以被鼠标或键盘选中

    【15】showInTaskbar:Yes/No=>是否在任务栏显示任务图标,默认值Yes

    【16】singleInstance:Yes/No=>是否同时只允许有一个运行实例【进程】,默认值No。当第二次启动同一个HTA程序时, mshta.exe通过上面applicaitonName来区分是否名称已占用

    【17】sysMenu:Yes/No=>是否允许显示标题栏右键菜单,默认值是Yes

    【18】version:string=>设置应用程序的版本,如"1.0",默认值为""

    【19】windowState:enum=>设置HTA窗口的显示类型,默认值为Normal

    所有允许的值:     Normal              常规

                            Minimize             最小化

                            Maximize            最大化

    3.HTA窗口事件

    窗口级事件如下:

    window.onafterprint                 此事件在HTA窗口的打印工作完成之后发生

    window.onbeforeprint              此事件在HTA窗口的打印工作开始之前发生

    window.onbeforeunload           此事件在HTA窗口被销毁前发生

    window.onblur                        此事件在将键盘焦点从HTA窗口移开时发生

    window.onerror                      此事件在HTA程序出现错误时发生

    window.onfocus                     此事件在HTA窗口获得焦点时发生

    window.onhelp                       此事件在HTA窗口有焦点时按下F1帮助键时发生

    window.onload                       此事件在HTA窗口被成功加载后发生

    window.onresize                     此事件在HTA窗口的大小改变时发生

    window.onscroll                      此事件在对HTA窗口执行滚动操作时发生

    window.onunload                    此事件在HTA窗口被销毁时发生,切记此时alert不再可用

    4.可用与不可用对象

      HTA中脚本宿主对象WScript/WshArguments/WshNamed/WshUnnamed对象是无法使用的,其它的如WshShell/WshEnvironment/WshShortcut/WshSpecialFolders/WshUrlShortcut/WshNetwork对象等依然可用。

      脚本运行时对象,即Dictionary和Scripting.FileSystemObject对象仍然可用,可以通过window.unload事件来将界面交互表单用文件记录下来,以方便多脚本协作。

         HTA程序的顶层对象是HtmlWindow2对象,参见Microsoft HTML Object Library库。

         可通过<id>.<AttributeName>访问本HTA程序的各个<HTA:APPLICATION>属性项。

    5.几个用得着的自编功能补充函数

    【1】GetCmdArgs从命令行参数中解析出参数

     [1]JS版本

     1 function GetCmdArgs(cmdArgs)
     2 {
     3 //本函数解析命令行参数
     4 //1.左引号前面必须是空格,否则引号应视作参数内容,而非边界
     5 //2.右引号后面必须是空格,否则引号应视作参数内容,而非边界
     6 //3.最后面的那个参数,如果引号边界没有配对,即无右引号,那么
     7 //  最后的那个参数的左引号当重新认定为内容,而非边界
     8 //4.多个空格间隔两个参数,防止后面的空格间隔符被归入内容中
     9 //5.防止命令行参数最后有多个无意义空格的情况
    10     var args=new Array(''),isComplete=true
    11     for(var i=0;i<cmdArgs.length;i++)
    12     {
    13         var c=cmdArgs.charAt(i);
    14         if(c=='"')
    15             if(isComplete)
    16                 if(i==0)
    17                     isComplete=!isComplete;
    18                 else
    19                     if(cmdArgs.charAt(i-1)==" ")
    20                         isComplete=!isComplete;
    21                     else
    22                         args[args.length-1]+=c;
    23             else 
    24                 if(i==cmdArgs.length-1)
    25                     isComplete=!isComplete;
    26                 else
    27                     if(cmdArgs.charAt(i+1)==" ")
    28                         isComplete=!isComplete;
    29                     else
    30                         args[args.length-1]+=c;
    31 
    32         else
    33             if(c==" "&&isComplete&&args[args.length-1]!="")
    34                 args.push('')
    35             else
    36                 args[args.length-1]+=c;
    37     }
    38     if(!isComplete)
    39     {
    40         var arg='"'+args.pop();
    41         if(arg.indexOf(" ")!=-1)
    42             args=args.concat(arg.split(" "));
    43     }
    44     if(args[args.length-1]=="")
    45         args.pop();
    46     return args
    47 }

    [2]VBS版本

     1 Function GetCmdArgs(cmdArgs)
     2 '本函数解析命令行参数
     3 '1.左引号前面必须是空格,否则引号应视作参数内容,而非边界
     4 '2.右引号后面必须是空格,否则引号应视作参数内容,而非边界
     5 '3.最后面的那个参数,如果引号边界没有配对,即无右引号,那么
     6 '  最后的那个参数的左引号当重新认定为内容,而非边界
     7 '4.多个空格间隔两个参数,防止后面的空格间隔符被归入内容中
     8 '5.防止命令行参数最后有多个无意义空格的情况
     9     Dim args(),isComplete,c,args2,i,index
    10     isComplete=True
    11     ReDim args(0)
    12     For i=1 To Len(cmdArgs)
    13         c=Mid(cmdargs,i,1)
    14         If c=Chr(34) Then
    15             If isComplete Then
    16                 If i=1 Then
    17                     isComplete=Not isComplete
    18                 Else
    19                     If Mid(cmdArgs,i-1,1)=" " Then
    20                         isComplete=Not isComplete
    21                     Else
    22                         args(UBound(args))=args(UBound(args))+c
    23                     End If
    24                 End If        
    25             Else 
    26                 If i=Len(cmdArgs) Then
    27                     isComplete=Not isComplete
    28                 Else
    29                     If Mid(cmdArgs,i+1,1)=" " Then
    30                         isComplete=Not isComplete
    31                     Else
    32                         args(UBound(args))=args(UBound(args))+c
    33                     End If
    34                 End If        
    35             End If
    36         Else 
    37             If c=" " And isComplete=True Then
    38                 If args(UBound(args))<>"" Then
    39                     ReDim Preserve args(UBound(args)+1) 
    40                 End If 
    41             Else
    42                 args(UBound(args))=args(UBound(args))+c
    43             End if
    44         End If
    45     Next
    46     If isComplete=False Then
    47         args(UBound(args))=Chr(34)+args(UBound(args))
    48         If InStr(args(UBound(args))," ")<>0 Then
    49             args2=Split(args(UBound(args)))
    50             index=UBound(args)
    51             ReDim Preserve args(UBound(args2)+index)
    52             For i=index To UBound(args2)+index
    53                 args(i)=args2(i-index)
    54             Next
    55         End If
    56     End If
    57     If args(UBound(args))="" Then
    58         ReDim Preserve args(UBound(args)-1)
    59     End If
    60     GetCmdArgs=args
    61 End Function

    6.示例

    [1]JS版本

      1 <Html>
      2 <Head>
      3 <Title>HTA Test</Title>
      4 <HTA:APPLICATION 
      5   applicationName="HTA_Test"
      6   border="Dialog"
      7   borderStyle="Raized"
      8   caption="Yes"
      9   contextMenu="No"
     10   icon="E:文档图标Ico图标大全Icon资源大全chemical.ico"
     11   id="Test"
     12   innerBoder="Yes"
     13   navigable="Yes"
     14   maximizeButton="No"
     15   minimizeButton="No"
     16   scroll="No"
     17   scrollFlat="Yes"
     18   selection="Yes"
     19   showInTaskbar="Yes"
     20   singleInstance="No"
     21   sysMenu="Yes"
     22   version="1.0" 
     23   windowState="Normal" />
     24 </Head>
     25 <script language="VBScript">
     26 Function GetCmdArgs(cmdArgs)
     27 '本函数解析命令行参数
     28 '1.左引号前面必须是空格,否则引号应视作参数内容,而非边界
     29 '2.右引号后面必须是空格,否则引号应视作参数内容,而非边界
     30 '3.最后面的那个参数,如果引号边界没有配对,即无右引号,那么
     31 '  最后的那个参数的左引号当重新认定为内容,而非边界
     32 '4.多个空格间隔两个参数,防止后面的空格间隔符被归入内容中
     33 '5.防止命令行参数最后有多个无意义空格的情况
     34     Dim args(),isComplete,c,args2,i,index
     35     isComplete=True
     36     ReDim args(0)
     37     For i=1 To Len(cmdArgs)
     38         c=Mid(cmdargs,i,1)
     39         If c=Chr(34) Then
     40             If isComplete Then
     41                 If i=1 Then
     42                     isComplete=Not isComplete
     43                 Else
     44                     If Mid(cmdArgs,i-1,1)=" " Then
     45                         isComplete=Not isComplete
     46                     Else
     47                         args(UBound(args))=args(UBound(args))+c
     48                     End If
     49                 End If        
     50             Else 
     51                 If i=Len(cmdArgs) Then
     52                     isComplete=Not isComplete
     53                 Else
     54                     If Mid(cmdArgs,i+1,1)=" " Then
     55                         isComplete=Not isComplete
     56                     Else
     57                         args(UBound(args))=args(UBound(args))+c
     58                     End If
     59                 End If        
     60             End If
     61         Else 
     62             If c=" " And isComplete=True Then
     63                 If args(UBound(args))<>"" Then
     64                     ReDim Preserve args(UBound(args)+1) 
     65                 End If 
     66             Else
     67                 args(UBound(args))=args(UBound(args))+c
     68             End if
     69         End If
     70     Next
     71     If isComplete=False Then
     72         args(UBound(args))=Chr(34)+args(UBound(args))
     73         If InStr(args(UBound(args))," ")<>0 Then
     74             args2=Split(args(UBound(args)))
     75             index=UBound(args)
     76             ReDim Preserve args(UBound(args2)+index)
     77             For i=index To UBound(args2)+index
     78                 args(i)=args2(i-index)
     79             Next
     80         End If
     81     End If
     82     If args(UBound(args))="" Then
     83         ReDim Preserve args(UBound(args)-1)
     84     End If
     85     GetCmdArgs=args
     86 End Function
     87 </script>
     88 <Script language="JavaScript">
     89 //=====================================================
     90 //HTA是HTML Application的缩写(HTML应用程序),直接将HTML
     91 //保存成HTA的格式,就成了一个独立的应用软件,也可以嵌入
     92 //<HTA:APPLICATION>元素来增强对该应用程序的控制
     93 //=====================================================
     94 //以下是<HTA:APPLICATION>元素可用属性,可用来设置HTA窗口
     95 //的各种细节【记住HTA:APPLICATION这个APPLICATION不可少,
     96 //且这里必须全大写,否则以下属性无效】
     97 //【1】applicationName:string=>设置HTA程序的名称,在singleInstance
     98 // 属性设置为"Yes"时有用
     99 //【2】border:enum=>设置HTA窗口的边框类型,默认值Thick
    100 // 所有允许的值:     Thick         粗边框
    101 //                    Dialog        对话框【大小不可调整】
    102 //                    None          无边框【无标题栏】
    103 //                    Thin          窄边框 
    104 //【3】borderSytle:enum=>设置HTA窗口的边框风格,默认值是Normal
    105 // 所有允许的值:     Normal     普通
    106 //                    Complex    凹凸格式组合边框
    107 //                    Raised     凸出的3D边框
    108 //                    Static     3D边框格式
    109 //                    Sunken     凹进的3D边框
    110 //【4】caption:Yes/No=>设置HTA窗口是否显示标题栏,默认值为Yes
    111 //【5】commandLine:string=>此属性保存了HTA程序的启动参数【无法通过
    112 // 在<HTA:APPLICATION>元素中设置来定义,是受调用传递的参数控制的】,
    113 // 参数可以在Script块中通过<Id>.commandLine来引用,如本程序则是
    114 // Test.commandLine。它的各个参数之间以空格分隔;包含空格的参数请
    115 // 在调用时,用引号引起来,否则会被当成多个参数;第一个参数总是HTA
    116 // 程序的文件路径;其参数需要自己手动解析;因为这个属性的存在,你可
    117 // 以方便地使用js/vbs总调用各种HTA界面,而后通过window.onunload来记录
    118 // 下结果,以方便总调程序获取HTA交互结果
    119 //【6】contextMenu:Yes/No=>是否显示右键上下文菜单,默认值Yes
    120 //【7】icon:stirng=>设置应用程序的图标文件路径,须是有效的ico图标文
    121 // 件,如icon="c:\a.ico"
    122 //【8】innerBorder:Yes/No=>是否显示内部边框的3D边界,默认值Yes
    123 //【9】navigable:Yes/No=>是否在本窗口加载新navigate(url)的链接,当
    124 // navigable=Yes时,window.navigate(url)方法加载的页面将在本HTA窗口
    125 // 中加载,而不是新的浏览器页面
    126 //【10】maximizeButton:Yes/No=>是否显示最大化按钮,默认值Yes
    127 //【11】minimizeButton:Yes/No=>是否显示最小化按钮,默认值Yes
    128 //【12】scroll:Yes/No=>是否在页面右侧显示垂直滚动条,默认值是Yes
    129 //【13】scrollFlat:Yes/No=>设置滚动条是3D(No)或者平面的(Yes)
    130 //【14】selection:Yes/No=>设置内容是否可以被鼠标或键盘选中
    131 //【15】showInTaskbar:Yes/No=>是否在任务栏显示任务图标,默认值Yes
    132 //【16】singleInstance:Yes/No=>是否同时只允许有一个运行实例【进程】,
    133 // 默认值No。当第二次启动同一个HTA程序时, mshta.exe通过上面
    134 // applicaitonName来区分是否名称已占用
    135 //【17】sysMenu:Yes/No=>是否允许显示标题栏右键菜单,默认值是Yes
    136 //【18】version:string=>设置应用程序的版本,如"1.0",默认值为""
    137 //【19】windowState:enum=>设置HTA窗口的显示类型,默认值为Normal
    138 // 所有允许的值:     Normal              常规
    139 //                    Minimize            最小化
    140 //                    Maximize            最大化
    141 //=====================================================
    142 //参见Microsoft HTML Object Library库
    143 //1.以下事件是可以正常发生的:
    144 //window.onafterprint             此事件在HTA窗口的打印工作完成之后发生
    145 //window.onbeforeprint            此事件在HTA窗口的打印工作开始之前发生
    146 //window.onbeforeunload           此事件在HTA窗口被销毁前发生
    147 //window.onblur                   此事件在将键盘焦点从HTA窗口移开时发生
    148 //window.onerror                  此事件在HTA程序出现错误时发生
    149 //window.onfocus                  此事件在HTA窗口获得焦点时发生
    150 //window.onhelp                   此事件在HTA窗口有焦点时按下F1帮助键时发生
    151 //window.onload                   此事件在HTA窗口被成功加载后发生
    152 //window.onresize                 此事件在HTA窗口的大小改变时发生
    153 //window.onscroll                 此事件在对HTA窗口执行滚动操作时发生
    154 //window.onunload                 此事件在HTA窗口被销毁时发生,切记此时alert不再可用
    155 //2.可以通过IHTMLWindow2接口定义的其它方法属性来操纵HTA程序
    156 //  的窗口。
    157 //3.HTA中仍然可以使用Scripting.FileSystemObject对象来对文件
    158 //  系统进行读写操作,可利用Window_OnUnload事件来收集HTA表单
    159 //  的数据,记录为文本,方便常规的VBS脚本程序通过GUI界面来进
    160 //  行交互,提升交互体验与使用的方便性。
    161 //4.HTA中脚本宿主对象WScript/WshArguments/WshNamed/WshUnnamed
    162 //  对象是无法使用的,其它的如WshShell/WshEnvironment/
    163 //  WshShortcut/WshSpecialFolders/WshUrlShortcut/WshNetwork
    164 //  对象等依然可用
    165 //-----------------------------------------------------
    166 //HTA窗口的打印控制事件
    167 // window.onafterprint=function()
    168 // {
    169 //    此事件在HTA窗口的打印工作完成之后发生
    170     // alert("OnAfterPrint");
    171 // }
    172 // window.onbeforeprint=function()
    173 // {
    174 //    此事件在HTA窗口的打印工作开始之前发生
    175     // alert("OnBeforePrint");
    176 // }
    177 //-----------------------------------------------------
    178 // window.onblur=function()
    179 // {
    180 //    此事件在将键盘焦点从HTA窗口移开时发生
    181     // alert("OnBlur");
    182 // }
    183 // window.onerror=function()
    184 // {
    185 //    此事件在HTA程序出现错误时发生
    186     // alert("OnError");
    187 // }
    188 // window.onfocus=function()
    189 // {
    190 //    此事件在HTA窗口获得焦点时发生
    191     // alert("OnFocus");
    192 // }
    193 // window.onhelp=function()
    194 // {
    195 //    此事件在HTA窗口有焦点时按下F1帮助键时发生
    196     // alert("OnHelp");
    197 // }
    198 //-----------------------------------------------------
    199 //HTA窗口的加载与销毁事件
    200 var es,values;
    201 var ws=new ActiveXObject("WScript.Shell");
    202 var fso=new ActiveXObject("Scripting.FileSystemObject");
    203 
    204 function GetCmdArgs(cmdArgs)
    205 {
    206 //本函数解析命令行参数
    207 //1.左引号前面必须是空格,否则引号应视作参数内容,而非边界
    208 //2.右引号后面必须是空格,否则引号应视作参数内容,而非边界
    209 //3.最后面的那个参数,如果引号边界没有配对,即无右引号,那么
    210 //  最后的那个参数的左引号当重新认定为内容,而非边界
    211 //4.多个空格间隔两个参数,防止后面的空格间隔符被归入内容中
    212 //5.防止命令行参数最后有多个无意义空格的情况
    213     var args=new Array(''),isComplete=true;
    214     for(var i=0;i<cmdArgs.length;i++)
    215     {
    216         var c=cmdArgs.charAt(i);
    217         if(c=='"')
    218             if(isComplete)
    219                 if(i==0)
    220                     isComplete=!isComplete;
    221                 else
    222                     if(cmdArgs.charAt(i-1)==" ")
    223                         isComplete=!isComplete;
    224                     else
    225                         args[args.length-1]+=c;
    226             else 
    227                 if(i==cmdArgs.length-1)
    228                     isComplete=!isComplete;
    229                 else
    230                     if(cmdArgs.charAt(i+1)==" ")
    231                         isComplete=!isComplete;
    232                     else
    233                         args[args.length-1]+=c;
    234 
    235         else
    236             if(c==" "&&isComplete&&args[args.length-1]!="")
    237                 args.push('');
    238             else
    239                 args[args.length-1]+=c;
    240     }
    241     if(!isComplete)
    242     {
    243         var arg='"'+args.pop();
    244         if(arg.indexOf(" ")!=-1)
    245             args=args.concat(arg.split(" "));
    246     }
    247     if(args[args.length-1]=="")
    248         args.pop();
    249     return args
    250 }
    251 
    252 function isGoodVarName(name){
    253     var arr=name.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/g);
    254     if(arr!=null&&arr.length==1)
    255         return true;
    256     else
    257         return false;
    258 }
    259 
    260 function isNumberStr(numStr){
    261     try{num=eval('new Number('+numStr+')');}
    262     catch(e){return false;}
    263     return true;
    264 }
    265 
    266 function center_clicked(){
    267     var e=self.document.getElementById('left');
    268     e.disabled=!e.disabled;
    269     var e=self.document.getElementById('top');
    270     e.disabled=!e.disabled;
    271 }
    272 
    273 function getHta(){
    274     var xml=new ActiveXObject("MSXML2.DOMDocument");
    275     var eHta=xml.createElement('HTA:APPLICATION');
    276     var names=('applicationName;border;borderStyle;caption;contextMenu;'+
    277         'icon;id;innerBorder;navigable;maximizeButton;minimizeButton;'+
    278         'scroll;scrollFlat;selection;showInTaskbar;singleInstance;'+
    279         'sysMenu;version;windowState').split(";");
    280     for(var i=0;i<names.length;i++)
    281         eHta.setAttribute(names[i],values.Item(names[i]));
    282     var htaSettingsStr=eHta.xml;
    283     htaSettingsStr=htaSettingsStr.replace(/(") (w)/ig,'$1
     $2');
    284     htaSettingsStr=htaSettingsStr.replace(/(w) (w+=")/ig,'$1
     $2');
    285     return htaSettingsStr;
    286 }
    287 
    288 function btnOk_clicked(){
    289     es=new Elements();
    290     values=new ActiveXObject("Scripting.Dictionary");
    291     //get all values
    292     for(var i in es)
    293         if(i!='getValue')
    294             values.Add(i,es.getValue(es[i]));
    295     //check values
    296     //check 'id'
    297     var value=values.Item('id');
    298     if(values.Item('commandLine')=='Yes'&&value==''&&!isGoodVarName(value)){
    299         alert('The value of "id" must be a good varname when the commandLine is required!!!');
    300         return;
    301     }
    302     //check 'left','top','width','height'
    303     var names=new Array('left','top','width','height');
    304     for(var i=0;i<names.length;i++){
    305         var name=names[i];
    306         if(values.Item('center')=='Yes')
    307             if(name=='left'||name=='top')
    308                 continue;
    309         value=values.Item(name);
    310         if(isNumberStr(value)){
    311             values.Item(name)=eval('new Number('+value+')');
    312             value=values.Item(name);
    313             var maxValue=eval('self.window.screen.'+name);
    314             if(value>maxValue||value<0){
    315                 alert("The value of '"+name+"' must be 0-"+maxValue);
    316                 return;
    317             }            
    318         }
    319         else{
    320             alert("The value of '"+name+"' is not a number string.");
    321             return;
    322         }
    323     }
    324     //htaPath
    325     var htaPath;
    326     do{
    327         htaPath=fso.GetAbsolutePathName(fso.GetBaseName(fso.GetTempName())+'.hta');
    328     }while(fso.FileExists(htaPath));
    329     //start to write the hta file
    330     var txt=fso.CreateTextFile(htaPath);
    331     txt.WriteLine('<html>
    <head>
    <title>'+values.Item('title')+'</title>');
    332     txt.WriteLine(getHta());
    333     txt.WriteLine('<script language="'+values.Item('language')+'">');
    334     if(values.Item('language')=='JavaScript'){
    335         if(values.Item('commandLine')=='Yes'){
    336             txt.WriteLine(GetCmdArgs); 
    337             txt.WriteLine('');
    338         }
    339                    
    340         if(values.Item('center')=='Yes'){
    341             var width=values.Item('width'),height=values.Item('height');
    342             if(width!=0&&height!=0){
    343                 txt.WriteLine('
    self.resizeTo('+width+','+height+');');
    344                 txt.WriteLine('self.moveTo((self.screen.width-'+width+
    345                     ')/2,(self.screen.height-'+height+')/2);
    ');
    346             }
    347         }
    348         else{
    349             var left=values.Item('left'),top=values.Item('top');
    350             var width=values.Item('width'),height=values.Item('height');
    351             if(left!=0&&top!=0&&width!=0&&height!=0){
    352                 txt.WriteLine('
    self.resizeTo('+width+','+height+');');
    353                 txt.WriteLine('self.moveTo('+left+','+top+');
    ');
    354             }
    355         }
    356         for(var e=new Enumerator(values);!e.atEnd();e.moveNext()){
    357             name=e.item();
    358             if(name.indexOf('window')==0&&values.Item(name)=='Yes'){
    359                 name=name.replace('_','.');
    360                 txt.WriteLine(name+'=function(){
        
    }
    ');
    361             } 
    362         }
    363     }
    364     else{
    365         if(values.Item('commandLine')=='Yes'){
    366             var stream=fso.OpenTextFile(GetCmdArgs(Test.commandLine)[0]);
    367             for(var i=1;i<=86;i++)
    368                 if(i<=25)
    369                     stream.SkipLine();
    370                 else
    371                     txt.WriteLine(stream.ReadLine());
    372             stream.Close();
    373             txt.WriteLine('');
    374         }     
    375         if(values.Item('center')=='Yes'){
    376             var width=values.Item('width'),height=values.Item('height');
    377             if(width!=0&&height!=0){
    378                 txt.WriteLine('
    self.resizeTo '+width+','+height);
    379                 txt.WriteLine('self.moveTo (self.screen.width-'+width+
    380                     ')/2,(self.screen.height-'+height+')/2
    ');
    381             }
    382         }
    383         else{
    384             var left=values.Item('left'),top=values.Item('top');
    385             var width=values.Item('width'),height=values.Item('height');
    386             if(left!=0&&top!=0&&width!=0&&height!=0){
    387                 txt.WriteLine('
    self.resizeTo '+width+','+height);
    388                 txt.WriteLine('self.moveTo '+left+','+top);
    389                 txt.WriteLine('');
    390             }
    391         }
    392         for(var e=new Enumerator(values);!e.atEnd();e.moveNext()){
    393             name=e.item();
    394             if(name.indexOf('window')==0&&values.Item(name)=='Yes'){
    395                 txt.WriteLine('Sub '+name+'
        
    End Sub
    ');
    396             } 
    397         }       
    398     }
    399     txt.WriteLine('</script>');
    400     txt.WriteLine('</head>
    <body>
    </body>
    </html>');
    401     txt.Close();
    402     self.close();
    403 }
    404 
    405 function btnCancel_clicked(){
    406     var btn=ws.Popup("The settings will be gave up, a"+
    407         "re you sure?",0,"Warnning",4+32);
    408     if(btn==6)
    409         self.close();
    410 }
    411 
    412 function Elements(){
    413      this.getValue=function(e){
    414         switch(e.type){
    415             case "checkbox":
    416                 return e.checked?'Yes':'No';
    417             case "text":
    418             case "file":
    419                 return e.value;
    420             case "select-one":
    421             case "select-multiple":
    422                 index=e.selectedIndex
    423                 return e.options[index].text;
    424             default:
    425                 throw new Error(5001,"The element '"+e.id+"' is not the right type.");
    426         }
    427     }
    428     for(var i=0;i<self.document.all.length;i++){
    429         var el=self.document.all[i];
    430         if(el.id!=''&&typeof el.type!='undefined'&&el.type!='button')
    431             eval('this.'+el.id+'=el');
    432     }  
    433 }
    434 window.onload=function()
    435 {
    436     //此事件在HTA窗口被成功加载后发生
    437     var width=800,height=685;
    438     self.resizeTo(width,height);
    439     self.moveTo((self.screen.availWidth-width)/2,
    440         (self.screen.availHeight-height)/2);
    441     alert("OnLoad");
    442     //让我们来看看本程序接收到哪些命令行参数
    443     //你可以命令行执行HTATest.hta "hello world" 32
    444     alert("Test.CommandLine: "+Test.commandLine);
    445     alert("ApplicationName = "+Test.applicationName);
    446     //其它属性也可只读访问,切记使用Id名来引用各个属性
    447     var args=GetCmdArgs(Test.commandLine);
    448     for(var i=0;i<args.length;i++) 
    449         alert(args[i]);
    450 }
    451 // window.onbeforeunload=function()
    452 // {
    453 //    此事件在HTA窗口被销毁前发生
    454     // alert("OnBeforeUnload" );
    455 // }
    456 window.onunload=function()
    457 {
    458     //此事件在HTA窗口被销毁时发生,切记alert不再可用
    459     var ws=new ActiveXObject("WScript.Shell")
    460     ws.Popup("OnUnload");
    461     //-------------------------------------
    462     dPath=ws.SpecialFolders("Desktop")
    463     pPath=ws.SpecialFolders("Programs")
    464     //-------------------------------------
    465     var sc=ws.CreateShortcut(dPath+"\Programs.lnk")
    466     sc.TargetPath=pPath
    467     sc.WindowStyle=3
    468     sc.Hotkey="Ctrl+Alt+j"
    469     sc.Save();
    470     //-------------------------------------
    471     var sc=ws.CreateShortcut(dPath+"\baidu.url")
    472     sc.TargetPath="http://www.baidu.com"
    473     sc.Save();
    474     //-------------------------------------
    475     var fso=new ActiveXObject("Scripting.FileSystemObject")
    476     var txt=fso.CreateTextFile("Output.txt")
    477     var nt=new ActiveXObject("WScript.Network")
    478     txt.WriteLine("Domain = "+nt.UserDomain);
    479     txt.WriteLine("Computer Name = "+nt.ComputerName);
    480     txt.WriteLine("User Name = " + nt.UserName );
    481     txt.WriteLine("=====================================");
    482     var oDrives=nt.EnumNetworkDrives();
    483     var oPrinters=nt.EnumPrinterConnections();
    484     txt.WriteLine("Network drive mappings:");
    485     for(var i=0;i<oDrives.length;i+=2)
    486         txt.WriteLine("Drive【"+oDrives.item(i)+"】="+
    487             oDrives.item(i+1));
    488     txt.WriteLine("=====================================");
    489     txt.WriteLine("Network printer mappings:");
    490     for(var i=0;i<oPrinters.length;i+=2)
    491         txt.WriteLine("Port【"+oPrinters.item(i)+"】="+
    492             oPrinters.item(i+1));
    493     txt.WriteLine("=====================================");
    494     txt.Close();
    495     ws.Run("Notepad.exe Output.txt")
    496 }
    497 //-----------------------------------------------------
    498 // window.onresize=function()
    499 // {
    500 //    此事件在HTA窗口的大小改变时发生
    501     // alert("OnResize");
    502 // }
    503 // window.onscroll=function() 
    504 // {
    505 //    此事件在对HTA窗口执行滚动操作时发生
    506     // alert("OnScroll");
    507 // }
    508 //=====================================================
    509 </Script>
    510 <Body>
    511 <table width="100%" border="1">
    512 <col />
    513 <col width="16%" />
    514 <col width="46%" />
    515 <tr>
    516 <th>选择事件</th>
    517 <th>属性</th>
    518 <th>设置值</th>
    519 </tr>
    520 <tr>
    521 <td><input type="checkbox" id="window_onafterprint">window.onafterprint</td>
    522 <td align="right">applicationName: </td>
    523 <td><input type="text" id="applicationName"></td>
    524 </tr>
    525 <tr>
    526 <td><input type="checkbox" id="window_onbeforeprint">window.onbeforeprint</td>
    527 <td align="right">border: </td>
    528 <td><select id="border">
    529   <option value="Dialog">Dialog</option>
    530   <option value="None">None</option>
    531   <option value="Thick">Thick</option>
    532   <option value="Thin">Thin</option>
    533 </select></td>
    534 </tr>
    535 <tr>
    536 <td><input type="checkbox" id="window_onbeforeunload">window.onbeforeunload</td>
    537 <td align="right">borderStyle: </td>
    538 <td><select id="borderStyle">
    539   <option value="Normal">Normal</option>
    540   <option value="Complex">Complex</option>
    541   <option value="Raised">Raised</option>
    542   <option value="Static">Static</option>
    543   <option value="Sunken">Sunken</option>
    544 </select></td>
    545 </tr>
    546 <tr>
    547 <td><input type="checkbox" id="window_onblur">window.onblur</td>
    548 <td align="right">caption: </td>
    549 <td><input type="checkbox" id="caption" checked="true">show title bar?</td>
    550 </tr>
    551 <tr>
    552 <td><input type="checkbox" id="window_onerror">window.onerror</td>
    553 <td align="right">contextMenu: </td>
    554 <td><input type="checkbox" id="contextMenu" checked="true">show contextMenu?</td>
    555 </tr>
    556 <tr>
    557 <td><input type="checkbox" id="window_onfocus">window.onfocus</td>
    558 <td align="right">icon: </td>
    559 <td><input type="file" id="icon"></td>
    560 </tr>
    561 <tr>
    562 <td><input type="checkbox" id="window_onhelp">window.onhelp</td>
    563 <td align="right">id: </td>
    564 <td><input type="text" id="id"></td>
    565 </tr>
    566 <tr>
    567 <td><input type="checkbox" id="window_onload" checked="true">window.onload</td>
    568 <td align="right">innerBorder: </td>
    569 <td><input type="checkbox" id="innerBorder" checked="true">show inner border?</td>
    570 </tr>
    571 <tr>
    572 <td><input type="checkbox" id="window_onresize">window.onresize</td>
    573 <td align="right">navigable: </td>
    574 <td><input type="checkbox" id="navigable" checked="true">navigate pages in current page?</td>
    575 </tr>
    576 <tr>
    577 <td><input type="checkbox" id="window_onscroll">window.onscroll</td>
    578 <td align="right">maximizeButton: </td>
    579 <td><input type="checkbox" id="maximizeButton" checked="true">show maximize button?</td>
    580 </tr>
    581 <tr>
    582 <td><input type="checkbox" id="window_onunload">window.onunload</td>
    583 <td align="right">minimizeButton: </td>
    584 <td><input type="checkbox" id="minimizeButton" checked="true">show minimize button?</td>
    585 </tr>
    586 <tr>
    587 <td>
    588 <table width="100%">
    589 <col width="38%" />
    590 <col />
    591 <tr>
    592 <td align="right">left: </td>
    593 <td><input type="text" id="left" disabled="true" value="0"></td>
    594 </tr>
    595 </table>
    596 </td>
    597 <td align="right">scroll: </td>
    598 <td><input type="checkbox" id="scroll" checked="true">show scroll?</td>
    599 </tr>
    600 <tr>
    601 <td>
    602 <table width="100%">
    603 <col width="38%" />
    604 <col />
    605 <tr>
    606 <td align="right">top: </td>
    607 <td><input type="text" id="top" disabled="true" value="0"></td>
    608 </tr>
    609 </table>
    610 </td>
    611 <td align="right">scrollFlat: </td>
    612 <td><input type="checkbox" id="scrollFlat" checked="true">show scroll in flat?</td>
    613 </tr>
    614 <tr>
    615 <td>
    616 <table width="100%">
    617 <col width="38%" />
    618 <col />
    619 <tr>
    620 <td align="right"> </td>
    621 <td><input type="text" id="width" value="0"></td>
    622 </tr>
    623 </table>
    624 </td>
    625 <td align="right">selection: </td>
    626 <td><input type="checkbox" id="selection" checked="true">allow user to select the page elements?</td>
    627 </tr>
    628 <tr>
    629 <td>
    630 <table width="100%">
    631 <col width="38%" />
    632 <col />
    633 <tr>
    634 <td align="right">height: </td>
    635 <td><input type="text" id="height" value="0"></td>
    636 </tr>
    637 </table>
    638 </td>
    639 <td align="right">showInTaskbar: </td>
    640 <td><input type="checkbox" id="showInTaskbar" checked="true">show in taskbar?</td>
    641 </tr>
    642 <tr>
    643 <td>
    644 <table width="100%">
    645 <col width="38%" />
    646 <col />
    647 <tr>
    648 <td align="right">center: </td>
    649 <td><input type="checkbox" id="center" checked="true" onclick="center_clicked()">center screen?</td>
    650 </tr>
    651 </table>
    652 </td>
    653 <td align="right">singleInstance: </td>
    654 <td><input type="checkbox" id="singleInstance">run as a single instance application?</td>
    655 </tr>
    656 <tr>
    657 <td>
    658 <table width="100%">
    659 <col width="38%" />
    660 <col />
    661 <tr>
    662 <td align="right">language: </td>
    663 <td><select id="language">
    664   <option value="JavaScript">JavaScript</option>
    665   <option value="VBScript">VBScript</option>
    666 </select></td>
    667 </tr>
    668 </table>
    669 </td>
    670 <td align="right">sysMenu: </td>
    671 <td><input type="checkbox" id="sysMenu" checked="true">show system menu?</td>
    672 </tr>
    673 <tr>
    674 <td>
    675 <table width="100%">
    676 <col width="38%" />
    677 <col />
    678 <tr>
    679 <td align="right">commandLine: </td>
    680 <td><input type="checkbox" id="commandLine">Receive arguments?</td>
    681 </tr>
    682 </table>
    683 </td>
    684 <td align="right">version: </td>
    685 <td><input type="text" id="version" value="1.0"></td>
    686 </tr>
    687 <tr>
    688 <td>
    689 <table width="100%">
    690 <col width="38%" />
    691 <col />
    692 <tr>
    693 <td align="right">title: </td>
    694 <td><input type="text" id="title"></td>
    695 </tr>
    696 </table>
    697 </td>
    698 <td align="right">windowState: </td>
    699 <td><select id="windowState">
    700   <option value="Normal">Normal</option>
    701   <option value="Minimize">Minimize</option>
    702   <option value="Maximize">Maximize</option>
    703 </select></td>
    704 </tr>
    705 </table>
    706 <center>
    707 <input type="button" id="btnOk" value="  Ok  " onclick="btnOk_clicked()">
    708 <input type="button" id="btnCancel" value="Cancel" onclick="btnCancel_clicked()">
    709 </center>
    710 </Body>
    711 </Html>

    [2]VBS版本

      1 <Html>
      2 <Head>
      3 <Title>HTA Test</Title>
      4 <HTA:APPLICATION 
      5   applicationName="HTA_Test"
      6   border="Thick"
      7   borderStyle="Raized"
      8   caption="Yes"
      9   contextMenu="No"
     10   icon="E:文档图标Unclassified ICO2WAY.ICO"
     11   id="Test"
     12   innerBoder="Yes"
     13   navigable="Yes"
     14   maximizeButton="No"
     15   minimizeButton="No"
     16   scroll="Yes"
     17   scrollFlat="Yes"
     18   selection="Yes"
     19   showInTaskbar="Yes"
     20   singleInstance="No"
     21   sysMenu="Yes"
     22   version="1.0" 
     23   windowState="Normal" />
     24 </Head>
     25 <Script language="VBScript">
     26 '=====================================================
     27 'HTA是HTML Application的缩写(HTML应用程序),直接将HTML
     28 '保存成HTA的格式,就成了一个独立的应用软件,也可以嵌入
     29 '<HTA:APPLICATION>元素来增强对该应用程序的控制
     30 '=====================================================
     31 '以下是<HTA:APPLICATION>元素可用属性,可用来设置HTA窗口
     32 '的各种细节【记住HTA:APPLICATION这个APPLICATION不可少,
     33 '且这里必须全大写,否则以下属性无效】
     34 '【1】applicationName:string=>设置HTA程序的名称,在singleInstance
     35 ' 属性设置为"Yes"时有用
     36 '【2】border:enum=>设置HTA窗口的边框类型,默认值Thick
     37 ' 所有允许的值:     Thick         粗边框
     38 '                    Dialog        对话框【大小不可调整】
     39 '                    None          无边框【无标题栏】
     40 '                    Thin          窄边框
     41 '【3】borderSytle:enum=>设置HTA窗口的边框风格,默认值是Normal
     42 ' 所有允许的值:     Normal     普通
     43 '                    Complex    凹凸格式组合边框
     44 '                    Raised     凸出的3D边框
     45 '                    Static     3D边框格式
     46 '                    Sunken     凹进的3D边框
     47 '【4】caption:Yes/No=>设置HTA窗口是否显示标题,默认值为Yes
     48 '【5】commandLine:string=>此属性保存了HTA程序的启动参数【无法通过
     49 ' 在<HTA:APPLICATION>元素中设置来定义,是受调用传递的参数控制的】,
     50 ' 参数可以在Script块中通过<Id>.commandLine来引用,如本程序则是
     51 ' Test.commandLine。它的各个参数之间以空格分隔;包含空格的参数请
     52 ' 在调用时,用引号引起来,否则会被当成多个参数;第一个参数总是HTA
     53 ' 程序的文件路径;其参数需要自己手动解析;因为这个属性的存在,你可
     54 ' 以方便地使用js/vbs总调用各种HTA界面,而后通过window.onunload来记录
     55 ' 下结果,以方便总调程序获取HTA交互结果
     56 '【6】contextMenu:Yes/No=>是否显示右键上下文菜单
     57 '【7】icon:stirng=>设置应用程序的图标文件路径,须是有效的ico图标文
     58 ' 件,如icon="c:\a.ico"
     59 '【8】innerBorder:Yes/No=>是否显示内部边框的3D边界
     60 '【9】navigable:Yes/No=>是否在本窗口加载新navigate(url)的链接,当
     61 ' navigable=Yes时,window.navigate(url)方法加载的页面将在本HTA窗口
     62 ' 中加载,而不是新的浏览器页面
     63 '【10】maximizeButton:Yes/No=>是否显示最大化按钮,默认值Yes
     64 '【11】minimizeButton:Yes/No=>是否显示最小化按钮,默认值Yes
     65 '【12】scroll:Yes/No=>是否在页面右侧显示垂直滚动条,默认值是Yes
     66 '【13】scrollFlat:Yes/No=>设置滚动条是3D(No)或者平面的(Yes)
     67 '【14】selection:Yes/No=>设置内容是否可以被鼠标或键盘选中
     68 '【15】showInTaskbar:Yes/No=>是否在任务栏显示任务图标,默认值Yes
     69 '【16】singleInstance:Yes/No=>是否同时只允许有一个运行实例【进程】,
     70 ' 默认值No。当第二次启动同一个HTA程序时, mshta.exe通过上面
     71 ' applicaitonName来区分是否名称已占用
     72 '【17】sysMenu:Yes/No=>是否允许显示标题栏右键菜单,默认值是Yes
     73 '【18】version:string=>设置应用程序的版本,如"1.0",默认值为""
     74 '【19】windowState:enum=>设置HTA窗口的显示类型,默认值为Normal
     75 ' 所有允许的值:     Normal              常规
     76 '                    Minimize            最小化
     77 '                    Maximize            最大化
     78 '=====================================================
     79 '参见Microsoft HTML Object Library库
     80 '1.以下事件是可以正常发生的,参见HTMLWindow2这个类的事件成
     81 '  员【它们以on为前缀】,有事件图标标识的事件成员都可以被
     82 '  HTA宿主程序捕获到该事件的消息,其它的以on为前缀的事件成
     83 '  员无法被捕获到。
     84 '2.可以通过IHTMLWindow2接口定义的其它方法属性来操纵HTA程序
     85 '  的窗口。
     86 '3.HTA中仍然可以使用Scripting.FileSystemObject对象来对文件
     87 '  系统进行读写操作,可利用Window_OnUnload事件来收集HTA表单
     88 '  的数据,记录为文本,方便常规的VBS脚本程序通过GUI界面来进
     89 '  行交互,提升交互体验与使用的方便性。
     90 '4.HTA中脚本宿主对象WScript/WshArguments/WshNamed/WshUnnamed
     91 '  对象是无法使用的,其它的如WshShell/WshEnvironment/
     92 '  WshShortcut/WshSpecialFolders/WshUrlShortcut/WshNetwork
     93 '  对象等依然可用
     94 '-----------------------------------------------------
     95 'HTA窗口的打印控制事件
     96 'Sub Window_OnAfterPrint
     97     '此事件在HTA窗口的打印工作完成之后发生
     98 '    MsgBox "OnAfterPrint"
     99 'End Sub
    100 'Sub Window_OnBeforePrint
    101     '此事件在HTA窗口的打印工作开始之前发生
    102 '    MsgBox "OnBeforePrint"
    103 'End Sub
    104 '-----------------------------------------------------
    105 'Sub Window_OnBlur
    106     '此事件在将键盘焦点从HTA窗口移开时发生
    107 '    MsgBox "OnBlur"
    108 'End Sub
    109 'Sub Window_OnError
    110     '此事件在HTA程序出现错误时发生
    111 '    MsgBox "OnError"
    112 'End Sub
    113 'Sub Window_OnFocus
    114     '此事件在HTA窗口获得焦点时发生
    115 '    MsgBox "OnFocus"
    116 'End Sub
    117 'Sub Window_OnHelp
    118     '此事件在HTA窗口有焦点时按下F1帮助键时发生
    119 '    MsgBox "OnHelp"
    120 'End Sub
    121 '-----------------------------------------------------
    122 'HTA窗口的加载与销毁事件
    123 Function GetCmdArgs(cmdArgs)
    124 '本函数解析命令行参数
    125 '1.左引号前面必须是空格,否则引号应视作参数内容,而非边界
    126 '2.右引号后面必须是空格,否则引号应视作参数内容,而非边界
    127 '3.最后面的那个参数,如果引号边界没有配对,即无右引号,那么
    128 '  最后的那个参数的左引号当重新认定为内容,而非边界
    129 '4.多个空格间隔两个参数,防止后面的空格间隔符被归入内容中
    130 '5.防止命令行参数最后有多个无意义空格的情况
    131     Dim args(),isComplete,c,args2,i,index
    132     isComplete=True
    133     ReDim args(0)
    134     For i=1 To Len(cmdArgs)
    135         c=Mid(cmdargs,i,1)
    136         If c=Chr(34) Then
    137             If isComplete Then
    138                 If i=1 Then
    139                     isComplete=Not isComplete
    140                 Else
    141                     If Mid(cmdArgs,i-1,1)=" " Then
    142                         isComplete=Not isComplete
    143                     Else
    144                         args(UBound(args))=args(UBound(args))+c
    145                     End If
    146                 End If        
    147             Else 
    148                 If i=Len(cmdArgs) Then
    149                     isComplete=Not isComplete
    150                 Else
    151                     If Mid(cmdArgs,i+1,1)=" " Then
    152                         isComplete=Not isComplete
    153                     Else
    154                         args(UBound(args))=args(UBound(args))+c
    155                     End If
    156                 End If        
    157             End If
    158         Else 
    159             If c=" " And isComplete=True Then
    160                 If args(UBound(args))<>"" Then
    161                     ReDim Preserve args(UBound(args)+1) 
    162                 End If 
    163             Else
    164                 args(UBound(args))=args(UBound(args))+c
    165             End if
    166         End If
    167     Next
    168     If isComplete=False Then
    169         args(UBound(args))=Chr(34)+args(UBound(args))
    170         If InStr(args(UBound(args))," ")<>0 Then
    171             args2=Split(args(UBound(args)))
    172             index=UBound(args)
    173             ReDim Preserve args(UBound(args2)+index)
    174             For i=index To UBound(args2)+index
    175                 args(i)=args2(i-index)
    176             Next
    177         End If
    178     End If
    179     If args(UBound(args))="" Then
    180         ReDim Preserve args(UBound(args)-1)
    181     End If
    182     GetCmdArgs=args
    183 End Function
    184 
    185 Sub Window_OnLoad
    186     '此事件在HTA窗口被成功加载后发生
    187     Dim width,height
    188     width=300:height=300
    189     self.ResizeTo width,height
    190     self.MoveTo (self.screen.AvailWidth-width)/2, _
    191         (self.screen.AvailHeight-height)/2
    192     MsgBox "OnLoad"
    193     '让我们来看看本程序接收到哪些命令行参数
    194     Dim item
    195     MsgBox "Test.commandLine: " & Test.commandLine
    196     For Each item In GetCmdArgs(Test.commandLine)
    197         MsgBox item
    198     Next
    199 End Sub
    200 'Sub Window_OnBeforeUnload
    201 '    此事件在HTA窗口被销毁前发生
    202 '    MsgBox "OnBeforeUnload" 
    203 'End Sub
    204 Sub Window_OnUnload
    205     '此事件在HTA窗口被销毁时发生
    206     MsgBox "OnUnload"
    207     Set ws=CreateObject("WScript.Shell")
    208     '-------------------------------------
    209     dPath=ws.SpecialFolders("Desktop")
    210     pPath=ws.SpecialFolders("Programs")
    211     '-------------------------------------
    212     Set sc=ws.CreateShortcut(dPath & "所有程序.lnk")
    213     sc.TargetPath=pPath
    214     sc.WindowStyle=3
    215     sc.Hotkey="Ctrl+Alt+j"
    216     sc.save
    217     '-------------------------------------
    218     Set sc=ws.CreateShortcut(dPath & "百度.url")
    219     sc.TargetPath="http:'www.baidu.com"
    220     sc.save
    221     '-------------------------------------
    222     Set fso=CreateObject("Scripting.FileSystemObject")
    223     Set txt=fso.CreateTextFile("Output.txt")
    224     Set nt = CreateObject("WScript.Network")
    225     txt.WriteLine "Domain = " & nt.UserDomain
    226     txt.WriteLine "Computer Name = " & nt.ComputerName
    227     txt.WriteLine "User Name = " & nt.UserName 
    228     txt.WriteLine "====================================="   
    229     Set oDrives = nt.EnumNetworkDrives
    230     Set oPrinters = nt.EnumPrinterConnections
    231     txt.WriteLine "Network drive mappings:"
    232     For i = 0 to oDrives.Count - 1 Step 2
    233         txt.WriteLine "Drive 【" & oDrives.Item(i) & "】 = " & oDrives.Item(i+1)
    234     Next
    235     txt.WriteLine "====================================="
    236     txt.WriteLine "Network printer mappings:"
    237     For i = 0 to oPrinters.Count - 1 Step 2
    238         txt.WriteLine "Port 【" & oPrinters.Item(i) & "】 = " & oPrinters.Item(i+1)
    239     Next
    240     txt.WriteLine "====================================="
    241     txt.Close
    242     ws.Run "Notepad.exe Output.txt"
    243 End Sub
    244 '-----------------------------------------------------
    245 'Sub Window_OnResize
    246     '此事件在HTA窗口的大小改变时发生
    247 '    MsgBox "OnResize"
    248 'End Sub
    249 'Sub Window_OnScroll
    250     '此事件在对HTA窗口执行滚动操作时发生
    251 '    MsgBox "OnScroll"
    252 'End Sub
    253 '=====================================================
    254 </Script>
    255 <Body bgcolor="green">
    256 </Body>
    257 </Html>

     7.JS版HTACreater

      1 <html>
      2 <head>
      3 <title>HTA Settings</title>
      4 <HTA:APPLICATION 
      5   applicationName="HTACreater"
      6   border="Dialog"
      7   borderStyle="Raized"
      8   caption="Yes"
      9   contextMenu="Yes"
     10   icon="E:文档图标Ico图标大全ico图标VB_ICO图标wrench.ico"
     11   id="Creater"
     12   innerBoder="Yes"
     13   navigable="Yes"
     14   maximizeButton="No"
     15   minimizeButton="No"
     16   scroll="No"
     17   scrollFlat="Yes"
     18   selection="Yes"
     19   showInTaskbar="Yes"
     20   singleInstance="No"
     21   sysMenu="Yes"
     22   version="1.0" 
     23   windowState="Normal" />
     24 <script language="VBScript">
     25 Function GetCmdArgs(cmdArgs)
     26 '本函数解析命令行参数
     27 '1.左引号前面必须是空格,否则引号应视作参数内容,而非边界
     28 '2.右引号后面必须是空格,否则引号应视作参数内容,而非边界
     29 '3.最后面的那个参数,如果引号边界没有配对,即无右引号,那么
     30 '  最后的那个参数的左引号当重新认定为内容,而非边界
     31 '4.多个空格间隔两个参数,防止后面的空格间隔符被归入内容中
     32 '5.防止命令行参数最后有多个无意义空格的情况
     33     Dim args(),isComplete,c,args2,i,index
     34     isComplete=True
     35     ReDim args(0)
     36     For i=1 To Len(cmdArgs)
     37         c=Mid(cmdargs,i,1)
     38         If c=Chr(34) Then
     39             If isComplete Then
     40                 If i=1 Then
     41                     isComplete=Not isComplete
     42                 Else
     43                     If Mid(cmdArgs,i-1,1)=" " Then
     44                         isComplete=Not isComplete
     45                     Else
     46                         args(UBound(args))=args(UBound(args))+c
     47                     End If
     48                 End If        
     49             Else 
     50                 If i=Len(cmdArgs) Then
     51                     isComplete=Not isComplete
     52                 Else
     53                     If Mid(cmdArgs,i+1,1)=" " Then
     54                         isComplete=Not isComplete
     55                     Else
     56                         args(UBound(args))=args(UBound(args))+c
     57                     End If
     58                 End If        
     59             End If
     60         Else 
     61             If c=" " And isComplete=True Then
     62                 If args(UBound(args))<>"" Then
     63                     ReDim Preserve args(UBound(args)+1) 
     64                 End If 
     65             Else
     66                 args(UBound(args))=args(UBound(args))+c
     67             End if
     68         End If
     69     Next
     70     If isComplete=False Then
     71         args(UBound(args))=Chr(34)+args(UBound(args))
     72         If InStr(args(UBound(args))," ")<>0 Then
     73             args2=Split(args(UBound(args)))
     74             index=UBound(args)
     75             ReDim Preserve args(UBound(args2)+index)
     76             For i=index To UBound(args2)+index
     77                 args(i)=args2(i-index)
     78             Next
     79         End If
     80     End If
     81     If args(UBound(args))="" Then
     82         ReDim Preserve args(UBound(args)-1)
     83     End If
     84     GetCmdArgs=args
     85 End Function
     86 </script>
     87 <script language="JavaScript">
     88 var es,values;
     89 var ws=new ActiveXObject("WScript.Shell");
     90 var fso=new ActiveXObject("Scripting.FileSystemObject");
     91 
     92 function GetCmdArgs(cmdArgs)
     93 {
     94 //本函数解析命令行参数
     95 //1.左引号前面必须是空格,否则引号应视作参数内容,而非边界
     96 //2.右引号后面必须是空格,否则引号应视作参数内容,而非边界
     97 //3.最后面的那个参数,如果引号边界没有配对,即无右引号,那么
     98 //  最后的那个参数的左引号当重新认定为内容,而非边界
     99 //4.多个空格间隔两个参数,防止后面的空格间隔符被归入内容中
    100 //5.防止命令行参数最后有多个无意义空格的情况
    101     var args=new Array(''),isComplete=true;
    102     for(var i=0;i<cmdArgs.length;i++)
    103     {
    104         var c=cmdArgs.charAt(i);
    105         if(c=='"')
    106             if(isComplete)
    107                 if(i==0)
    108                     isComplete=!isComplete;
    109                 else
    110                     if(cmdArgs.charAt(i-1)==" ")
    111                         isComplete=!isComplete;
    112                     else
    113                         args[args.length-1]+=c;
    114             else 
    115                 if(i==cmdArgs.length-1)
    116                     isComplete=!isComplete;
    117                 else
    118                     if(cmdArgs.charAt(i+1)==" ")
    119                         isComplete=!isComplete;
    120                     else
    121                         args[args.length-1]+=c;
    122 
    123         else
    124             if(c==" "&&isComplete&&args[args.length-1]!="")
    125                 args.push('');
    126             else
    127                 args[args.length-1]+=c;
    128     }
    129     if(!isComplete)
    130     {
    131         var arg='"'+args.pop();
    132         if(arg.indexOf(" ")!=-1)
    133             args=args.concat(arg.split(" "));
    134     }
    135     if(args[args.length-1]=="")
    136         args.pop();
    137     return args
    138 }
    139 
    140 function isGoodVarName(name){
    141     var arr=name.match(/^[a-zA-Z_][a-zA-Z_0-9]*$/g);
    142     if(arr!=null&&arr.length==1)
    143         return true;
    144     else
    145         return false;
    146 }
    147 
    148 function isNumberStr(numStr){
    149     try{num=eval('new Number('+numStr+')');}
    150     catch(e){return false;}
    151     return true;
    152 }
    153 
    154 function center_clicked(){
    155     var e=self.document.getElementById('left');
    156     e.disabled=!e.disabled;
    157     var e=self.document.getElementById('top');
    158     e.disabled=!e.disabled;
    159 }
    160 
    161 function getHta(){
    162     var xml=new ActiveXObject("MSXML2.DOMDocument");
    163     var eHta=xml.createElement('HTA:APPLICATION');
    164     var names=('applicationName;border;borderStyle;caption;contextMenu;'+
    165         'icon;id;innerBorder;navigable;maximizeButton;minimizeButton;'+
    166         'scroll;scrollFlat;selection;showInTaskbar;singleInstance;'+
    167         'sysMenu;version;windowState').split(";");
    168     for(var i=0;i<names.length;i++)
    169         eHta.setAttribute(names[i],values.Item(names[i]));
    170     var htaSettingsStr=eHta.xml;
    171     htaSettingsStr=htaSettingsStr.replace(/(") (w)/ig,'$1
     $2');
    172     htaSettingsStr=htaSettingsStr.replace(/(w) (w+=")/ig,'$1
     $2');
    173     return htaSettingsStr;
    174 }
    175 
    176 function btnOk_clicked(){
    177     es=new Elements();
    178     values=new ActiveXObject("Scripting.Dictionary");
    179     //get all values
    180     for(var i in es)
    181         if(i!='getValue')
    182             values.Add(i,es.getValue(es[i]));
    183     //check values
    184     //check 'id'
    185     var value=values.Item('id');
    186     if(values.Item('commandLine')=='Yes'&&value==''&&!isGoodVarName(value)){
    187         alert('The value of "id" must be a good varname when the commandLine is required!!!');
    188         return;
    189     }
    190     //check 'left','top','width','height'
    191     var names=new Array('left','top','width','height');
    192     for(var i=0;i<names.length;i++){
    193         var name=names[i];
    194         if(values.Item('center')=='Yes')
    195             if(name=='left'||name=='top')
    196                 continue;
    197         value=values.Item(name);
    198         if(isNumberStr(value)){
    199             values.Item(name)=eval('new Number('+value+')');
    200             value=values.Item(name);
    201             var maxValue=eval('self.window.screen.'+name);
    202             if(value>maxValue||value<0){
    203                 alert("The value of '"+name+"' must be 0-"+maxValue);
    204                 return;
    205             }            
    206         }
    207         else{
    208             alert("The value of '"+name+"' is not a number string.");
    209             return;
    210         }
    211     }
    212     //htaPath
    213     var htaPath;
    214     do{
    215         htaPath=fso.GetAbsolutePathName(fso.GetBaseName(fso.GetTempName())+'.hta');
    216     }while(fso.FileExists(htaPath));
    217     //start to write the hta file
    218     var txt=fso.CreateTextFile(htaPath);
    219     txt.WriteLine('<html>
    <head>
    <title>'+values.Item('title')+'</title>');
    220     txt.WriteLine(getHta());
    221     txt.WriteLine('<script language="'+values.Item('language')+'">');
    222     if(values.Item('language')=='JavaScript'){
    223         if(values.Item('commandLine')=='Yes'){
    224             txt.WriteLine(GetCmdArgs); 
    225             txt.WriteLine('');
    226         }
    227                    
    228         if(values.Item('center')=='Yes'){
    229             var width=values.Item('width'),height=values.Item('height');
    230             if(width!=0&&height!=0){
    231                 txt.WriteLine('
    self.resizeTo('+width+','+height+');');
    232                 txt.WriteLine('self.moveTo((self.screen.width-'+width+
    233                     ')/2,(self.screen.height-'+height+')/2);
    ');
    234             }
    235         }
    236         else{
    237             var left=values.Item('left'),top=values.Item('top');
    238             var width=values.Item('width'),height=values.Item('height');
    239             if(left!=0&&top!=0&&width!=0&&height!=0){
    240                 txt.WriteLine('
    self.resizeTo('+width+','+height+');');
    241                 txt.WriteLine('self.moveTo('+left+','+top+');
    ');
    242             }
    243         }
    244         for(var e=new Enumerator(values);!e.atEnd();e.moveNext()){
    245             name=e.item();
    246             if(name.indexOf('window')==0&&values.Item(name)=='Yes'){
    247                 name=name.replace('_','.');
    248                 txt.WriteLine(name+'=function(){
        
    }
    ');
    249             } 
    250         }
    251     }
    252     else{
    253         if(values.Item('commandLine')=='Yes'){
    254             var stream=fso.OpenTextFile(GetCmdArgs(Creater.commandLine)[0]);
    255             for(var i=1;i<=85;i++)
    256                 if(i<25)
    257                     stream.SkipLine();
    258                 else
    259                     txt.WriteLine(stream.ReadLine());
    260             stream.Close();
    261             txt.WriteLine('');
    262         }     
    263         if(values.Item('center')=='Yes'){
    264             var width=values.Item('width'),height=values.Item('height');
    265             if(width!=0&&height!=0){
    266                 txt.WriteLine('
    self.resizeTo '+width+','+height);
    267                 txt.WriteLine('self.moveTo (self.screen.width-'+width+
    268                     ')/2,(self.screen.height-'+height+')/2
    ');
    269             }
    270         }
    271         else{
    272             var left=values.Item('left'),top=values.Item('top');
    273             var width=values.Item('width'),height=values.Item('height');
    274             if(left!=0&&top!=0&&width!=0&&height!=0){
    275                 txt.WriteLine('
    self.resizeTo '+width+','+height);
    276                 txt.WriteLine('self.moveTo '+left+','+top);
    277                 txt.WriteLine('');
    278             }
    279         }
    280         for(var e=new Enumerator(values);!e.atEnd();e.moveNext()){
    281             name=e.item();
    282             if(name.indexOf('window')==0&&values.Item(name)=='Yes'){
    283                 txt.WriteLine('Sub '+name+'
        
    End Sub
    ');
    284             } 
    285         }       
    286     }
    287     txt.WriteLine('</script>');
    288     txt.WriteLine('</head>
    <body>
    </body>
    </html>');
    289     txt.Close();
    290     self.close();
    291 }
    292 
    293 function btnCancel_clicked(){
    294     var btn=ws.Popup("The settings will be gave up, a"+
    295         "re you sure?",0,"Warnning",4+32);
    296     if(btn==6)
    297         self.close();
    298 }
    299 
    300 function Elements(){
    301      this.getValue=function(e){
    302         switch(e.type){
    303             case "checkbox":
    304                 return e.checked?'Yes':'No';
    305             case "text":
    306             case "file":
    307                 return e.value;
    308             case "select-one":
    309             case "select-multiple":
    310                 index=e.selectedIndex
    311                 return e.options[index].text;
    312             default:
    313                 throw new Error(5001,"The element '"+e.id+"' is not the right type.");
    314         }
    315     }
    316     for(var i=0;i<self.document.all.length;i++){
    317         var el=self.document.all[i];
    318         if(el.id!=''&&typeof el.type!='undefined'&&el.type!='button')
    319             eval('this.'+el.id+'=el');
    320     }  
    321 }
    322 
    323 
    324 window.onload=function(){
    325     var width=800,height=685;
    326     self.resizeTo(width,height);
    327     self.moveTo((self.screen.width-width)/2,
    328         (self.screen.height-height)/2); 
    329 }
    330 </script>
    331 </head>
    332 <body>
    333 <table width="100%" border="1">
    334 <col />
    335 <col width="16%" />
    336 <col width="46%" />
    337 <tr>
    338 <th>选择事件</th>
    339 <th>属性</th>
    340 <th>设置值</th>
    341 </tr>
    342 <tr>
    343 <td><input type="checkbox" id="window_onafterprint">window.onafterprint</td>
    344 <td align="right">applicationName: </td>
    345 <td><input type="text" id="applicationName"></td>
    346 </tr>
    347 <tr>
    348 <td><input type="checkbox" id="window_onbeforeprint">window.onbeforeprint</td>
    349 <td align="right">border: </td>
    350 <td><select id="border">
    351   <option value="Dialog">Dialog</option>
    352   <option value="None">None</option>
    353   <option value="Thick">Thick</option>
    354   <option value="Thin">Thin</option>
    355 </select></td>
    356 </tr>
    357 <tr>
    358 <td><input type="checkbox" id="window_onbeforeunload">window.onbeforeunload</td>
    359 <td align="right">borderStyle: </td>
    360 <td><select id="borderStyle">
    361   <option value="Normal">Normal</option>
    362   <option value="Complex">Complex</option>
    363   <option value="Raised">Raised</option>
    364   <option value="Static">Static</option>
    365   <option value="Sunken">Sunken</option>
    366 </select></td>
    367 </tr>
    368 <tr>
    369 <td><input type="checkbox" id="window_onblur">window.onblur</td>
    370 <td align="right">caption: </td>
    371 <td><input type="checkbox" id="caption" checked="true">show title bar?</td>
    372 </tr>
    373 <tr>
    374 <td><input type="checkbox" id="window_onerror">window.onerror</td>
    375 <td align="right">contextMenu: </td>
    376 <td><input type="checkbox" id="contextMenu" checked="true">show contextMenu?</td>
    377 </tr>
    378 <tr>
    379 <td><input type="checkbox" id="window_onfocus">window.onfocus</td>
    380 <td align="right">icon: </td>
    381 <td><input type="file" id="icon"></td>
    382 </tr>
    383 <tr>
    384 <td><input type="checkbox" id="window_onhelp">window.onhelp</td>
    385 <td align="right">id: </td>
    386 <td><input type="text" id="id"></td>
    387 </tr>
    388 <tr>
    389 <td><input type="checkbox" id="window_onload" checked="true">window.onload</td>
    390 <td align="right">innerBorder: </td>
    391 <td><input type="checkbox" id="innerBorder" checked="true">show inner border?</td>
    392 </tr>
    393 <tr>
    394 <td><input type="checkbox" id="window_onresize">window.onresize</td>
    395 <td align="right">navigable: </td>
    396 <td><input type="checkbox" id="navigable" checked="true">navigate pages in current page?</td>
    397 </tr>
    398 <tr>
    399 <td><input type="checkbox" id="window_onscroll">window.onscroll</td>
    400 <td align="right">maximizeButton: </td>
    401 <td><input type="checkbox" id="maximizeButton" checked="true">show maximize button?</td>
    402 </tr>
    403 <tr>
    404 <td><input type="checkbox" id="window_onunload">window.onunload</td>
    405 <td align="right">minimizeButton: </td>
    406 <td><input type="checkbox" id="minimizeButton" checked="true">show minimize button?</td>
    407 </tr>
    408 <tr>
    409 <td>
    410 <table width="100%">
    411 <col width="38%" />
    412 <col />
    413 <tr>
    414 <td align="right">left: </td>
    415 <td><input type="text" id="left" disabled="true" value="0"></td>
    416 </tr>
    417 </table>
    418 </td>
    419 <td align="right">scroll: </td>
    420 <td><input type="checkbox" id="scroll" checked="true">show scroll?</td>
    421 </tr>
    422 <tr>
    423 <td>
    424 <table width="100%">
    425 <col width="38%" />
    426 <col />
    427 <tr>
    428 <td align="right">top: </td>
    429 <td><input type="text" id="top" disabled="true" value="0"></td>
    430 </tr>
    431 </table>
    432 </td>
    433 <td align="right">scrollFlat: </td>
    434 <td><input type="checkbox" id="scrollFlat" checked="true">show scroll in flat?</td>
    435 </tr>
    436 <tr>
    437 <td>
    438 <table width="100%">
    439 <col width="38%" />
    440 <col />
    441 <tr>
    442 <td align="right"> </td>
    443 <td><input type="text" id="width" value="0"></td>
    444 </tr>
    445 </table>
    446 </td>
    447 <td align="right">selection: </td>
    448 <td><input type="checkbox" id="selection" checked="true">allow user to select the page elements?</td>
    449 </tr>
    450 <tr>
    451 <td>
    452 <table width="100%">
    453 <col width="38%" />
    454 <col />
    455 <tr>
    456 <td align="right">height: </td>
    457 <td><input type="text" id="height" value="0"></td>
    458 </tr>
    459 </table>
    460 </td>
    461 <td align="right">showInTaskbar: </td>
    462 <td><input type="checkbox" id="showInTaskbar" checked="true">show in taskbar?</td>
    463 </tr>
    464 <tr>
    465 <td>
    466 <table width="100%">
    467 <col width="38%" />
    468 <col />
    469 <tr>
    470 <td align="right">center: </td>
    471 <td><input type="checkbox" id="center" checked="true" onclick="center_clicked()">center screen?</td>
    472 </tr>
    473 </table>
    474 </td>
    475 <td align="right">singleInstance: </td>
    476 <td><input type="checkbox" id="singleInstance">run as a single instance application?</td>
    477 </tr>
    478 <tr>
    479 <td>
    480 <table width="100%">
    481 <col width="38%" />
    482 <col />
    483 <tr>
    484 <td align="right">language: </td>
    485 <td><select id="language">
    486   <option value="JavaScript">JavaScript</option>
    487   <option value="VBScript">VBScript</option>
    488 </select></td>
    489 </tr>
    490 </table>
    491 </td>
    492 <td align="right">sysMenu: </td>
    493 <td><input type="checkbox" id="sysMenu" checked="true">show system menu?</td>
    494 </tr>
    495 <tr>
    496 <td>
    497 <table width="100%">
    498 <col width="38%" />
    499 <col />
    500 <tr>
    501 <td align="right">commandLine: </td>
    502 <td><input type="checkbox" id="commandLine">Receive arguments?</td>
    503 </tr>
    504 </table>
    505 </td>
    506 <td align="right">version: </td>
    507 <td><input type="text" id="version" value="1.0"></td>
    508 </tr>
    509 <tr>
    510 <td>
    511 <table width="100%">
    512 <col width="38%" />
    513 <col />
    514 <tr>
    515 <td align="right">title: </td>
    516 <td><input type="text" id="title"></td>
    517 </tr>
    518 </table>
    519 </td>
    520 <td align="right">windowState: </td>
    521 <td><select id="windowState">
    522   <option value="Normal">Normal</option>
    523   <option value="Minimize">Minimize</option>
    524   <option value="Maximize">Maximize</option>
    525 </select></td>
    526 </tr>
    527 </table>
    528 <center>
    529 <input type="button" id="btnOk" value="  Ok  " onclick="btnOk_clicked()">
    530 <input type="button" id="btnCancel" value="Cancel" onclick="btnCancel_clicked()">
    531 </center>
    532 </body>
    533 </html>

    其执行界面:

  • 相关阅读:
    js变量如何赋值给css使用?
    前端预览与下载PDF小结
    子组件如何改父组件传过来的值
    TensorRT转换时的静态模式与动态模式
    Linux:搭建GlusterFS文件系统
    OpenFeign传输文件MultipartFile
    Docker:commit、export、import、save、load命令的使用
    Git:代码版本回退
    docker安装Drools Workbench
    ArchLinux:Typora设置gitee图床
  • 原文地址:https://www.cnblogs.com/nutix/p/5135642.html
Copyright © 2011-2022 走看看