鱼鱼2之Widget开发教程(二)

在本次教程中,我们将讲述如何利用Script+Activex实现更强大的功能.
事实上,鱼鱼2的很多widget都使用了ActiveX.
比如鱼鱼助手(一个会说话的动画角色),利用了微软的Agent ActiveX控件,实现了类似Office助手一样的功能.

所以说,Script的强大是它的扩展性.

ActiveX是什么可能有些还没听说过,但是,我们的系统中充斥着无数的ActiveX控件,甚至臭名昭著的3721,网络实名之类的都是ActiveX控件,你说ActiveX强大不强大呢.

好了,废话不说了,既然我们了解了什么是Script和Active,就进入详细的教程吧:

 

 

几个类似的名词

1991年微软发布了ole1.0(Object   Linking   and   Embedding)版,这是一个古老技术,以DDE为代表,实现了对象连接和嵌入功能(类似word里嵌个excel表格,不过现在用的肯定是更新的技术).这个在win16程序里就有了.比如最早的剪贴板功能就是用ole1.0实现的

ms在对ole的开发过程中,将ole的底层抽出来形成了com规范(理论),这在下面再说.
   
1993微软发布了ole2.0版.这是利用com重写的一套数据交换和传输接口.而且增加了自动化功能有时也称为OLE   Automation.包括vb专用的vbx控件.   

  ole2.0发布后,com和ole开始互相重叠和借用,因为没有很明确的说法,可以指出什么是com什么是ole.这种混乱可以从Kraig的巨著Inside   OLE   2看出,在这本书里,他也说明了很多是现在普遍认为是属于com的概念.   

  com本身并没有一个明确的发布时间,com本身也是由这本那本的白皮书和技术规范组成的.微软本身没有开发com的打算,但是在开发ole的过程中发现其底层技术可以作为一套独立的解决方案--这就是com!   
  让我们继续看下去   

  随着也不知道是称呼ole还是com的技术的发展,微软推出了一系列的产品,包括ole   controls,directX,activeX,dcom   

  这里要说明一下activeX这个术语.在1995年12月,微软的发展战略进行了调整,宣布要将主意精力放在网络开发上(现在回过头来,可以看到,bill的决策对这个世界的影响).于是他们的市场部门发明了ActiveX这个词语,并且特指可以在网页山使用的ActiveX控件.实质上,这就是ole控件.   
  dcom则是另外的一个重要里程,是随着nt4发布的.从此com从单机版扩展到网络.win95则可以下载一个升级包获取dcom支持(甚至在部分unix主机上,你也可以安装dcom支持).   
  进入九十年代后期,com和ole又逐渐清晰起来,com指现在通常所指的组件技术,而ole又退回到只含链接嵌入的含义.(有个很有趣的说法,原来ole的发音是oh-el-ee,现在则叫做oh-lay,以示不同时期的区别)   
  mts是微软从桌面操作系统进军企业级操作系统的产品,我记得最早的出现应该是随着nt4.0   opitonal   packege中iis发布的.从此com成为一个健壮的企业级方案.   
  开发win2000时,微软决定讲com升级为com+,并且将mts3.0开发小组和com+开发小组合并,所以没有新的mts了,它已经被整合到com+中去了.

 

 

什么是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来编写脚本,你可以适用对象浏览器来取出必需的常量的值,这样你就可以在脚本中来显性指定它们了。

什么是绑定

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

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


实际上,绑定是指代码访问在其它的应用程序对象的方法。当你从一个应用程序使用Automation来处理另外一个应用程序中对象的时候,你编写代码的应用程序就是一个Automation控制器。这个你正在处理对象的应用程序是Automation服务器。当一个Automation 控制器创建一个指向由Automation服务器提供对象的变量,你必需验证对象是否存在以及使用对象的任何属性和方法是正确指定的。

这个验证过程就所谓的”绑定”。有两种绑定类型要注意: late binding(迟绑定) 和 early binding(早绑定)。脚本语言一般仅仅支持late binding.

以下的代码段显示了怎样为对象创建一个绑定:
(VBS代码)
复制内容到剪贴板
代码:

Dim wdApp
Set wdApp = CreateObject("Word.Application")
(JS代码)
复制内容到剪贴板
代码:
var wdApp=New ActiveX('Word.Application');
很明显不用脚本的语法略有不同,但原理一样.
这个Word.Application就是Word ActiveX控件的ProgID,而一般网页上使用的脚本多数采用这样的方式,类似{000209FF-0000-0000-C000-000000000046}.
你可以通过注册表搜索的方式来寻找一个控件的ProgID.

显然,使用ProgID的方式更易于理解和记忆.

怎样创建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的版本
复制内容到剪贴板
代码:

function getVersion()
{
   var wdApp = new ActiveXObject("Word.Application");
   return wdApp.Version;
}
 

获取ActiveX的内置函数和属性

看了上面的列子,你一定会有疑问,我怎么知道返回word版本的属性是wdApp.Version呢?

Word还有哪些属性或者功能呢?

很简单的,一般我喜欢用VB6的对象浏览器来查看.
你也可以使用其他可视化编程工具.
也可以查看某个控件的SDK文档.微软的ActiveX的帮助文件都可以从MSDN上查到,相比较对象浏览器可以得到详细的使用说明.

都有哪些常见的ActiveX控件呢?

以Xp系统为例,微软已经给我们内置了很多ActiveX控件:

File System Object(文件系统对象):

可以对本机文件操作的ActiveX控件,详细帮助请参看 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vbcn7/html/vbconintroductiontofilesystemobjectmodel.asp

对象说明 FileSystemObject使您得以创建和删除驱动器、文件夹与文件,获取有关它们的信息,以及以常规方式操作它们。许多与此对象关联的方法在其他对象中重复这些功能。 Drive使您得以收集附加到系统的驱动器的信息,例如有多少可用空间以及其共享名称是什么。请注意,FSO 模型下的“驱动器”不一定是硬盘:它可以是 CD-ROM 驱动器、RAM 磁盘等。驱动器也不必以物理方式附加到系统上;它也可以通过局域网 (LAN) 以逻辑方式进行连接。 Folder使您得以创建、删除或移动文件夹,以及在系统中查询它们的名称、路径和其他信息。 File使您得以创建、删除或移动文件,以及在系统中查询它们的名称、路径和其他信息。 TextStream使您得以读取和写入文本文件。
FSO 方法下表显示 FSO 方法以及它们执行的任务:
任务命令创建新对象 CreateFolderCreateTextFile删除文件或文件夹 DeleteFileFile.DeleteDeleteFolderFolder.Delete复制对象 CopyFileFile.CopyCopyFolderFolder.Copy移动对象 MoveFileFile.MoveMoveFolderFolder.Move访问现有驱动器、文件夹或文件 GetDriveGetFolderGetFile
注意   FSO 模型不支持创建或删除驱动器。
如您所见, FileSystemObject 对象模型中的一些功能是冗余的。例如,可以用 FileSystemObject 对象的 CopyFile 方法,也可以用 File 对象的 Copy 方法来复制文件。这些方法的工作方法是相同的;两种版本都包含在内,以便为您提供最大的编程灵活性。
但是,请注意,不需要为新创建的对象使用 Get 方法,因为 Create 函数已经将返回指向它的句柄。例如,如果使用 CreateFolder 方法创建一个新文件夹,则不需要使用 GetFolder 方法访问其属性,如 NamePathSize。只需设一个变量给 CreateFolder 函数,来获得新创建文件夹的句柄,然后访问它的属性、方法和事件。

驱动器信息 Drive 对象使您得以获取有关各种驱动器的信息,这些驱动器以物理方式或者通过网络附加到系统上。其属性包含下列信息:
属性说明 TotalSize驱动器的总大小(以字节为单位) AvailableSpaceFreeSpace驱动器上有多少可用空间(以字节为单位) DriveLetter分配给驱动器的字母 DriveType驱动器的类型(可移动、固定、网络、CD-ROM 或 RAM 磁盘) SerialNumber驱动器的序列号 FileSystem驱动器使用的文件系统的类型(FAT、FAT32 或 NTFS) IsReady驱动器是否可用 ShareNameVolumeName共享和/或卷的名称 PathRootFolder驱动器的路径或根文件夹
App.Path、ChDir、ChDrive 和 CurDir如果使用 Path 属性 ( App.Path)、 ChDriveChDir 语句或者 CurDir 函数,要知道的是它们可能返回统一命名约定 (UNC) 路径(即以 \\ Server\ Share... 开头的路径),而不是驱动器路径(如 e:\ Folder),具体取决于运行程序或项目的方式。
App.Path 返回 UNC 路径,当:
  • 从网络共享(即使将网络共享映射为驱动器盘符)加载项目后运行该项目。
  • 从网络共享运行编译的可执行文件(但仅当使用 UNC 路径运行它时)。
ChDrive 无法处理 UNC 路径,而且当 App.Path 返回这样的路径时它会引发错误。可以通过在 ChDrive 语句前添加 On Error Resume Next,或者通过测试 App.Path 的前两个字符看它们是否为反斜杠来处理此错误。
命令提示始终有当前目录的驱动器路径,所以 CurDir 设置为驱动器路径。 ChDir 不引发错误,但是它无法将目录从驱动器路径更改为 UNC 路径。这种情况的唯一变通方法是定位本地驱动器(它映射为 UNC 路径中指定的共享),或者使用网络命令创建一个这样的映射。
如果项目从网络共享位置(不论是 UNC 路径还是映射的驱动器路径)加载到 Visual Basic 开发环境中,则在运行该项目时 App.Path 返回 UNC 路径,而且 ChDrive 失败并引发错误。 ChDir 不引发错误,但它无法更改目录。这种情况的唯一变通方法是手动设置驱动器和目录。
如果多个人可以打开网络共享上的项目,则可使用 MS-DOS 环境变量给予每个人一个该共享的自定义映射。
文件夹信息下表显示用来执行通用文件夹任务的方法:
方法任务 FileSystemObject.CreateFolder创建文件夹。 Folder.Delete
FileSystemObject.DeleteFolder删除文件夹。 Folder.Move
FileSystemObject.MoveFolder移动文件夹。 Folder.Copy
FileSystemObject.CopyFolder复制文件夹。 Folder.Name检索文件夹的名称。 FileSystemObject.FolderExists确定驱动器上是否存在某文件夹。 FileSystemObject.GetFolder获取现有 Folder 对象的实例。 FileSystemObject.GetParentFolderName找出文件夹的父文件夹名。 FileSystemObject.GetSpecialFolder找出系统文件夹的路径。
顺序文本文件和 FSO在要读取 FileSystemObject 对象内文件的内容时,顺序文本文件(有时称为“文本流”)非常有用。可用下列这些方法访问顺序文本文件:
方法任务 CreateTextFileOpenTextFile OpenAsTextStream创建顺序文本文件。 WriteWriteLine向文本文件添加数据。 ReadReadLine ReadAll从文本文件读取数据。 File.MoveMoveFile移动文件。 File.CopyCopyFile复制文件。 File.DeleteDeleteFile删除文件。
看看上面列举的方法(函数),你会发现,有些功能鱼鱼2的引擎已经内置了,但是有些功能鱼鱼的引擎并不具备,比如删除一个文件.所以这个ActiveX对我们的作用很大,是常用的控件.

但是,这个控件正因为能力较强,错误的编程可能会让你删除不该删除的文件,所以,一定要研究透彻再使用啊,呵呵.
 
WMI控件, 目前鱼鱼中,使用这个控件的例子是"进程管理器".具体参考 http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/WDdnclinicscripting.mspx?mfr=true

WMI 提供程序在 WMI 和托管资源之间扮演着中间方的角色。提供程序代表使用者应用程序和脚本从 WMI 托管资源请求信息,并发送指令到 WMI 托管资源。
例如,使用内置 Win32 提供程序来检索内存和服务相关信息。使用内置的事件日志提供程序来从 Windows 事件日志检索记录。

