在紧张的C++Test研究当中,不得以还得抽时间,学习VBScript语言编程。为了万恶的QTP啊,在学习过程中,将一些文档精练化了,基本把必须要记住的东西都记载在案了,现在是2010年09月21日,虽然人都说VBS一天就能学会,但是我不是那种天才,可能需要2-3天,哈哈,所以文档还未更新完,但是肯定在国庆佳节前更新完毕,好了,闲话到这,具体如下:
—————————————————————————————
本文档适合有一定编程基础能力的人,至少已经知道变量、函数、循环等词汇含义的人。
打开记事本输入以下内容后保存关闭,重命名为test1.vbs,并双击:
msgbox "Hello World!"
打开记事本输入以下内容后保存关闭,重命名为test2.vbs,并双击:
Dim name
name=Inputbox("请输入你的名字:","名称")
Msgbox name, , "您的名字是"
以上就是两个小例子程序
001:行首加一个单引号表示此行内容为注释:
'注释
002:对变量、方法、函数、对象的引用不区分大小写
003: Dim 申请多个变量时使用逗号分隔;
申请变量不允许赋值;
申请之后赋值
004: Cbool函数将变量转换成布尔值;
Cbyte函数将变量转换成0到255之间的整数;
Ccur函数、Cdbl函数、Csng函数将变量转换为浮点数值,前者只精确到小数点后四位;
Cdate函数将变量转换为日期值;
Cstr函数将变量转换为字符串
005: Dimarray(n)定义数组,引用序号从0开始;
如果要改变数组,使用:Redim preservearray(个数,维数),preserve是保护数据的
006: 乘方:^ ;取模:Mod ;
007: 逻辑运算符:和操作->AND非操作->NOT 或操作->OR
008:可使用+或&来连接字符串,一般使用&
009: Is用来比较对象,同一类型为真
010: 条件控制语句:
----------------------------
If 条件 Then
执行语句
End if
011: 条件控制语句:
----------------------------
If 条件1 Then
执行语句1
ElseIf 条件2 Then
执行语句2
……
Else 执行语句3
End if
012: 条件控制语句:
----------------------------
Select Case 变量
Case 条件值 处理条件语句
Case 条件值 处理条件语句
……
Case Else 处理语句
End Select
013: 循环控制语句:循环次数固定,使用ExitFor来退出循环
----------------------------
For 计数器变量 = 开始计数值 to 最后计数值
执行循环体
Next
014:循环控制语句:对数组或对象集合中的每一个元素进行判断,使用ExitFor来退出循环
----------------------------
For each 循环计数变量 in 要查看的对象或数组
执行处理语句
Next
015:循环控制语句:条件满足时执行一段代码,使用ExitDo退出循环
----------------------------
Do while 条件
执行循环体
Loop
016:循环控制语句:条件不满足时执行一段代码,使用ExitDo退出循环
----------------------------
Do until 条件
执行循环体
Loop
017:循环控制语句:条件满足时一直执行循环
----------------------------
While 条件
执行循环体
Wend
018:过程:函数,给调用者返回值;调用时只有函数的参数列表加括号;只能出现在赋值语句的右边,或表达式中;函数如果直接使用,必须使用Call语句调用,并取消返回值
----------------------------
Function 函数名称(参数列表)
函数代码
函数名称 = 某值'用来返回值
End Function
019:过程:子程序,无返回值;定义时参数列表要加括号,调用时不加;
----------------------------
Function 函数名称(参数列表)
函数代码
End Function
020:WSH是用来解析Vbs的宿主,本身包含了几个常用对象:
1、 Scripting.FileSystemObject ->提供一整套文件系统操作函数
2、 Scripting.Dictionary ->用来返回存放键值对的字典对象
3、 Wscript.Shell ->提供一套读取系统信息的函数,如读写注册表、查找指定文件的路径、读取DOS环境变量,读取链接中的设置
4、 Wscript.NetWork ->提供网络连接和远程打印机管理的函数
(其中,所有Scripting对象都存放在SCRRUN.DLL文件中,所有的Wscript对象都存放在WSHOM.ocx文件中。)
例:打开一个记事本(Objshell是变量名,可以随意修改。notepad是记事本程序的文件名,也可以改成calc等)
Set ObjShell = CreateObject("Wscript.Shell")
ObjShell.Run "notepad"
1、 Set是用来将一对象引用赋给变量的指令。
2、正确引用的对象,本身内置有函数和变量,其引用方法就是在变量后加“.”,后紧跟其实现功能的函数
3、Objshell.run意思是调用Wscript.Shell中的运行外部程序的函数——run
4、像notepad这样所有的可执行的文件名都可以,但如果要执行的可执行文件存放位置不是常用路径,需要提供合法的路径名
5、run在运行解析时,遇到空格会停止,解决方法是使用双引号,
例:Objshell.Run """C:Program FilesTencentQQ2010QQ.exe"""'注:三个引号
然后尝试一次性打开两个程序,例:
Set ObjShell = CreateObject("Wscript.Shell")
ObjShell.Run "notepad"
ObjShell.Run "calc"
然后尝试打开一个成功后关闭,再打开第二个,例:
Set ObjShell = CreateObject("Wscript.Shell")
ObjShell.Run "notepad" ,,true
ObjShell.Run "calc"
总结:run函数有三参数,
第一个参数是要执行的程序路径,
第二个参数是窗口的形式,0是后台运行,1表示正常运行,2表示激活程序并且显示为最小化,3表示激活程序并且显示为最大化,共10个
第三个参数表示这个脚本等待还是继续执行,如果有true,脚本会等调用的程序退出后再向后执行
run作为函数,前面还有一个接受返回值的变量,一般来说如果返回为0,表示成功执行,如果不为0,则这个返回值就是错误代码,可以通过这个代码找出相应的错误
021: 在脚本的开头添加:On Error Resume Next;可以防止vbs脚本在发生错误时停止运行,会跳过发生错误的语句,紧接着执行跟在它后面的语句
022:vbscript提供了一个对象err对象,有两个方法:clear,raise,五个属性:description,helpcontext,helpfile,number,source;err对象不用引用实例,可以直接使用
例:
On Error Resume Next
a=11
b=0
c=a/b
If err.number<>0 then
Wscript.echo err.number & err.description& err.source
End if
023:读注册表,把关键词的完整路径传递给wshshell对象的regread方法,例:
Set ws = wscript.createobject("wscript.shell")
v =ws.regread("HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunnwiz")
wscript.echo v
写注册表,使用wshshell对象的regwrite方法,
修改注册表,例:
path ="HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun"
set ws = wscript.createobject("wscript.shell")
t = ws.regwrite(path & "jj","hello")
这样就把这个路径的jj键值改成了hello,不过要注意,这个键值一定要预先存在。
创建新的关键词,例:
path ="HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunsssa2000love"
set ws = wscript.createobject("wscript.shell")
val = ws.regwrite(path,"nenboy")
val = ws.regread(path)
wscript.echo val
删除关键字和值,将完整路径传递给regdelete,例:
val = ws.regdel(path)
如果要删除关键词的值,一定要在路径最后加上“”,如果不加,就会删除整个关键词。
024:Vbs对桌面和文件系统进行访问的顶级对象是FileSystemObject(FSO),FSO包含的常见对象有:
Drive对象:包含存储设备的信息,包括硬盘、光驱、ram盘、网络驱动器
Drives集合:提供一个物理和逻辑驱动器的列表
File对象:检查和处理文件
Files集合:提供一个文件夹中的文件列表
Folder对象:检查和处理文件夹
Folders集合:提供文件夹中子文件夹的列表
Textstream对象:读写文本文件
FSO的常见方法有:
BulidPath:把文件路径信息添加到现有的文件路径上
CopyFile:复制文件
CopyFolder:复制文件夹
CreateFolder:创建文件夹
CreateTextFile:创建文本并返回一个TextStream对象
DeleteFile:删除文件
DeleteFolder:删除文件夹及其中所有内容
DriveExits:确定驱动器是否存在
FileExits:确定一个文件是否存在
FolderExists:确定某文件夹是否存在
GetAbsolutePathName:返回一个文件夹或文件的绝对路径
GetBaseName:返回一个文件或文件夹的基本路径
GetDrive:返回一个dreve对象
GetDriveName:返回一个驱动器的名字
GetExtensionName:返回扩展名
GetFile:返回一个file对象
GetFileName:返回文件中文件名称
GetFolder:返回一个文件夹对象
GetParentFolderName:返回一个文件夹的父文件夹
GetSpecialFolder:返回指向一个特殊文件夹的对象指针
GetTempName:返回一个可以被createtextfile使用的随机产生的文件或文件夹的名称
MoveFile:移动文件
MoveFolder:移动文件夹
OpenTextFile:打开一个存在的文件并返回一个TextStream对象
025:使用FSO,由于fso不是wsh的一部分,所以我们需要建立他的模型,例:
Set fs = wscript.createobject("scripting.filesystemobject")
释放:set fs = nothing
026: 使用文件夹:
创建,使用前先检查是否存在,例:
Dim fs,s '定义fs、s两个变量
Set fs = wscript.crertaobject("scripting.filesystemobject")'fs为FSO实例
if(fs.folderexists("c:temp")) then'判断c:temp文件夹是否存在
s = "is available"
else
s = "not exist"
Set folder = fs.createfolder("c:temp") '不存在则建立
end if
删除:
Set fs = wscript.caeateobject("scripting.filesystemobject")
fs.deletefolder("c:windows")
拷贝:
Set fs = wscript.createobject("scripting.filesystemobjext")
fs.copyfolder "c:data" "d:data"
注意:如果c:data和d:data都存在,脚本会出错,复制也就会停止,如果要强制覆盖,使用:
fs.copyfolder "c:data" "d:data",true
移动:
Set fs = wscript.createobject("scripting.filesystemobjext")
fs.movefolder "c:data" "d:data"
使用通配符,来方便操作,例:
fs.movefolder "c:datate*" , "d:working"
如果不想windows自动创建没有的目的目录,可以这么写,例:
fs.movefolder "c:datate*" , "d:working"
这样的话,d:working如果不存在,是不会被新建的
使用folder对象操作,例:
Set fs = wscript.createobject("scripting.filesystemobject")
Set f = fs.getfolder("c:data")
f.delete'删除文件夹c:data,如果有子目录,也会被删除
f.copy "d:working",true '拷贝到d:working
f.move "d:temp" '移动到d:temp
特殊文件夹,一般指windowssystem32,临时文件夹,windows文件夹等,例:
Set fs = wscript.createobject("scripting.filesystemobject")
Set wshshell = wscript.createobject("wscript.shell")
osdir = wshshell.expandenvironmentstrings("%systemroot%")
Set f = fs.getfolder(osdir)
wscript.echo f
当然也是简单的方法,那就是使用getspecialfolder(),这个方法使用3种值:
0 :表示windows文件夹,相关常量是windowsfolder
1 :系统文件夹,相关常量是systemfolder
2 :临时目录,相关常量temporaryfolder
例:
Set fs = wscript.createobject("scripting.filesystemobject")
Set wfolder = fs.getspecialfolder(0) '返回windows目录
Set wfolder = fs.getspecialfolder(1) '返回system32
Set wfolder = fs.getspecialfolder(2) '返回临时目录
027: SendKeys(模拟键盘操作),格式:
Object.SendKeys string'WshShell对象.SendKeys.要发送的按键指令字符串,需要放在英文双引号中
1. 基本键
发送字母: WshShell.SendKeys "x"
发送字符串: WshShell.SendKeys "abc"
2. 特殊功能键
Shift: +
Ctrl : ^
Alt : %
发送Ctrl + e : WshShell.SendKeys "^e"
发送Ctrl + e & c :WshShell.SendKeys "^(ec)"'按住Ctrl的同时按e和c
发送Ctrl + e + c :WshShell.SendKeys "^ec"'按抓Ctrl的同时按下e,松开,再按c
发送 + :WshShell.SendKeys "{+}"
发送回车键 :WshShell.SendKeys "{ENTER}"
发送向下方向键 :WshShell.SendKeys "{DOWN}"
发送10个字母“x”:WshShell.SendKeys "{x 10}"
例1,关机:
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}uu"'Ctrl+Esc打开开始菜单,按U键打开关机菜单,按U键关机
例2,在记事本中输入一行文字:
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "notepad"
WScript.Sleep 2000'脚本暂停2秒,防止还未打开notepad
WshShell.AppActivate "无标题 - 记事本"'寻找可执行程序的标题框
WshShell.SendKeys "Hello,World!"
小练习:用VBS脚本,打开记事本,输入:“Hello,World!“换行”Hopeyou have a niceday!”,然后关闭并保存到成Test.txt
练习答案:
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "notepad"
WScript.Sleep 2000
WshShell.AppActivate "Untitled - Notepad"
WshShell.SendKeys "Hello,World!{ENTER}Hope you have a niceday!%{F4}{ENTER}Test.txt{ENTER}"
例3,制作一个能定时存盘的记事本:
'定义变量和对象:
Dim WshShell,AutoSaveTime,TXTFileName
AutoSaveTime = 300000
Set WshShell = WScript.CreateObject("WScript.Shell")
'打开并激活记事本:
WshShell.Run "notepad"'如果不是Windows本身提供的程序,则需完整路径,例:"D:Progra~1TencentQQ.exe"
WScript.Sleep 200
WshShell.AppActivate "Untitled - Notepad"
'用输入的文件名存盘:
WshShell.SendKeys "^s"
WScript.Slepp 300
WshShell.SendKeys "TXTFileName"
WScript.Slepp 300
WshShell.SendKeys "%s"
WScript.Sleep AutoSaveTime
'自动定时存盘
While WshShell.AppActivate (TXTFileName) = True'循环判断条件:是否有这个记事本窗口
WshShell.SendKeys "^s" '定时发送Ctrl + s
WScript.Sleep AutoSaveTime
Wend
WScript.Quit
将上面VBS脚本保存为:记事本.vbs,以后打开记事本都通过这个脚本打开,就可以有自动存盘的功能了。
例4,打开任务管理器:
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "^+{ESC}"'Ctrl+Shift+Esc打开任务管理器
例5,自动登录百度博客:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "iexplore"
WScript.Sleep 2000
WshShell.AppActivate "百度一下,你就知道 - MicrosoftInternet Explorer"'双引号内的内容为实际游览器的标题
WshShell.SendKeys "%d"
WshShell.SendKeys "http:'passport.baidu.com/?login"
WshShell.SendKeys "{enter}"
WScript.Sleep 2000
'WshShell.SendKeys "mvp_xuan"'输入实际百度账号,因为我的IE设置了自动保存账号,所以这两行我注释了
'WshShell.SendKeys "{tab}"
WshShell.SendKeys "你的博客密码"'输入实际百度账号的密码
WshShell.SendKeys "{tab}"
WshShell.SendKeys " "'选中记住账号和密码,如果不需要,注释或删除此行
WshShell.SendKeys "{enter}"
WshShell.SendKeys "%d"
WshShell.SendKeys "http:'hi.baidu.com/mvp_xuan/home"'实际博客的首页
WshShell.SendKeys "{enter}"
028: VBS中SendKey键盘对应码表:
Shift +
Ctrl ^
Alt %
BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER}or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
029: FSO中文件的基本操作:
文件属性:在windows中,文件的属性一般用数字表示:0代表普通文件未设置任何属性;1代表只读文件;2代表隐藏文件;4代表系统文件;16代表文件夹或目录;32代表存档文件;1024代表链接或快捷方式;例:
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("d:index.txt")
MsgBox f.Attributes'Attributes函数的作用是显示文件属性,但是msgbox显示的结果往往是有管属性代表数字的和
创建文件:object.createtextfile方法,注意创建前一般需要检查文件是否存在,例:
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists("c:Test.txt") then'如需要强制覆盖已存在文件,则在文件名后加true参数
MsgBox "文件已存在"
else
Set f = fso.CreateTextFile("c:Test.txt")
End If
复制、移动、删除文件:使用copyfile、movefile、deletefile,等方法,例:
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
fso.copyfile "c:Test.txt","d:1Test.txt",true'如上文所述,true代表强制覆盖
fso.movefile "c:Test.txt","d:" '移动文件
fso.deletefile "c:Test.txt" '删除文件
文件的读写:
1. 打开文件,使用opentextfile方法,例:
Set ts = fso.OpenTextFile("c:Test.txt",1,true)'第二个参数1为只读、2为写入、8为追加
2.读取文件,read(x)读x个字符;readline读一行;readall全部读取,例:
Set ffile = fso.OpenTextFile("c:Test.txt",1,true)
Value = ffile.read(20)
Line = ffile.readline
Contents = ffile.readall
3. 常见的指针变量
AtEndOfStream:当处于文件结尾时,这个属性返回true,一般用循环检测是否到达文件末尾,例:
Do Whileffile.AtEndOfStream<>true
ffile.read(10)
Loop
AtEndOfLine:如果已经到了行末尾,这个属性返回true
Column(当前字符位置的列号) &Line(文件当前行号):在打开一个文件后,行和列指针都被设置为1
4. 在文件中跳行:skip(x) 跳过x个字符 ;skipline跳过一行
5. 在文件中写入字符:可以用“2 -写入”和“8 -追加”的方式来写入,其方法:Write(x)写入x字符串 ;WriteLine(x) 写入x代表的一行;WriteBlankLines(n) 写入n个空行。
最后一定要使用Close方法关闭文件,读文件后一定要关闭,才能以写的方式打开。
030:利用COM对象使用windows提供的系统对话框
1. SAFRCFileDlg.FileSave对象,属性有:
FileName - 指定默认文件名
FileType - 指定文件扩展名
OpenFileSaveDlg - 显示文件保存框体方法
2. SAFRCFileDlg.FileOpen对象:
FileName -默认文件名属性
OpenFileOpenDlg - 显示打开文件框体方法
3. UserAccounts.CommonDialog对象:
Filter - 扩展名属性("vbs File|*.vbs|ALLFiles*.*");
FilterIndex — 指定
InitialDir — 指定默认的文件夹
FileName — 指定的文件名
Flags — 对话框的类型
ShowOpen方法,例:
保存文件:
Set objDialog = CreateObject("SAFRCFileDlg.FileSave")'只提供一个用户选择的界面,本身没有保存文件的功能
Set objFSO = CreateObject("Scripting.FileSystemObject")'用来保存文件
objDialog.FileName = "test" '指定默认的文件类型
objDialog.FileType = ".txt"
intReturn = objDialog.OpenFileSaveDlg'在调用此方法时,最好是返回值保存到一变量中,用它可以判断用户按下的是确定还是取消
If intReturn Then
objFSO.CreateTextFile(objDialog.FileName &objdialog.filetype)
Else
WScript.Quit
End If
打开文件:
Set objFile = CreateObject("SAFRCFileDlg.FileOpen")
intRet = objFile.OpenFileOpenDlg
If intret then
MsgBox "文件打开成功!文件名为:" &objFile.FileName
Else
WScript.Quit
End If
比较复杂的打开文件对话框:
Set objDialog = CreateObject("UserAccounts.CommonDialog")'这句好像有点问题,正在研究
objDialog.Filter = "vbs File|*.vbs"
objDialog.InitialDir = "c:"
tfile = objDialog.ShowOpen
if tfile then
strLoadFile = objDialog.FileName
MsgBox strLoadFile
Else
WScript.Quit
End If
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
——————————————————————————————
Last updated:2010.09.25 06:12 PM