比方说,您知道微软的Office套件如此流行的原因吗?其中之一就是任何的Office应用程式都包括了了简单的研发环境,稍有技术的用户都能够由此实现重复任务的自动化。VBA(Visual Basic for Applications)就为Office软件提供了这种环境,而且,假如您能承担微软需要的许可证费用,您还能够在您自己的应用程式中使用VBA。现在,我们再来看看WSH和Windows Script Control,他们是对VBA廉价而且相当有用的替代选择。为Visual Basic应用程式提供了自动的脚本化技术。
掌控脚本控件
Windows Script Control 把Active Scripting Engine封装在了非用户界面的ActiveX控件之内以方便VB编程的使用,而Active Scripting Engine正是WSH的核心。程式员能够利用该控件执行整个脚本或脚本的片段,而这些脚本能够用WSH所支持的任何语言编写。也许您的电脑上已安装了这种控件;他的名字是msscript.ocx,通常位于System32 目录下。否则您能够从微软网站下载。
Windows Script Control控件还包括了一些文档,但照我的经验看,这些文档有点不完整而且不太准确。掌控控件用法的最好方法就是具体应用他,通过具体应用了解其工作原理和用途。我自己就是这么做的,先创建了一个测试项目,用他来了解脚本控件的可能现象和用途,您能够从这里下载测试项目。这篇文章中会反复用到该测试项目。
运行脚本
为了运行用到脚本控件的脚本,您有以下若干选择:
Eval方法,他同VBA Eval函数类似,从简单算术到包含嵌入脚本的命令或对象方法调用的复杂表达式都能够计算,而且会把结果返回给您的应用程式。
ExecuteStatement方法执行任何完整的脚本语句。
联合运用AddCode和Run方法能够装载并执行定制的脚本程式。这也是功能性最强大的方法,同时也是本文余下部分要讨论的方法。
ScriptingDemo简介
ScriptingDemo应用程式由一个窗体、两个文本框组成,窗体显示应用程式所在目录下的脚本文档列表,一个文本框获取脚本程式所需要的参数,另一个文本框显示执行脚本的输出结果。在应用程式启动的时候,他实例化一个定制集合对象colCustomers,通过他从SQL Server的Northwind目录的Customers数据表装载数据供我们的示例脚本操作数据。应用程式在运行时显示的主窗体如图A所示。
图A

运行时的ScriptingDemo主窗体
在选择了一个脚本之间之后,应用软件逐行读取脚本代码并通过AddCode方法把他加到脚本控件的环境内。单击Run Script按钮之后脚本控件就会执行所选文档同名(不带扩展名)的程式。
以ASimpleScript.VBs为例。他包含以下的子程式:
Sub ASimpleScript()
MsgBox "Hello from VBScript!"
End Sub
选择该文档,然后单击Run Script按钮即产生图 B 所示的输出结果。
图B

运行ASimpleScript.VBs之后的结果
对,我承认这个程式太简单了,但他确实说明您在运行脚本,除此以外,我们还需要深入控件内部探个究竟。
同脚本共享数据
现在让我们更深入一步,看看隐藏在窗体Load事件(清单A)之后的代码,代码中有以下两行:
ScriptControl1.AddObject "Customers", oCustomers, True
ScriptControl1.AddObject "Output", oScriptOutput, True
|
清单A |
| frmMain's Load event Private Sub Form_Load() Dim strDir As String 'Directory contents Dim oCustomers As New colCustomers 'play collection Dim oScriptOutput As New Output 'Output object for script 'Get a list of all VBs script files in the app directory strDir = Dir(App.Path & "\*.VBs") Do Until strDir = "" Me.List1.AddItem strDir strDir = Dir() Loop 'set up our scripts' play environment. Set oScriptOutput.OutputBox = Me.txtOutput 'LoadData accepts a DSN name, a user id and a password oCustomers.LoadData "SQLServer", "sa", "" 'Make these objects available to scripts run with the 'script control. ScriptControl1.AddObject "Customers", oCustomers, True ScriptControl1.AddObject "Output", oScriptOutput, True End Sub |
我们还没有谈论过AddObject。该方法把对对象的引用加到脚本控件的执行环境。用这种方式添加的对象能够受到控件所运行的任何脚本的全局访问,从而令脚本获得了访问应用程式所创建的对象的权限。同时这也是一种和应用程式通讯的方式。在这种情况下,我们就为主窗体装载Customers时创建的数据操作集合添加了引用,同时也对Output类如法炮制,他则给脚本赋予了对主窗体上的txtOutput只写的访问权限。
查看EnumCustomer脚本的代码能够从中了解这种方法的有用性,该脚本代码请见(清单B)。该脚本获取单个输入参数,该参数表示Customers集合内包含的客户索引,而该集合则是我们通过调用AddObject添加到脚本控件环境的。EnumCustomer脚本访问Customers集合并枚举出所选项目的任何可用字段,然后通过Output对象的txtOutput打印出结果。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