通过将托管资源公开给基于 WMI 标准的、统一访问模型的 WMI 基础结构,提供程序隐藏托管资源独有的实现详细信息。WMI 提供程序使用托管资源本机 API 与其相应的托管资源通讯,使用 WMI 编程接口与 CIMOM 通讯。例如,内置的事件日志提供程序调用 Win32 事件日志 API 来访问事件日志。

基于 WMI 的可扩展体系结构,软件开发人员可以开发并集成附加提供程序来公开其产品特有的管理函数。监视 Exchange 连接器状态的 Exchange Server 2000 提供程序就是一个这样的示例。同样,Application Center、Operations Manager、Systems Management Server、Internet Information Server 和 SQL Server 都包含 WMI 提供程序。

表 1:部分标准的 WMI 提供程序清单
提供程序DLL命名空间说明
Active Directory 提供程序
dsprov.dll
root\directory\ldap
将 Active Directory 对象映射到 WMI。
事件日志提供程序
ntevt.dll
root\cimv2
管理 Windows 事件日志,例如,读取、备份、清除、复制、删除、监视、重命名、压缩、解压缩和更改事件日志设置。
性能计数器提供程序
wbemperf.dll
root\cimv2
提供对原始性能数据的访问。
注册表提供程序
stdprov.dll
root\default
读取、写入、枚举、监视、创建、删除注册表项和值。
SNMP 提供程序
snmpincl.dll
root\snmp
提供对 SNMP MIB 数据的访问,并从 SNMP 托管设备捕获。
WDM 提供程序
wmiprov.dll
root\wmi
提供对 WDM 设备驱动程序中信息的访问。
Win32 提供程序
cimwin32.dll
root\cimv2
提供关于计算机、磁盘、外围设备、文件、文件夹、文件系统、网络组件、操作系统、打印机、进程、安全性、服务、共享、SAM 用户及组,以及更多资源的信息。
Windows 安装程序提供程序
msiprov.dll
root\cimv2
提供对已安装软件信息的访问。

 

 

WshShell 对象
ProgID Wscript.Shell
文件名 WSHom.Ocx
CLSID F935DC22-1CF0-11d0-ADB9-00C04FD58A0B
IID F935DC21-1CF0-11d0-ADB9-00C04FD58A0B


下表说明和 WshShell 对象有关的属性。

属性 说明
Environment 返回 WshEnvironment 集合对象。
SpecialFolders 使用 WshSpecialFolders 对象提供对 Windows shell 文件夹的访问,如桌面文件夹,开始菜单文件夹和个人文档文件夹。


下表说明和 WshShell 对象有关的方法。

方法 说明
CreateShortcut 创建并返回 WshShortcut 对象。
ExpandEnvironmentStrings 扩展 PROCESS 环境变量并返回结果字符串。
Popup 显示包含指定消息的消息窗口。
RegDelete 从注册表中删除指定的键或值。
RegRead 从注册表中返回指定的键或值。
RegWrite 在注册表中设置指定的键或值。
Run 创建新的进程,该进程用指定的窗口样式执行指定的命令。


WshShell.Environment
Environment 属性返回 WshEnvironment 对象。

语法
复制内容到剪贴板
代码:
WshShell.Environment ( [strType]) = objWshEnvironment
注释
若 strType 指定了环境变量所处的位置,可能值为 "System"、"User"、"Volatile" 和 "Process"。若未提供 strType,则该方法在 Windows NT 中检索系统环境变量或在 Windows 95 中检索进程环境变量。

对于 Windows 95,strType 参数仅支持 "Process"。

下列变量是由 Windows 操作系统提供的。脚本也可获取由其他应用程序设置的环境变量。

