以下是引用griefforyou在2005-4-3 12:33:26的发言:
要引用WINDOWS SCRIPT HOST对象
WINDOWS SCRIPT HOST对象在VB中的使用
作者:陈锐
我们知道在DOS下我们可以利用批处理文件来执行一些基本的系统和文件操作。而为了让用户能在Windows下同样得到功能,微软提供了Windows Script Host。在本文中我向大家介绍的是如何在VB中使用Windows Script Host对象来丰富自己的程序。
打开VB,点击菜单中的Project|References项,在弹出的References列表中如果有一项:Windows Script Host Object Modle。那么说明你的系统中已经安装了Windows Script Host对象,选中该对象然后再按确定键就可以将Windows Script Host对象加入到自己的工程中了。
1、获得Windows下一些特殊目录
如何获得Windows下一些特殊的文件目录(例如桌面、程序菜单)呢?使用下面的程序就可以获得这些特殊目录并在ListBox1中列出:
Dim iw1 As New IWshRuntimeLibrary.IWshShell_Class
List1.AddItem iw1.SpecialFolders(″Desktop″)
’获得桌面目录
List1.AddItem iw1.SpecialFolders(″Fonts″)
’获得系统字体目录
List1.AddItem iw1.SpecialFolders(″Programs″)
’获得程序菜单目录
List1.AddItem iw1.SpecialFolders(″StartUp″)
’获得程序启动目录
List1.AddItem iw1.SpecialFolders(″Recent″)
’获得最近使用文件目录
List1.AddItem iw1.SpecialFolders(″FAVORITES″)
’获得收藏夹目录
List1.AddItem iw1.SpecialFolders(″SENDTO″)
’获得发送到目录
List1.AddItem iw1.SpecialFolders(″NETHOOD″)
’获得网络邻居目录
List1.AddItem iw1.SpecialFolders(″AppData″)
’获得微软程序数据目录
2、运行程序
在VB中,我们有时候需要调用外部程序。而且还要暂停VB程序等待外部程序程序执行完毕。使用Windows Script Host对象,简直易如反掌。例如下面的语句:
Dim iw1 As New IWshRuntimeLibrary.IWshShell_Class
iw1.Run ″c:\windows\notepad.exe″,WshMaximizedFocus, True
就可以执行Windows下的记事本程序并使当前程序等待直到记事本程序关闭再执行下面的语句,如果不需要等待,将Run语句中的第三个参数从True改为False就可以了。
3、建立和断开网络驱动器映射
在一般情况下要在VB中建立网络驱动器连接需要使用复杂的API函数,而使用了Windows Script Host对象就可以使得一切变得十分简单,来看下面的范例:
Dim iwNet As New IWshNetwork_Class
’获得计算机名
Debug.Print iwNet.ComputerName
’获得用户所在的域名
Debug.Print iwNet.UserDomain
’获得用户名
Debug.Print iwNet.UserName
’将网络上的主机Server1的共享驱动器Share_d映射为本机的H盘
iwNet.MapNetworkDrive ″H:″,″\\Server1\Share_d″
For i=0 To iwNet.EnumNetworkDrives.Count-1
List1.AddItem iwNet.EnumNetworkDrives(i)
Next i
上面的程序首先在Debug窗口中显示本计算机和所在网络的名称以及用户名,然后建立一个网络驱动器映射,最后将映射到本机的驱动器在ListBox1中列出来。如果要断开映射的驱动器,只要调用下面的语句就可以了:
’断开驱动器
iwNet.RemoveNetworkDrive ″H:″
需要注意的一点是:调用Windows Script Host对象建立网络连接如果出现错误(例如要连接的主机不存在或驱动器错误),它不会象API函数那样返回一个错误码而会产生一个OLE错误,所以在程序中对于错误处理的代码一定要写好。
4、建立快捷方式
建立文件快捷方式并将快捷方式保存到文件也是Windows Script Host对象提供的功能之一,来看下面的代码:
Dim iw1 As New IWshRuntimeLibrary.IWshShell_Class
Dim iwSC As New IWshShortcut_Class
’建立一个快捷方式文件
Set iwSC=iw1.CreateShortcut(″c:\windows\notepad1.lnk″)
’设定快捷方式指向的对象
iwSC.TargetPath=″c:\windows\notepad.exe″
’设定对象(这里是Notepad.exe)运行时的参数
iwSC.Arguments=″c:\a.txt″
’设定对象运行时的工作目录
iwSC.WorkingDirectory=″c:\″
’设定快捷方式的图标
iwSC.IconLocation=″c:\windows\notepad.exe,1″
’保存快捷方式到文件
iwSC.Save
上面的程序建立一个指向Windows下记事本的快捷方式并保存到文件中。
5、注册表操作
使用Windows Script Host对象还可以进行注册表操作,例如建立、修改、读取、删除主键或者键值等。而且只需要三个函数,比使用Windows API来说方便的多。下面的语句就是一个建立和删除注册表键值的范例:
Dim WSHShell As New IWshRuntimeLibrary.IWshShell_Class
’在HKEY_CURRENT_USER下建立一个项,将默认值设置为Top level key
WSHShell.RegWrite ″HKCU\MyRegKey\″,″Top level key″
’在MyRegKey下建立一个子项,将默认值设置为Second level key
WSHShell.RegWrite ″HKCU\MyRegKey\Entry\″,″Second level key″
’在MyRegKey下建立一个值,名称为Value
WSHShell.RegWrite ″HKCU\MyRegKey\Value″, 1
’在MyRegKey下建立一个值,名称为Entry,类型设置为REG_DWORD
WSHShell.RegWrite ″HKCU\MyRegKey\Entry″,2,″REG_DWORD″
WSHShell.RegWrite ″HKCU\MyRegKey\Entry\Value1″,3,″REG_BINARY″
’删除相应的键
WSHShell.RegDelete ″HKCU\MyRegKey\Entry\Value1″
WSHShell.RegDelete ″HKCU\MyRegKey\Entry\″
WSHShell.RegDelete ″HKCU\MyRegKey\″
上面的程序建立并删除建立的项,要看到程序运行效果,可以将上面的最后三句RegDelete语句删除,然后打开注册表编辑器察看。从上面的语句可以看到,使用RegWrite语句可以建立和修改一个项或者值,如果第一个参数字符串最后有一个“\”符号的话就是操作一个项,否则就是操作一个值。
6、获得当前Windows环境参数
环境参数就是操作系统保存在内存中的一些标记或指示性字符串,它纪录了一些基本的系统设置,例如路径、临时文件目录等,使用Windows Script Host对象可以获得所有的Windows环境参数:
Dim iw1 As New IWshRuntimeLibrary.IWshShell_Class
Dim strinfo
For Each strinfo In iw1.Environment(″Process″)
List1.AddItem strinfo
Next
上面的程序得到当前所有的环境参数并在List1上列出来。
从上面我的介绍可以看到Windows Script Host对象的确是一个很有用的Windows系统操作对象,易于使用并且功能强大。(微软提供Windows Script Host对象以及另外一个文件操作对象Microsoft Scripting Run的另外一个目的是这两个对象可以在VB Script中建立,这样就可以通过Web执行文件和系统操作了,但是却被一些人利用,例如著名的I Love You 病毒,就是利用Windows Script Host对象操作注册表使自己附身Windows中,在利用Microsoft Scripting Run对象破坏系统文件)
以上程序用VB6编写,在Windows98、2000下运行通过。
这样是可以解决我说的问题,双击快捷方式后可以得到它指向的文件,可是您的代码好像没有把它打开吧,只是在界面上显示一片空白,而 没有运行该快捷方式所指 向的文件,是否少一条代码啊?郁闷