文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>使用JavaScript中的OLE Automation

使用JavaScript中的OLE Automation

时间:2007-02-17  来源:PHP爱好者

  在前面的教程中我们已经有提到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参数来在远程网络计算机上创建一个对象。比如,如果一个网络共享命名为"MYSERVERDProgram Files",那那么servername的数值就为’MYSERVER”。另外,你可以使用DNS格式或者一个IP地址来指定位置。下面的函数返回运行在远程网络计算机(名为"MYSERVER")Word的实例的版本号:

function getVersion() {

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

return wdApp.Version;

}

如果指定的远程服务器不存在或者没有找到就会产生一个错误。当我们测试这个函数的时候,我们可以发现Jscript忽视了servername参数。所以我们在VBScript将这些函数放在一起,可以发现它并不工作:

Function GetVersion

Dim wdApp

Set wdApp = CreateObject("Word.Application", "MYSERVER")

GetVersion = wdApp.Version

End Function

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

Jscript支持同样Visual Basic中的GetObject()函数。它的一般的语法如下:

var objVar = GetObject([pathname][, class]);

objVar指定了一个变量来保留实例化对象的引用。Pathname是完全的路径和包含ActiveX对象的文件名。Class指定在字符串的表单中对象的类。Class参数使用了语法library.object,这跟ActiveXObject函数的第一参数是一样的。

总得说来,GetObject()函数在一个指定的文件中访问ActiveX 服务器。虽然两个参数是可选的,但是至少要提供其中一个参数。GetObject()函数是在存在ActiveX对象的当前实例的时候使用的。它不创建一个新的实例,比如ActiveXObject()函数。

如果你指定一个空的字符窗(""),GetObject()就返回一个对象的新实例,除非对象被注册为单一的实例,在这种情况下,当前的实例被返回。但是,如果pathname没有指定,对象的当前实例被返回。如果pathname没有被指定就会产生一个错误,并且没有对象的当前实例被发现。这里注意,GetObject()函数不能用于获得由Visual Basic创建的类的引用。

一些应用允许你访问对象库的特别部分。这时要在文件名之后使用一个感叹号(!),紧接下来的字符串是识别你想激活的库的一些部分。为了得到怎样创建这个字符串的信息,你可以参见Automation服务器的技术文档。比如,在画图引用程序中的文件可能拥有几个图层。你可以使用以下的代码来在一个图片中(比如 SCHEMA.CAD)激活一个图层:

var objVar = GetObject("C:CADSCHEMA.CAD!Layer2");

一些文件(其它的库)可能支持更多的类。比如,一个画图文件可能支持三种不同的类:应用程序对象、画图对象以及工具条对象。既然你只可以引用单一的对象,所以你必须指定你指的是哪个类:

var objVar = GetObject("C:DRAWINGSSAMPLE.DRW", "Figment.Drawing");

在前面的例子种,Figment是一个画图应用程序的名字,而Drawing是其中一个它支持的对象类型。

5. 怎样处理应用程序的实例

文档模板是应用程序和它支持的文档之间的连接。文档模板有两种类型:单一文档,它只能一次打开一个类型的文档;多文档模板,它允许多个文档同时被打开。下面的表格列出了Windows应用程序的各种类型:

单文档界面(SDI)应用程序


php爱好者站 http://www.phpfans.net PHP|MySQL|javascript|ajax|html.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载