名称 说明
NUMBER_OF_PROCESSORS 计算机上运行的处理器数目。
PROCESSOR_ARCHITECTURE 用户工作站使用的处理器类型。
PROCESSOR_IDENTIFIER 用户工作站的处理器 ID。
PROCESSOR_LEVEL 用户工作站的处理器级。
PROCESSOR_REVISION 用户工作站的处理器版本。
OS 用户工作站所用的操作系统。
COMSPEC 用于运行“命令提示”窗口的命令(通常为 cmd.exe)。
HOMEDRIVE 本地主驱动器(通常为 C 驱动器)。
HOMEPATH 用户的默认路径(在 Windows NT 上通常为 \users\default)。
PATH 路径环境变量。
PATHEXT 可执行文件的扩展名(通常为 .com、 .exe、.bat 或 .cmd)。
PROMPT 命令提示符(通常为 $P$G)。
SYSTEMDRIVE 系统所在的本地驱动器(例如,c:\)。
SYSTEMROOT 系统目录(例如,c:\winnt)。和 WINDIR 相同。
WINDIR 系统目录(例如 c:\winnt)。和 SYSTEMROOT 相同。
TEMP 存储临时文件的目录(例如,c:\temp)。用户可更改。
TMP 存储临时文件的目录(例如,c:\temp)。用户可更改。


示例
'' Retrieve the NUMBER_OF_PROCESSORS system environment variable
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")

Set WshSysEnv = WshShell.Environment("SYSTEM")
Wscript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")
请参阅
WshEnvironment 对象


WshEnvironment 对象
WshEnvironment 对象未直接给出,可用 WshShell.Environment 属性来访问。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID


下表描述与 WshEnvironment 对象关联的属性。

属性 说明
Item 获取或设置指定的环境变量值。
Count 枚举项的数目。
length 枚举项的数目 (JScript)。


下表描述与 WshEnvironment 对象关联的方法。

方法 说明
Remove 删除指定的环境变量。


WshShell.SpecialFolders
SpecialFolders 属性提供 WshSpecialFolders 对象以便访问 Windows 的 shell 文件夹,例如桌面文件夹、开始菜单文件夹和个人文档文件夹。

语法
复制内容到剪贴板
代码:
WshShell.SpecialFolders = objWshSpecialFolders
示例
'' This code fragment shows how to access the desktop folder
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")
MsgBox "Your desktop is " & WshShell.SpecialFolders("Desktop")
请参阅
WshSpecialFolders 对象


WshSpecialFolders 对象
该对象未直接给出。要得到 WshSpecialFolders 对象,请使用 WshShell.SpecialFolders 属性。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID


下表描述与 WshSpecialFolders 对象关联的属性。

属性 描述
Item 指定文件夹的完整路径(默认)。
Count 枚举项的数目。
length 枚举项的数目 (JScript) 。

WshSpecialFolders.Item
Item 属性返回由 strFolderName 指定的文件夹的完整路径。它是默认属性。

语法
WshShell.SpecialFolders.Item("strFolderName") = strFolderPath
WshShell.SpecialFolders("strFolderName") = strFolderPath

注释
若请求的文件夹 (strFolderName) 不可用,则 WshShell.SpecialFolders("strFolderName") 返回 NULL。例如,Windows 95 没有 AllUsersDesktop 文件夹,如果 strFolderName = AllUsersDesktop,则返回 NULL。

Windows 95 和 Windows NT 4.0 操作系统提供下列指定文件夹:
AllUsersDesktop
AllUsersStartMenu

AllUsersPrograms

AllUsersStartup

Desktop

Favorites

Fonts

MyDocuments

NetHood

PrintHood

Programs

Recent

SendTo

StartMenu

Startup

Templates

示例
'' This fragment returns the full path for the Windows Desktop folder
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")
StrMyDesktop = WshShell.SpecialFolders("Desktop")
'' List all special folders
For Each strFolder In WshShell.SpecialFolders
MsgBox strFolder
Next

请参阅
WshShell.SpecialFolders 属性


WshShell.CreateShortcut
CreateShortcut 方法创建 WshShortcut 对象并将其返回。如果快捷方式标题以 .url 结尾,就会创建 WshURLShortcut 对象。

语法
复制内容到剪贴板
代码:
WshShell.CreateShortcut(strPathname) = objShortcut
示例
'' This code fragment creates a shortcut
'' to the currently executing script
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set oShellLink = WshShell.CreateShortcut("Current Script.lnk")
oShellLink.TargetPath = Wscript.ScriptFullName
oShellLink.Save
Set oUrlLink = WshShell.CreateShortcut("Microsoft Web Site.URL")
oUrlLink.TargetPath = "http://www.microsoft.com"
oUrlLink.Save
请参阅
WshShortcut 对象、WshUrlShortcut 对象

