使用javascript中的OLE Automation


在前面的教程中我们已经有提到JavaScript中的OLE Automation。在本节的教程中,我们将一起来讨论一下JavaScript是怎样利用Automation的强大功能来扩展服务端脚本的能力的。

实际上Automation并不是新的事物。它已经在好几年前就流行了,但是被ActiveX脚本语言的支持是一个新的应用。如果你已经有了Visual Basic 或者Visual C++的编程背景,本节教程将介绍怎样利用你的经验来创建有用的脚本以控制外部的应用程序。

在你的脚本中控制外部的应用是非常强大的,比如从你的脚本中打开一个Word文档或者一个Excel电子表格。HTML编辑器,比如HomeSite 4.0和HotMetal Pro 6为你提供了丰富的工具使得你可以利用它们到你的主页中去。它们都是封装到ActiveX控件中的。本教程的内容主要有:

什么是Automation

什么是绑定

怎样创建Automation对象的新实例

怎样检索一个Automation对象存在的实例

怎样处理应用程序的实例

怎样提高脚本程序的性能

怎样处理集对象

从下一篇开始,我们对以上的内容逐个介绍。

使用JavaScript中的OLE Automation

什么是Automation

OLE(对象连接和嵌入)Automation允许应用程序完成通讯、交换数据以及控制其它应用程序等等。它还允许一个客户应用程序通过使用暴露对象的界面来创建和控制一个对象。一个Automation对象是可以通过Automation界面暴露给其它应用程序或者编程工具的一个对象。

Automation提供了一个文档案的、标准的方法来创建和访问应用程序。通常,Automation跟Visual Basic是紧密联系的。它有为C/C++开发人员提供了创建可编程的应用程序的强大工具,并且让Visual Basic设计人员访问和操作这些应用程序。这些C/C++程序员提供专业化的用户界面的解决方案并且给Visual Basic程序员提供了从应用程序组件中汇集定制解决方案的一种可靠的方法。

不仅Visual Basic 可以利用Automation,实际上,可编程的对象也可以任何的宏语言或者执行Automation的编程工具来进行访问。用户可以根据当前的知识选择一个编程工具,而不是为每一个应用程序学习新的语言。即使脚本语言,比如VBScript和Jscript页支持Automation 。

控制一个Automation应用程序的关键在于对应用程序的对象模型要有一个较好的理解。每一个应用程序的对象模型是不同的。微软现在声称在Office 程序组中每一个应用程序的每一个函数都可以通过应用程序的对象模型被程序员访问。这个Office程序组通过它的对象模型暴露了成千上万的对象、方法以及属性给程序员。这个消息对程序设计人员来说无疑是一个好消息。

但是,学习特殊应用程序的对象模型通常是很困难的,因为缺少描述各种软件对象的相关资料文档。微软的Office应用程序,比如在网上为程序员提供了许多资料文档,但是还有许多其它的应用程序不提供必须的文档。

在Microsoft Visaul Basic中的对象浏览器将对象、方法、属性以及外部Automation对象的常量展现在对话框中。这个工具同样适用于脚本设计中,因为应用程序的全局常量在脚本环境中不是有效的。如果你利用Automation来编写脚本,你可以适用对象浏览器来取出必需的常量的值,这样你就可以在脚本中来显性指定它们了。

2. 什么是绑定
在你适用一个对象模型的属性、方法和事件之前,你必需首先创建一个计划性的引用给包含了你想适用的属性、方法或者事件的类。你可以通过声明一个局部对象变量以保留一个引用给这个对象来实现这个目的。然后,你要为局部变量指定一个对象的应用。

VB和VBScript使用CreateObject()函数,来实现在Jscript使用这个ActiveXObject()构造函数的时候为一个Automation对象允许并返回一个引用。

实际上,绑定是指Visual Basic代码访问在其它的应用程序对象的方法。当你从一个应用程序使用Automation来处理另外一个应用程序中对象的时候,你编写Visaul Basic代码的应用程序就是一个Automation控制器。这个你正在处理对象的应用程序是Automation服务器。当一个Automation控制器创建一个指向由Automation服务器提供对象的变量,Visual Basic 必需验证对象是否存在以及使用对象的任何属性和方法是正确指定的。这个验证过程就所谓的”绑定”。有两种Visual Basic程序开发人员使用的绑定类型要注意: late binding(迟绑定) 和 early binding(早绑定)。

