如果你使用过UNIX上的Shell Script(命令解释器脚本)那么对Unix下的脚本编程一定深有感触利用UNIX上的各种Shell Script例如CShellTCL/TKPerlUNIX管理员往往用一个脚本就可以完成你半天的编程才能完成的任务 但在微软的世界中一直没有够份量的类似东西出现充其量我们只能写写简单的Batch File(就是DOS下的批处理命令)但它所提供的功能也太过于简单无法处理复杂的事情不过以前在DOS下还有Basic可以解一点燃眉之急谁知道到了Windows 以后连Basic都不复存在让我们这些喜欢DIY的朋友们很不舒服其实在Windows方便的操作界面下掩盖着更为强大的功能你听说过WSH吗?它的全称是Windows Scripting Host中文名字可以叫它Windows平台指令主机就是它让你通过威力强大的VBScript和JavaScript脚本来实现强大的功能再也不用羡慕UNIX平台下的各种Shell Script了…… WSH的优点 WSH可以在位Windows平台上提供简单威力强大以及具有弹性的指令环境 更有威力的指令系统 在以前Windows操作系统支持的唯一类似于脚本语言的是MSDOS的批处理命令虽然MSDOS指令又快又小但和VBScript及JavaScript相比MSDOS受到许多限制今天架构于ActiveX之上的WSH允许使用者利用威力强大的指令语言如VBScript与JavaScript同时MSDOS指令WSH仍可以支持不过对于脚本语言来说它只是很小的一个方面了 Windows脚本语言的执行环境 以前的MSDOS类的命令只可以在DOS下或者DOS窗口下使用现在不一样了Microsoft目前在 Windows平台上提供三种脚本语言的执行环境: WSH架构 长久以来Windows操作系统都缺乏一个真正的Shell程序功能因此微软就针对了这个问题提出了WSH的架构把解释程序语言的部分以及提供功能服务像是显示信息存取文件或是读写注册表 (Registry) 等部分功能分开解释的部分交给相应语言的解释引擎(Scripting Engine)而提供功能服务的部分就称为一个执行环境 (Scripting Host)WSH就是专为在Windows系统下执行这种服务程序的环境 刚才所讨论的解释与服务分开的方式就是微软的ActiveX Scripting架构图就说明了WSH的架构以及执行环境与解释引擎之间的关系在这个图中我们假设要执行Tentimesvbs脚本它的具体步骤是: 先执行WSH(Windows 带有字符模式的cscriptexe和图形界面的Wscriptexe)告诉它执行tentimesvbs脚本具体的命令行是: cscript tentimesvbs或者wscript tentimesvbs 这是WSH会根据所要执行脚本的后缀名(VBS)到系统注册表中查询可以解释这种程序的解释引擎(Windows 附有VBScript和JavaScript两种语言的解释引擎你也可以自己安装其它语言的解释引擎比如Perl) 找出解释引擎之后WSH会将程序一行一行从脚本中读出然后送到解释引擎由解释引擎解释程序所要执行的动作 如果所要执行的动作必须要使用到WSH所提供的服务例如存取文件或是注册表的内容就向WSH提出要求由WSH负责处理 通过这样的方式不管你使用何种语言只要有该语言的解释引擎就可以在WSH下执行该种语言编写的程序并且可以使用WSH所提供的服务 也许有的朋友要问:WSH是如何将这些服务提供给脚本语言呢?其实很简单它其实相当于我们练习编程的那些函数(当然了微软称它们为对象属性和方法)通过这些接口实现脚本和操作系统的对话好了闲话少说我们先来看看WSH到底有何神通…… Windows /MeWindowns NT+IIS和Windows 都已经附带有WSH(不用去找那些烦人的编程语言IDE^_^)如果你用的是Windows 或者你想将你的WSH更新到最新版本没有问题到微软的WSH站点下载一个就是当前的最新版本是不过你下载的时候可要看清楚语言版本中文的一定要选择Chinese/Simplified下载不一致的语言版本回来可是不能安装的同时你还要选择适合自己操作系统的版本Windows 和其它操作系统是不同的另外如果你想好好看一下WSH的帮助文档(WSH的帮助文档可不是像Linux下都随软件带有它是需要另外下载的)也可以到前边所说的网址下载一个可执行文件安装以后在\Program Files\Microsoft Windows Script\WSHdocs下找到一个WSHchm的帮助文件里面有WSH的详细说明这个东西你可千万不能少了…… WSH使用初探 整个WSH中Script语言都是以对象(Object)为基础在运作讲到对象自然就会有所谓的方法(Method)和属性(Property)所以要使用WSH的第一步就是建立一个对象然后利用该对象的各种方法和属性WSH提供以下几个对象: ScriptNetwork:用来与网络沟通通过它你可以取得网络的各种信息比如IP地址网上邻居列表等等 WScriptShell:与操作系统沟通你可以通过该对象在桌面建立快捷方式建立/删除注册表键值 ExcelApplication:与Excel沟通不但可以在Excel中显示WSH内容而且可以用WSH存取Excel和显示图表 此外WSH还可以显示一些窗口和捕捉鼠标的输入等等这里就不再枚举下边我们看看它具体是如何使用的: 建立一个弹出窗口 记得以前在所有的编程科目学习中老师都会让我们编写一个HelloWorld!的实例这里我们先看看如何完成一个HelloWorld的弹出窗口打开记事本输入以下代码保存为PopUpjs然后执行一下看看效果是否和图一样 function showit(){ var Message = Hello World!; var timeout = ; var title = Hello World!; var buttons = ; var rslt; var WS = WScriptCreateObject(WScriptShell); rslt = WSPopup(Message timeout title buttons); if ( rslt == ) { WScriptQuit; } } showit(); 显示网络信息(见图) 让我们看看如何显示使用者工作组使用者姓名和电脑名称使用记事本建立networkvbs内容如下: Set WSHNetwork = WScriptCreateObject(WScriptNetwork) 显示WSHNetwork object的properties MsgBox 使用者工作组: & WSHNetworkUserDomain & Chr() & Chr() & 使用者姓名: & WSHNetworkUserName & Chr() & Chr() & 电脑名称 : & WSHNetworkComputerName vbInformation + vbOKOnly WSHNetwork 内容 桌面快捷方式的建立 Shortcutvbs Set WSHShell = WScriptCreateObject(WScriptShell) 使用SpecialFolders读取桌面路径 DesktopPath = WSHShellSpecialFolders(Desktop) 于桌面上建立快捷方式 Set Shortcut = WSHShellCreateShortcut(DesktopPath & \记事本lnk) 设定快捷方式的属性并保存 ShortcutTargetPath = WSHShellExpandEnvironmentStrings(%windir%\notepadexe) ShortcutWorkingDirectory = WSHShellExpandEnvironmentStrings(%windir%) ShortcutWindowStyle = ShortcutIconLocation = WSHShellExpandEnvironmentStrings(%windir%\notepadexe ) ShortcutSave WSH与Excel沟通(见图) 让我们看看如何在Excel中显示WSH内容使用记事本开启excelvbs内容如下: Set objXL = WScriptCreateObject(ExcelApplication) objXLVisible = TRUE objXLWorkBooksAdd objXLColumns()ColumnWidth = objXLColumns()ColumnWidth = objXLColumns()ColumnWidth = objXLCells( )Value = 属性名称 objXLCells( )Value = 值 objXLCells( )Value = 描述 objXLRange(A:C)Select objXLSelectionFontBold = True objXLSelectionInteriorColorIndex = objXLSelectionInteriorPattern = xlSolid objXLSelectionFontColorIndex = objXLColumns(B:B)Select objXLSelectionHorizontalAlignment = &hFFFFEFDD xlLeft Dim intIndex intIndex = 显示WScript properties Call Show(Name WScriptName 应用程序名称) Call Show(Version WScriptVersion 应用程序版本) Call Show(FullName WScriptFullName 应用程序内容: 完整名称) Call Show(Path WScriptPath 应用程序内容: 只有路径) Call Show(Interactive WScriptInteractive 互动模式状态) 显示命令行参数 Dim colArgs Set colArgs = WScriptArguments Call Show(ArgumentsCount colArgsCount 指令列引数数目) For i = to colArgsCount objXLCells(intIndex )Value = Arguments( & i & ) objXLCells(intIndex )Value = colArgs(i) intIndex = intIndex + objXLCells(intIndex )Select Next Sub Show(strName st |