WshShortcut 对象
该对象未直接给出。要获得 WshShortcut 对象,请使用 WshShell.CreateShortcut 方法。

ProgID N/A
文件名 WSHom.Ocx
CLSID F935DC28-1CF0-11d0-ADB9-00C04FD58A0B
IID F935DC27-1CF0-11d0-ADB9-00C04FD58A0B


下表说明和 WshShortcut 对象有关的属性。

属性 说明
Arguments 快捷方式对象的参数。
Description 快捷方式对象的说明。
Hotkey 快捷方式对象的热键。
IconLocation 快捷方式对象的图标位置。
TargetPath 快捷方式对象的目标路径。
WindowStyle 快捷方式对象的窗口样式。
WorkingDirectory 快捷方式对象的工作目录。


下表说明与 WshShortcut 对象有关的方法。

方法 说明
Save 将快捷方式存储到指定的文件系统中。

WshShortcut.Arguments
Arguments 属性提供快捷方式对象的参数。

语法
WshShortcut.Arguments = strArguments

WshShortcut.Description
Description 属性提供快捷方式对象的说明。

语法
WshShortcut.Description = strDescription

WshShortcut.Hotkey
HotKey 属性提供快捷方式对象的热键。热键是启动或切换程序的键盘快捷方式。

语法
WshShortcut.HotKey = strHotKey

注释
strHotKey 的BNF语法如下:
复制内容到剪贴板
代码:
Hotkey ::= modifier* keyname
modifier ::= "ALT+" | "CTRL+" | "SHIFT+" | "EXT+"
keyname ::= "A" .. "Z" |
"0".. "9" |
"Back" | "Tab" | "Clear" | "Return" |
"Escape" | "Space" | "Prior" | ...
所有键的名称都可以在 WINUSER.H 中找到。热键不区分大小写。

热键只能激活位于 Windows 桌面或 Windows“开始”菜单的快捷方式。

Windows 资源管理器不接受 ESC、ENTER、TAB、SPACE、PRINT SCREEN 或 BACKSPACE,即使 WshShortcut.Hotkey 遵循 Win32 API 支持它们。因此,建议在快捷方式中不要用这些键。

示例
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.WshShell")
strDesktop = WshShell.SpecialFolders("Desktop")
Set oMyShortcut = WshShell.CreateShortcut(strDesktop & "\a_key.lnk")
OMyShortcut.TargetPath = "%windir%\notepad.exe"
oMyShortCut.Hotkey = "ALT+CTRL+F"
oMyShortCut.Save
Wscript.Echo oMyShortCut.HotKey = "Alt+Ctrl+F"
请参阅
WshSpecialFolders 对象

WshShortcut.IconLocation
IconLocation 属性提供快捷方式对象的图标位置。图标位置的格式应为 "Path,index"。

语法
WshShortcut.IconLocation = strIconLocation

WshShortcut.TargetPath
TargetPath 属性提供快捷方式对象的目标路径。

语法
WshShortcut.TargetPath = strTargetPath

WshShortcut.WindowStyle
WindowStyle 属性提供快捷方式对象的窗口样式。

语法
WshShortcut.WindowStyle = natWindowStyle

WshShortcut.WorkingDirectory
WorkingDirectory 为一个快捷方式对象提供工作目录。

语法
WshShortcut.WorkingDirectory = strWorkingDirectory

WshShortcut.Save
Save 方法把快捷方式对象保存到由 FullName 属性指定的位置。

语法
WshShortcut.Save

WshUrlShortcut 对象
该对象未直接给出。要获取 WshUrlShortcut 对象,可使用 WshShell.CreateShortcut 方法。

ProgID N/A
文件名 WSHom.Ocx
CLSID
IID


下表说明了和 WshUrlShortcut 对象有关的属性。

属性 说明
FullName URL 快捷方式对象的完整路径。
TargetPath URL 快捷方式对象的目标路径。


下表说明了和 WshUrlShortcut 对象有关的方法。