迟绑定

迟绑定是发生在运行时间并且比早绑定要慢。在迟绑定Automation代码中,Visual Basic在每次执行包括那个对象的行代码时必需查询对象以及它的方法和属性。为了验证这个对象以及它的方法和属性是否正确指定,Visual Basic 必需利用操作系统和支持对象的应用来检查。下面看看一段Visual Basic 代码:

Dim wdApp As Object

Set wdApp = CreateObject("Word.Application")


这个wdApp变量被定义为一般类型的对象。当这个变量被声明了,Visual Basic 并不知道它是属于什么类型的对象,所以你必须要为这个对象留出一定量的内存。既然特定对象引用是被指定到普通变量的,所以应用程序没有办法知道对象的界面是由什么组成的。只有在运行时间,应用程序才绑定到用户界面上。因此,不管你是什么时候引用新的对象,Visual Baisc必须检查系统注册以获得对象的信息。

早绑定

早绑定是一个解决慢Automation性能的好的解决方法。早绑定发生在编译的时候而不是在运行的时候,所以如果你的代码是在编译阶段保存的,在代码运行之前已经绑定结束了。当使用早绑定,Visual Basic 不需要连续验证对象信息,而是在应用程序执行的过程中使用对象。

另外,不是所有的Automation服务器都支持早绑定。这个Automation服务器必须支持一个类型库,这个类型库包含了关于服务器对象、方法和属性的信息。为了利用早绑定,你必须为Automation服务器的类型库设置一个引用。Visual Basic装载类型库到内存中,这使得它可以识别这些对象并且在代码编译的时候绑定它们。以下的代码段显示了怎样为对象创建一个早绑定界面:

Dim wdApp As Word.Application

Set wdApp = CreateObject("Word.Application")

3. 怎样创建Automation对象的新实例
Jscript(微软版本的JavaScript)是一个宽松类型的语言。换句话说,变量不是明显定义为指定的数据类型。你不能声明一个变量为指定的对象类型,所以早绑定不可能在JScript中。Jscript的ActiveXObject()构造函数通常用于为对象创建一个迟绑定界面:

var wdApp; // 一个普通变量

wdApp = new ActiveXObject("Word.Application");

Jscript不需要明显的变量声明,所以我们可以使用以下的代码:

var wdApp = new ActiveXObject("Word.Application");

ActiveXObject()函数的一般的语法如下:

var objVar = new ActiveXObject(class[, servername]);

objVar指定为一个持有实例化对象引用的变量。class使用library.object语法,它是指应用程序的名字(比如Word或者Excel等等)或者包含对象的库,并且对象是要创建的对象类的类型。servername(这是一个可选的参数)指定了包含对象的服务器的名字。

这个ActiveXObject()构造函数创建了一个OLE Automation(ActiveX)对象的实例。一旦对象被创建了,你可以使用定义的对象变量来引用它。如果ActiveX对象的实例已经运行,ActiveXObject()在它创建了必需的类型的对象的时候可能开始一个新的实例。下面的代码段可以让用户直接打开一个Word文档:

var pause = 0;

var wdDialogFileOpen = 80;

var wdApp = new ActiveXObject("Word.Application");

var dialog = wdApp.Dialogs(wdDialogFileOpen);

var button = dialog.Show(pause);
使用JavaScript中的OLE Automation

3. 怎样创建Automation对象的新实例

前面的代码段引用了Word.Application对象,它的方法在后面的教程要介绍。这里要注意等级结构,即一个方法或者属性是一个对象,它们又又自己的方法和属性。

象Visual Basic 6,Jscript可以通过增加一个新的参数(servername)来一步增加ActiveXObject函数。你可以在注册的ActinveX对象上指定服务器的名字。在远程服务器创建一个对象可以在Internet安全检查程序关闭的时候完成。你可以通过传递计算机的名字给ActiveXObject()构造函数的servername参数来在远程网络计算机上创建一个对象。比如,如果一个网络共享命名为"\\MYSERVER\D\Program Files",那那么servername的数值就为’MYSERVER”。另外,你可以使用DNS格式或者一个IP地址来指定位置。

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3