摘 要 WSH是一种基于32位Windows平台、应用于ActiveX脚本引擎、与编程语言无关的脚本宿主。本文通过几个实例介绍了如何在Delphi5.0中应用WSH技术。
关键词 Delphii WSH 脚本执行和辅助功能
1 引言
微软公司的WSH(Windows Scripting Host)是一种基于32位Windows平台、应用于ActiveX脚本引擎、与编程语言无关的脚本宿主。WSH具有良好的脚本语言支持特性,它支持VBScript、javascript、Perl、REXX等各种脚本语言。WSH的运行方式较为灵活,既可以在Windows中运行,也可以在DOS命令模式下启动。微软已经在Windows98、Windows2000中内置了WSH技术。
WSH对象模型主要包含了两类ActiveX接口:脚本执行和辅助功能。每类接口提供多种WSH对象,各对象有自己的方法和属性。脚本执行接口提供了许多属性和方法。这类接口允许脚本操作处理WSH,在屏幕上显示特定信息,执行一些基本功能(如创建Word应用程序对象)。辅助功能接口也提供了丰富的属性和方法供用户使用。利用这些属性和方法我们可以进行各种操作,例如:映射网络驱动器、连接远程打印机、获取编辑系统环境变量(如用户名、计算机名、域名等等)、操作注册表等。系统管理员可以利用这些辅助功能创建简单的登录脚本。程序编写者可以利用这些由WSH提供的对象接口在基于Windows的平台上执行各种自动化任务,例如:启动Word、Excel、Powerpoint任务,打开CAD文件等。
在Delphi5.0中应用WSH技术,不但可以利用WSH的强大功能增强应用程序的性能,还可以简化应用程序设计,使编程工作更为简单。某些原本只能由Windows API函数完成的工作现在可以使用更为简单明了的WSH完成。WSH为用户提供了多个对象,例如:WshShortcut、 WshShell、 WshArguments、 WshUrlShortcut、 Automation、WshEnvironment等等。我们可以利用它们进行各种应用。
2 WSH应用实例
2.1 映射网络驱动器
在实际开发MIS系统时,我们曾经碰到这样一个问题:该系统由企业内部30个不同的部门使用,由于管理的需要,各部门的数据除了通过专用数据库接口提交到服务器以实现数据共享外,还须由系统自动将各部门数据以专门的HTML文件格式发送到指定的服务器目录下。服务器上对应设置了30个不同的共享目录。服务器上的共享目录分别映射为本地各部门的指定驱动器如W:)。显然,逐个部门进行手工映射比较繁琐。比较严重的情况是,如果用户由于误操作断开该映射,将导致应用系统无法运行。比较好的做法是在系统启动时自动映射网络驱动器,WSH为我们提供了非常简单的实现方法。下面是一个示例性程序:
procedure TForm1.FormCreate(Sender: TObject);
var
oWshNetwork:variant ;
begin
oWshNetwork:=CreateOleObject('Wscript.Network');
oWshNetwork.MapNetworkDrive('w:','//ezss/ydmis','True','administrator','xyz');
End;
程序首先创建基于WSH的OLE对象,然后映射服务器ezss上的共享目录ydmis为W:。MapNetworkDrive方法的语法格式为:
MapNetworkDrive(strLocalName,strRemoteName,[bUpdateProfile],[strUser],[strPassword])
各参数含义简要说明如下:
strLocalName 映射到本地的驱动器名称。
strRemoteName 映射的远程共享名。
bUpdateProfile 如果本参数设置为TRUE,这种映射将存储在用户Windows系统的profiles文件夹下作为用户配置保留。
strUser、strPassword 指定受托共享的用户名和密码。
若要断开该映射,可以使用RemoveNetworkDrive方法,例如oWshNetwork.RemoveNetworkDrive('w:')。
2.2 创建应用程序快捷方式图标
WSH可以帮助我们非常容易地创建应用程序快捷方式图标,这使得我们能够自由地在安装程序中选择发布程序快捷图标的创建方式。至于应用程序快捷方式图标放置在哪个地方,则完全由我们来决定。实际上,WSH允许我们自由地将应用程序快捷方式图标放置在桌面、开始菜单、程序组、发送到、网上邻居、我的文档等各种地方。在WindowsNT中,还可以放置在所有用户的启动组、开始菜单或桌面上。实际操作时,WSH首先利用WshSpecialFolders.Item("strFolderName")属性返回指定文件夹(如桌面)的路径,然后利用CreateShortcut方法创建快捷方式。当然,我们也可以指定该快捷方式的热键、目标路径、工作路径、窗口状态等等。下面是一个示例:
procedure TForm1.Button1Click(Sender: TObject);
var
oWshShell,strShortcut,oMyShortcut:variant ;
begin
oWshShell:=CreateoleObject('Wscript.Shell');
strShortcut:=oWshShell.SpecialFolders.Item('DeskTop');
oMyShortcut:=oWshShell.CreateShortcut(strShortcut+'/MIS辅助教学.lnk');
oMyShortCut.Hotkey:='ALT+CTRL+C';
oMyShortcut.TargetPath:= 'd:/mis/mis.exe';
oMyShortCut.WorkingDirectory="d:/mis/"
oMyShortCut.WindowStyle=1
oMyShortCut.Save;
end;
上述程序代码在桌面创建了一个“MIS辅助教学”应用程序快捷方式图标。窗口状态(WindowStyle)设置为普通,Save()方法用于保存该快捷方式图标。另外,我们可以根据需要将Item("strFolderName")中的strFolderName修改为AllUsersDesktop、AllUsersStartMenu、AllUsersPrograms、AllUsersStartup、Desktop、Favorites、Fonts、MyDocuments、NetHood、PrintHood、Programs、Recent、SendTo、StartMenu、Startup等串值,以便在不同的地方创建应用程序快捷方式图标。
2.3 实现Word、Powerpoint、Excel自动
尽管Delphi5.0已经提供了Office组件,也提供了这方面的应用实例,但在处理一个已经存在的Office文档时仍然不够方便。WSH可以灵活地处理Office文档,这使得我们几乎可以在应用程序中无缝集成Office功能。在创建基于Office应用程序的OLE对象后,编程人员可以利用Office录制宏的功能,非常方便地获得有关处理命令,减少了开发难度。这样一来,在应用程序中实现Word、Powerpoint、Excel自动化,就非常容易了。下面是一个处理Word文档的简单示例:
procedure TForm1.Button1Click(Sender: TObject);
var
oWord:variant ;
begin
OWord:=createoleobject('word.application') ;
oWord.visible:=false;
oWord.documents.open('d:/scgl/mr_10.doc');
oWord.documents.item(1).saveas('d:/scgl/htms/mr_10.html',8);
oWord.quit;
end;
上述代码的主要作用是将mr_10.doc文件另存为Web页,适用于Word97、Word2000。请注意saveas()中的参数8,它用于标识HTML文档格式。如果不使用该参数,保存为Web页后可能全是乱码。
2.4 操作注册表
Delphi5.0已经提供了操作注册表的方法(使用TRegistry.Create),但使用WSH的处理方法更为简单明了。WSH通过RegRead、RegDelete、RegWrite方法,可以对注册表的5个分支部分,即HKEY_CURRENT_USER(HKCU)、HKEY_LOCAL_MACHINE(HKLM)、HKEY_CLASSES_ROOT(HKCR)、HKEY_USERS 、HKEY_CURRENT_CONFIG ,进行操作。注意,括号内为缩写形式,实际应用时,我们既可以使用全称,也可以使用缩写。下面来看一个示例程序:
procedure TForm1.Button1Click(Sender: TObject);
var
oWshReg:variant ;
begin
oWshReg:=CreateOleObject('Wscript.Shell');
oWshReg.RegWrite('HKCU/WSHSample/Value',10,'REG_BINARY');
end;
上述代码在注册表的HKEY_CURRENT_USER分支下创建主键WSHSample,并在该主键下创建二进制值Value,其数值为10。RegWrite方法的语法格式为:RegWrite(strName,anyValue,[strType])。其中,strType参数用于指定键值的数据类型,可以是REG_DWORD、REG_BINARY、REG_SZ等等。
3 结束语
总的看来,WSH使程序代码容易编写、易于阅读,还可以实现一些特殊功能。在使用Delphi5.0开发应用系统时,我们可以适当使用WSH技术。
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
参考文献
1 Charlie Calvert,Delphi4编程技术内幕,机械工业出版社,1999
2 Micros
oft Corporation,动态HTML参考和开发应用大全,人民邮电出版社,2000.3
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
相关文章:
信息化进程中的生活观转型问题04-26
申请课题研究的有效指南!04-26
博士论文模板(如何选择最适合自己的模板)04-26
理工类论文模板(哪些是值得推荐的)04-26