方法 说明
Save 将快捷方式保存到指定的文件系统中。

WshUrlShortcut.FullName
FullName 属性提供快捷方式对象的完整路径。

语法
WshUrlShortcut.FullName = strFullName

WshUrlShortcut.TargetPath
TargetPath 属性提供快捷方式对象的目标路径。

语法
WshUrlShortcut.TargetPath = strTargetPath

WshUrlShortcut.Save
Save 方法保存一个快捷方式,该快捷方式指向 FullName 属性指定的位置。

语法
WshUrlShortcut.Save

WshShell.ExpandEnvironmentStrings
ExpandEnvironmentStrings 方法在 strString 中扩展 PROCESS 环境变量并返回结果字符串。变量被 ''%'' 字符括起。

环境变量不区分大小写。

语法
WshShell.ExpandEnvironmentStrings(strString) = strExpandedString

示例
复制内容到剪贴板
代码:
MsgBox "Prompt is " & WshShell.ExpandEnviromentStrings("%PROMPT%")
WshShell.Popup
Popup 方法显示一个弹出式消息框窗口,消息框中包含的消息由 strText 指定。该消息框的窗口标题由 strTitle 指定。若 strTitle 省略,则窗口标题为 Windows Scripting Host。

语法
复制内容到剪贴板
代码:
WshShell.Popup(strText, [natSecondsToWait], [strTitle], [natType]) = intButton
注释
若提供 natSecondsToWait 且其值大于零,则消息框在 natSecondsToWait 秒后关闭。

natType 的含义与其在 Win32? MessageBox 函数中相同。下表显示 natType 中的值及含义。下表中的值可以组合。

按钮类型
值 说明
0 显示“确定”按钮
1 显示“确定”和“取消”按钮
2 显示“终止”、“重试”和“忽略”按钮
3 显示“是”、“否”和“取消”按钮
4 显示“是”和“否”按钮
5 显示“重试”和“取消”按钮


图标类型
值 说明
16 显示停止标记图标
32 显示问号图标
48 显示感叹号图标
64 显示信息标记图标


以上两个表并不涵盖 natType 的所有值。完整的列表请参阅 Win32 文档。

返回值 intButton 指示用户所单击的按扭编号。若用户在 natSecondsToWait 秒之前不单击按扭,则 intButton 设置为 -1 。

值 说明
1 “确定”按扭
2 “取消”按扭
3 “终止”按扭
4 “重试”按扭
5 “忽略”按扭
6 “是”按扭
7 “否”按扭


示例
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Popup "Where do you want to go today?"
请参阅
Wscript.Echo 方法

Wscript.Echo
Echo 方法在窗口(Wscript.exe 中)或“命令提示符”窗口(Cscript.exe 中)显示参数。

参数用空格分隔。在 Cscript.exe 中,该方法在显示最后一个参数之后输出一对回车/换行(CR LF)。

语法
Wscript.Echo [anyArg...]

示例
复制内容到剪贴板
代码:
Wscript.Echo
Wscript.Echo 1, 2, 3
Wscript.Echo "Windows Scripting Host is cool."
WshShell.RegDelete
RegDelete 从注册表中删除名为 strName 的键或值。

语法
WshShell.RegDelete strName

参数
strName
如果 strName 以反斜杠 (\) 结束,则该方法删除键而不是值。
strName 参数必须以下列之一的根键名开始:

短根键名 长根键名
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG


示例
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegDelete "HKCU\ScriptEngine\Value" '' Delete value "Value"
WshShell.RegDelete "HKCU\ScriptEngine\Key\" '' Delete key "Key"
请参阅
WshShell.RegRead 方法、WshShell.RegWrite 方法


WshShell.RegRead
RegRead 方法返回名为 strName 的注册表键或值。

语法
WshShell.RegRead(strName) = strValue

参数
strName
如果 strName 以反斜杠 (\) 结束,则该方法返回键,而不是值。
strName 参数必须以下列根键名开始。

Short Long
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG


