标题: [原创] VBS基础(4)WSH编程实例 [打印本页]
作者: novaa 时间: 2007-12-9 10:52 标题: VBS基础(4)WSH编程实例
前面的基础知识学完了,实践喽!转载请注明 bbs.bathome.net-
- 一:你好!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://www.whut.edu.cn/"
- 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}"
复制代码
作者: tornodo 时间: 2008-3-15 21:15
怎么没人顶呢?
好帖啊。
作者: kingerpk 时间: 2009-2-11 19:23
太~~~~~好~~~了~~~~
作者: kingerpk 时间: 2009-2-27 08:04
终于盼来了啊!!!!!!!!!
作者: bakdfkuk 时间: 2009-2-27 08:44 标题: 学到不少!
精彩,学到不少,我搜索了一下这个系统,就没有找到WSH基础(2),不知道有没有,有的话希望各位能告诉我一个相关的网址,谢谢!
作者: revc 时间: 2010-1-25 17:23
WSH基础(2)地址:
http://www.bathome.net/thread-323-1-2.html
作者: echoairair 时间: 2010-2-5 21:48
谢谢分享…
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |