| |
| 一:你好!WSH |
| 程序知识点 |
| *MsgBox函数 |
| 语法:MsgBox(prompt[,buttons][.title][,helpfile,context]) |
| 程序源代码: |
| WelcomeMessage="你好!WSH!" |
| WelcomeText="Windows Scripting Host 实例" |
| MsgBox WelcomeMessage,vbInformation,WeclomeText |
| 二:显示文本信息 |
| 概述:介绍File文件对象技术的另一些应用,其中涉及到Type属性(文件类型),Size属性(文件大小)和DateLastAccessed属性(文件最后被访问时间) |
| 程序源代码: |
| '定义一个dispfile函数 |
| function dispfile(fn) |
| Dim fi |
| Dim att |
| On Error resume next |
| '获取file对象 |
| Set fi=fs.GetFile(fn) |
| '清空att字符串 |
| att="" |
| //126 |
| '将文件名称,文件类型,大小,最后访问时间的信息加入att |
| att=att+fn+":"+vbcrlf |
| att=att+"文件类型:"+fi.Type+vbcrlf |
| att=att+"文件最后访问时间:"+cStr(fi.DateLastAccessed)+vbcrlf |
| dispfile=att |
| End function |
| Set fs=CreateObject("Scripting.FileSystemObject") |
| Dim fileinfor |
| fileinfor="" |
| '调用dispfile函数获取c:\io.sys的文件信息 |
| fileinfor=fileinfor+dispfile("c:\io.sys")+vbcrlf |
| Set fo=fs.GetSpecialFolder(WindowFolder) |
| fileinfor=fileinfor+dispfile(fo.Path+"\win.ini")+vbcrlf |
| fileinfor=fileinfor+dispfile(fo.Path+"\system.ini")+vbcrlf |
| MsgBox fileinfor,vbinformation,"WSH显示文本信息" |
| 三.显示驱动器信息。 |
| 概述:已经知道利用对象技术,WSH程序可以获取系统信息,网络信息,网络信息,而驱动器对象可以提供详细的驱动器信息 |
| 本节介绍的知识点: |
| GetDrive方法 |
| DriveType属性 |
| IsReady属性 |
| FreeSpace属性 |
| TotalSize属性 |
| FileSystem属性 |
| SerialNumber属性 |
| ShareName属性 |
| DriveLetter属性 |
| VolumeName属性 |
| Drives集合 |
| For Each Next语句 |
| 程序知识点: |
| *GetDrive方法 |
| 返回一个与指定路径中的驱动器相对应的Drive对象。 |
| 语法:object.GetDrive drivespec |
| 参数:object始终是一个FileSystemObject的名字 |
| Drivespec:可以是C: C C:\或任何网络的说明(\\computer2\share1) |
| ps:对于共享,要进行检查以确保共享的存在。 |
| *DriveType属性 |
| 返回一个值,表示指定驱动器的类型。 |
| 语法:object.DriveType |
| 例子: |
| Sub ShowDriveType(drvpath) |
| Dim fs,d,s,t |
| Set fs=CreateObject("Scripting.FileSystemObject") |
| Set d=fs.GetDrive(drvpath) |
| Select Case d.DriveType |
| Case 0:t="Unknown" |
| Case 1:t="Removable" |
| Case 2:t="Fixed" |
| Case 3:t="Network" |
| Case 4:t="CD-ROM" |
| Case 5:t="RAM Disk" |
| End Select |
| s="Drive"&d.DriveLetter&":-"&t |
| MsgBox s |
| End Sub |
| *IsReady属性。 |
| 如果指定的驱动器已准备好,返回True;否则返回False |
| 语法:object.IsReady |
| *FreeSpace属性 |
| 返回指定的驱动器或网络共享的用户可用磁盘剩余空间容量。只读。 |
| 语法:object.FreeSpace |
| *TotalSize |
| 以字节为单位,返回驱动器或网络共享的总空间大小。 |
| *FileSystem属性。 |
| 返回指定驱动器所使用的文件类型。 |
| object.FileSystem |
| 返回类型包括FAT,NTFS,以及CDFS |
| *SeriousNumber属性。 |
| 返回用于唯一标识磁盘卷标的十进制序列号。 |
| object.SerialNumber |
| *ShareName属性。 |
| 返回指定驱动器的网络共享名。 |
| *DriveLetter |
| 返回麽个物理本地驱动器或共享的驱动器字母。 |
| *VolumeName属性。 |
| 设置或返回指定驱动器的卷标名。读/写属性。 |
| 语句:object.VolumeName[=newname] |
| *Drives集合。 |
| 所有可用驱动器的只读集合。 |
| *For Each Next |
| 程序源代码分析。 |
| '写文本文件的子程序 |
| Sub writefile(detail) |
| Set fs=CreateObject("Scripting.FileSystemObject") |
| set file=fs.CreateTextFile("驱动器信息.txt",True) |
| file.Write detail |
| file.Close |
| Set fs=nothing |
| End Sub |
| Sub dispdrvstat(drvname) |
| Dim dn |
| dn=Left(drvname,1) |
| Set drv=fso.GetDrive(dn) |
| With drv |
| Select Case DriveType |
| Case 1 |
| dn="软盘" |
| Case 2 |
| dn="硬盘" |
| Case 4 |
| dn="光盘" |
| End Select |
| '将驱动器的各项信息加入drvinfo字符串 |
| drvinfo=drvinfo+"驱动器类型:"+dn+vbcrlf |
| If.IsReady Then |
| drvinfo=drvinfo+"驱动器情况:以准备"+dn+vbcrlf |
| drvinfo=drvinfo+"驱动器未用容量:"+cStr(.FreeSpace/1024/1024)+"MB"+vbcrlf |
| drvinfo=drvinfo+"驱动器全部容量:"+cStr(.TotalSize/1024/1024)+"MB"+vbcrlf |
| drvinfo=drvinfo+"驱动器文件系统:".FileSystem+vbcrlf |
| drvinfo=drvinfo+"驱动器序列号:"+cStr(.SerialNumber)+vbcrlf |
| drvinfo=drvinfo+"驱动器共享名:"+.ShareName+vbcrlf |
| Else |
| drvinfo=drvinfo+"驱动器情况:未准备"+vbcrlf |
| drvinfo=drvinfo+"驱动器共享名:"+.ShareName+vbcrlf |
| End If |
| End With |
| End Sub |
| '取所有驱动器对象的信息 |
| Set fso=CreateObject("SCripting.FileSystemObject") |
| Dim drv |
| Dim drvs |
| Dim drvinfo |
| Set drvs=fso.Drives |
| For Each drv in drvs |
| If drv.IsReady Then |
| drvinfo=drvinfo+drv.DriveLetter+":\["+drv.VolumeName+"]"+vbcrlf |
| Else |
| drvinfo=drvinfo+drv.DriveLetter+":\"+vbcrlf |
| End If |
| Call dispdrvstat(drv.DriveLetter) |
| Next |
| Set fso=nothing |
| MsgBox drvinfo |
| Call writefile(drvinfo) |
| |
| 五:获取文件夹的信息。 |
| 1.概述:细说利用Folders集合获取文件夹信息的方法,以及Floders集合中的可用对象。同时在实例中也运用到Function过程的用法 |
| 2.知识点: |
| Floders集合 |
| GetSpecialFolder方法 |
| Function语句 |
| Files集合 |
| SubFolders属性 |
| DateLastModified属性 |
| Size属性 |
| 程序知识点 |
| *Folders集合 |
| 包含在一个Folder对象内的所有Folder对象的集合。 |
| 例子:说明如何获得一个Folder集合,以及如何用 FOR EACH NEXT语句来访问该集合中的每个Folder。 |
| Sub ShowFolderList(folderspec) |
| Dim fs,f,fl,fc,s |
| Set fs=CreateObject("Scripting.FileSystemObject") |
| Set f=fs.GetFolder(folderspec) |
| Set fc=f.SubFolders |
| For Each fl in fc |
| s=s&fl.name |
| s=s&vbcrlf |
| Next |
| MsgBox s |
| End Sub |
| *GetSpecialFolder方法 |
| 返回指定的特殊文件夹。 |
| 语法:object.GetSpecialFolder(folderspec) |
| *Function语句。 |
| 声明Function过程的名称,参数以及构成其主体的代码。 |
| *Files集合。 |
| 在一个文件夹内的所有File对象的集合。 |
| 例子:说明了如何获得一个Files集合。以及如何用For Each...Next语句来访问这个集合中的每个File: |
| Sub ShowFolderList(folderspec) |
| Dim fs,f,fl,fc,s |
| Set fs=CreateObject("Scripting.FileSystemObject") |
| Set f=fs.CreateFolder(folderspec) |
| For Each fl in fc |
| s=s&fl.name |
| s=s&vbcrlf |
| Next |
| MsgBox s |
| End Sub |
| *SubFolders属性。 |
| 返回包含所有文件夹的一个Folders集合,这些文件夹包含在某个特定的文件夹汇总。包括设置了隐藏和系统文件属性的那些文件夹。 |
| 语句:object.SubFolders |
| object总是一个Folder对象。 |
| *DateLastModified |
| 返回最后一次修改指定文件或文件夹的日期和时间。只读。 |
| 语句:object.DateLastModified |
| object总是一个Folder对象。 |
| *Size属性 |
| 程序源代码 |
| '定义一个folderattt(fo)过程 |
| function folderatt(fo) |
| Dim att |
| On Error Resume Next |
| '将指定文件夹对象的文件数,子目录数和占用字节依次加入folderatt字符串 |
| folderatt=folderatt+fo.name+"目录:"+vbcrlf |
| folderatt=folderatt+"该目录下的文件数:"+cStr(fo.Files.Count)+vbcrlf |
| folderatt=folderatt+"该目录下的子目录数:"+cStr(fo.SubFolders.Count)+vbcrlf |
| folderatt=folderatt+"该目录占用字节:"+cStr(fo.Size/1024/1024)+"MB"+vbcrlf |
| folderatt=folderatt+"该目录最后修改时间:"+cStr(fo.DateLastModified)+vbcrlf |
| End function |
| Dim dispatt |
| dispatt="" |
| Set fs=CreateObject("Scripting.FileSystemObject") |
| Set folder=fs.GetSpecialFolder(0) |
| dispatt=dispatt+folderatt(folder) |
| Set folder=fs.GetSpecialFolder(1) |
| dispatt=dispatt+folderatt(folder) |
| Set folder=fs.GetSpecialFolder(2) |
| dispatt=dispatt+folderatt(folder) |
| Set fs=nothing |
| MsgBox dispatt |
| 六 获取系统和网络信息 |
| 源代码 |
| Set WshNetwork=WScript.CreateObject("WScript.Network") |
| '设置EnumNetworkDrives参数集。 |
| Set oDrives=WshNetwork.EnumNetworkDrives |
| '设置EnumPrinterConnection参数集 |
| Set oPrinters=WshNetwork.EnumPrinterConnections |
| '获取域名 |
| netinfo="域名:"+WshNetwork.UserDomain+chr(13) |
| '获取计算机名 |
| netinfo="计算机名:"+WshNetwork.ComputerName+chr(13) |
| '获取用户名 |
| netinfo="用户名:"+WshNetwork.UserName+chr(13) |
| WScript.Echo(netinfo) |
| netmap="" |
| For i=0 to oDrives.Count()-1 Step 2 |
| netmap=netmap+"驱动器"+oDrives.Item(i)+"="+oDrives.Item(i+1)+chr(13) |
| Next |
| if netmap<>""Then |
| WScript.Echo("网络映射驱动器:"+chr(13)+netmap) |
| End If |
| netprn="" |
| For i=0 to oPrinters.Count-1 step 2 |
| netprn=netprn+"端口: "+oPrinters.Item(i)+"="+oPrinters.Item(i+1)+chr(13) |
| Next |
| if netprn<>"" Then |
| WScript.Echo("网络打印机:"+chr(13)+netprn) |
| End IF |
| 七:参数拖放操作。 |
| 知识点:Set语句 |
| '设置objArgs为Arguments对象 |
| Set objArgs=WScript.Arguments |
| For i=0 to objArgs.Count-1 |
| WScript.Echo objArgs(i) |
| Next |
| |
| 八访问文本文件 |
| 知识点: |
| CreateTextFile方法 |
| OpenTextFile方法 |
| ReadLine方法 |
| WriteLine方法 |
| 程序源代码: |
| Dim fs |
| Dim file |
| Sub writefile |
| Set fs=CreateObject("Scripting.FileSystemObject") |
| Set file=fs.CreateTextFile("wshwrite.txt",True) |
| file.WriteLine("Windows Scripting Host实例") |
| file.WriteLine("写文件实例") |
| file.Close |
| Set fs=nothing |
| End Sub |
| Sub readFile |
| ForReading=1 |
| TristateFalse=0 |
| Set fs=CreateObject("Scripting.FileSystemObject") |
| Set file=fs.OpenTextFile("wshwrite.txt",ForReading,TristateFalse) |
| MsgBox file.ReadLine |
| file.Close |
| Set fs=nothing |
| End Sub |
| writefile |
| readfile |
| 九:显示环境变量 |
| 程序源代码: |
| Sub show_env(strText) |
| MsgBox strText,vbInformation,"WSH显示环境变量" |
| End Sub |
| Dim WSHShell |
| Set WSHShell=WScript.CreateObject("WScript.Shell") |
| intIndex=0 |
| strText="" |
| For Each strEnv In WshShell.Environment("PROCESS") |
| intIndex=intIndex+1 |
| strText=strText&vbcrlf&Right(" "&intIndex,4)&strEnv |
| Next |
| Call show_env(strText) |
| 十:建立快捷方式 |
| 知识点:ActiveXObject对象。 |
| *ActiveXObject对象 |
| 启用并为一个自动操作的对象返回参照。 |
| 语法: |
| var newObject=new ActiveXObject(class) |
| 参数class的名称组成为servername.typename. |
| servername:提供对象的程序名称。 |
| Typename:所要创建的对象的类型或类别。 |
| 程序源代码分析: |
| Set WshShell=WScript.CreateObject("WScript.Shell") |
| strDesktop=WshShell.SpecialFolders("Desktop") |
| Set oShellLink=WshShell.CreateShortCut(strDesktop&"\画笔.lnk") |
| oShellLink.TargetPath="mspaint.exe" |
| oShellLink.WindowStyle=1 |
| oShellLink.Hotkey="CTRL+SHIFT+P" |
| oShellLink.IconLocation="mspaint.exe,0" |
| oShellLink.Description="由WSH建立的画笔快捷方式" |
| oShellLink.WorkingDirectory=strDesktop |
| oShellLink.Save |
| Set oUrLink=WshShell.CreateShortcut(strDesktop&"\武汉理工大学.url") |
| oUrLink.TargetPath="http: |
| oUrLink.Save |
| 十一.模拟键盘输入. |
| Set WshShell=WScript.CreateObject("WScript.Shell") |
| WshShell.Run "calc" |
| WScript.Sleep 100 |
| WshShell.AppActivate "Calculator" |
| WScript.Sleep 100 |
| WshShell.SendKeys "1{+}" |
| WScript.Sleep 500 |
| WshShell.Sendkeys "2" |
| WScript.Sleep 500 |
| WshShell.Sendkeys "~" |
| WScript.Sleep 500 |
| WshShell.Sendkeys "*3" |
| WScript.Sleep 500 |
| WshShell.Sendkeys "~" |
| '将用户通过键盘输入的ENTER送至计算器窗口 |
| WScript.Sleep 2000 |
| WshShell.Sendkeys "%{f4}"COPY |