注释
RegRead 方法仅支持 REG_SZ、REG_EXPAND_SZ、REG_DWORD、REG_BINARY 和 REG_MULTI_SZ 数据类型。若注册表有其他数据类型,RegRead 返回 DISP_E_TYPEMISMATCH。

示例
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegRead("HKCU\ScriptEngine\Val") '' Read from value "Val"
WshShell.RegRead("HKCU\ScriptEngine\Key\") '' Read from key "Key"
请参阅
WshShell.RegDelete 方法、WshShell.RegWrite 方法


WshShell.RegWrite
RegWrite 方法设置名为 strName 的注册表键或值。

语法
WshShell.RegWrite strName, anyValue, [strType]

参数
strName
若 strName 以一个反斜杠 (\) 结束,则该方法设置键,而不是值。
strName 参数必须以下列根键名开头。

Short Long
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKCR HKEY_CLASSES_ROOT
HKEY_USERS
HKEY_CURRENT_CONFIG



anyValue
当 strType 为 REG_SZ 或 REG_EXPAND_SZ 时,RegWrite 方法自动将 anyValue 转换为字符串。若 strType 为 REG_DWORD,则 anyValue 被转换为整数。若 strType 为 REG_BINARY,则 anyValue 必须是一个整数。

strType
RegWrite 方法支持 strType 为 REG_SZ、REG_EXPAND_SZ、REG_DWORD 和 REG_BINARY。若其他的数据类型被作为 strType 传递,RegWrite 返回 E_INVALIDARG。
示例
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")

WshShell.RegWrite "HKCU\ScriptEngine\Value", "Some string value"
WshShell.RegWrite "HKCU\ScriptEngine\Key\", 1 "REG_DWORD"
请参阅
WshShell.RegDelete 方法、WshShell.RegWrite方法


WshShell.Run
Run 方法创建一个新的进程,该进程以 intWindowStyle 窗口样式执行 strCommand。

语法
WshShell.Run (strCommand, [intWindowStyle], [blnWaitOnReturn])

参数
strCommand
在 strCommand 参数内部的环境变量被自动扩展。

intWindowStyle
这是为新进程在 STARTUPINFO 结构内设置的 wShowWindow 元素的值。其意义与 ShowWindow 中的 nCmdShow 参数相同,可取以下值之一。名称 值 含义
SW_HIDE
0 隐藏窗口并激活另一窗口。
SW_MINIMIZE
6 最小化指定窗口并激活按 Z 序排序的下一个顶层窗口。
SW_RESTORE
9 激活并显示窗口。若窗口是最小化或最大化,则恢复到原来的大小和位置。在还原应用程序的最小化窗口时,应指定该标志。
SW_SHOW
5 以当前大小和位置激活并显示窗口。
SW_SHOWMAXIMIZED
3 激活窗口并以最大化显示该窗口。
SW_SHOWMINIMIZED
2 激活窗口并以最小化显示该窗口。
SW_SHOWMINNOACTIVE
7 最小化显示窗口。活动窗口保持活动。
SW_SHOWNA
8 以当前状态显示窗口。活动窗口保持活动。
SW_SHOWNOACTIVATE
4 按窗口最近的大小和位置显示。活动窗口保持活动。
SW_SHOWNORMAL
1 激活并显示一个窗口。若窗口是最小化或最大化,则恢复到其原来的大小和位置。



blnWaitOnReturn
如果未指定 blnWaitOnReturn 或其值为 FALSE,则该方法立即返回到脚本继续执行而不等待进程结束。
若 blnWaitOnReturn 设为 TRUE,则 Run 方法返回由应用程序返回的任何错误代码。如果未指定 blnWaitOnReturn 或其值为 FALSE,则 Run 返回错误代码 0(zero)。

示例
'' This fragment launches Notepad with the current executed script
复制内容到剪贴板
代码:
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("notepad " & Wscript.ScriptFullName)
WshShell.Run ("%windir%\notepad" & Wscript.ScriptFullName)

'' This fragment returns the error code from the executed application
Return = WshShell.Run("notepad " & Wscript.ScriptFullName, 1, TRUE)  

转载于:https://www.cnblogs.com/jannock/archive/2008/09/20/1294925.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值