很好的VBS教程 二.docx
《很好的VBS教程 二.docx》由会员分享,可在线阅读,更多相关《很好的VBS教程 二.docx(15页珍藏版)》请在冰豆网上搜索。
很好的VBS教程二
很好的VBS教程二2008-06-2502:
53
例五:
关机菜单立刻显身
打开记事本,输入以下命令,并将其保存为1.vbs:
setWshShell=CreateObject("WScript.Shell")
WshShell.SendKeys"^{ESC}u"
双击运行它,你会发现关机菜单立刻出现了。
将“WshShell.SendKeys"^{ESC}u"”改为“WshShell.SendKeys"^+{ESC}"”,运行一下看看是否打开了任务管理器
妙用SendKeys自动上网并登陆网志
将下面的脚本复制到一个文本文件中,并将其文件名命名为:
自动登陆.vbs,然后将拨号软件及本脚本一起复制到程序——启动项中,就可以实现自动拨号上网,并登陆到网志上。
代码如下:
Setwshshell=CreateObject("wscript.shell")
wshshell.AppActivate"连接MAE-301U拨号连接"
wscript.Sleep20000
wshshell.SendKeys"{enter}"
wshshell.Run"iexplore"
WScript.Sleep2000
wshshell.AppActivate"hao123网址之家---实用网址,搜索大全,尽在-MicrosoftInternetExplorer"'引号中的内容修改为你的浏览器打开后标题栏中的内容
wshshell.SendKeys"%d"
wshshell.SendKeys"
wshshell.SendKeys"{enter}"
WScript.Sleep2000
wshshell.SendKeys"此处修改为网志帐号"
wshshell.SendKeys"{tab}"
wshshell.SendKeys"此处修改为网志密码"
wshshell.SendKeys"{enter}"
'wshshell.SendKeys"%d"
◎Vbs脚本编程简明教程之十—Vbs脚本编程常用的编辑器
1、VBSEDit汉化版
2、primalscript汉化版,可以对30多种脚本进行编辑
◎Vbs脚本编程简明教程之十一—FSO中文件的基本操作
一、文件属性:
在windows中,文件的属性一般用数字来表示:
0代表normal,即普通文件未设置任何属性。
1代表只读文件。
2代表隐藏文件。
4代表系统文件。
16代表文件夹或目录。
32代表存档文件。
1024代表链接或快捷方式。
例如:
setfs=wscript.createobject(“scripting.filesystemobject”)
setf=fs.getfile(“d:
\index.txt”)
msgboxf.Attributes‘attributes函数的作用是显示文件属性
需要说明的是:
msgbox显示的结果往往不是上面说明的数字,而是有关属性代表数字的和。
[作者:
临汾市外事旅游局薛靖澜,转载请注明出处]
二、创建文件:
object.createtextfile方法,注意创建前一般需要检查文件是否存在。
例如:
setfso=wscript.createobject(“scripting.filesystemobject”)
iffso.fileexists(“c:
\kk.txt”)then
msgbox“文件已存在”
else
setf=fso.createtextfile(“c:
\kk.txt”)
endif
如需要强制覆盖已存在的文件,则在文件名后加true参数。
三、复制、移动、删除文件:
使用copyfile方法、movefile方法、deletefile方法。
例如:
setfso=wscript.createobject(“scripting.filesystemobject”)
fso.copyfile“c:
\kk.txt”,”d:
\1\kk.txt”,true//如上文说述,true代表强制覆盖
fso.movefile“c:
\kk.txt”,“d:
\”//移动文件
fso.deletefile“c:
\kk.txt”//删除文件
四、文件的读写:
1、打开文件:
使用opentextfile方法
如:
setts=fso.opentextfile(“c:
\kk.txt”,1,true)
说明:
第二个参数为访问模式1为只读、2写入、8为追加
第三个参数指定如文件不存在则创建。
2、读取文件:
read(x)读x个字符;readline读一行;readall全部读取
如:
setffile=fso.opentextfile(“c:
\kk.txt”,1,true)
value=ffile.read(20)
line=ffile.readline
contents=ffile.readall
3、常见的指针变量:
atendofstream属性:
当处于文件结尾的时候这个属性返回true。
一般用循环检测是否到达文件末尾。
例如:
dowhileffile.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方法关闭文件。
[作者:
临汾市外事旅游局薛靖澜,转载请注明出处]读文件后一定要关闭,才能以写的方式打开。
◎Vbs脚本编程简明教程之十二—使用系统对话框
在VBS脚本设计中,如果能使用windows提供的系统对话框,可以简化脚本的使用难度,使脚本人性化许多,很少有人使用,但VBS并非不能实现这样的功能,方法当然还是利用COM对象。
1、SAFRCFileDlg.FileSave对象:
属性有:
FileName—指定默认文件名;FileType—指定文件扩展名;OpenFileSaveDlg—显示文件保存框体方法。
2、SAFRCFileDlg.FileOpen对象:
FileName—默认文件名属性;OpenFileOpenDlg—显示打开文件框体方法。
3、UserAccounts.CommonDialog对象:
Filter—扩展名属性("vbsFile|*.vbs|AllFiles|*.*");
FilterIndex—指定
InitialDir—指定默认的文件夹
FileName—指定的文件名
Flags—对话框的类型
Showopen方法:
很简单,ok,让我们来举两个简单的例子:
例一:
保存文件
SetobjDialog=CreateObject("SAFRCFileDlg.FileSave")
SetobjFSO=CreateObject("Scripting.FileSystemObject")
objDialog.FileName="test"
objDialog.FileType=".txt"
intReturn=objDialog.OpenFileSaveDlg
IfintReturnThen
objFSO.CreateTextFile(objDialog.FileName&objdialog.filetype)
Else
Wscript.Quit
EndIf
注意:
1、SAFRCFileDlg.FileSave对象仅仅是提供了一个方便用户选择的界面,本身并没有保存文件的功能,保存文件还需要使用FSO对象来完成。
2、用FileType属性来指定默认的文件类型。
3、在调用OpenFileSaveDlg方法时,最好把返回值保存到一变量中,用它可以判断用户按下的是确定还是取消。
例二:
.打开文件
setobjFile=CreateObject("SAFRCFileDlg.FileOpen")
intRet=objFile.OpenFileOpenDlg
ifintretthen
msgbox“文件打开成功!
文件名为:
”&objFile.filename
else
wscript.quit
endif
例三:
比较复杂的打开文件对话框
SetobjDialog=CreateObject("UserAccounts.CommonDialog")
objDialog.Filter="vbsFile|*.vbs"
objDialog.InitialDir="c:
"
tfile=objDialog.ShowOpen
iftfilethen
strLoadFile=objDialog.FileName
msgboxstrLoadFile
else
wscript.quit
endif
说明:
在脚本中加入objDialog.Flags=&H020看看会出现什么结果。
◎Vbs脚本编程简明教程之十三—WMI基础
WMI即Windows管理规范,是用户管理本地和远程计算机的一种模型。
通过它可以访问、配置、管理和监视几乎所有的Windows资源。
WMI的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。
它对应的是Windows里的WMI服务(winmgmt)。
一、WMI的起源
几年前,几家资深的计算机公司由于系统管理领域缺少标准,委托DMTF启动了CIM(通用信息模型)项目,理想的CIM是一种不受限制于任何特定实现环境的管理工具。
WMI是CIM的微软实现,它有很多类是从CIM中派生出来的。
二、WMI的命名空间
那么命名空间是做什么作用的呢?
我简单这样说,在同一段代码中,如果有两个变量或函数的名字完全相同,就会出现冲突。
命名空间就是为解决变量、函数的命名冲突而服务的。
解决的办法就是将你的变量定义在一个不同名字的命名空间中。
就好像财政局有个张三,公安局也有个张三,但我们清楚,就是因为他们分属不同的单位。
有些地方可能不太准确,但大致意思就是这样了。
WMI的命名空间创建了一个层次结构,有点类似于我们的目录文件结构。
1、root-作为所有其他名字的占位符;
2、root\default-与注册表操作有关的类;
3、root\security-与系统安全有关的类;
4、root\cimv2-从CIM派生的类,代表我们最常用的工作环境。
三、WMI的对象路径
WMI的对象路径用来在CIM库中定位类和它的事例,对象路径用两个反斜杠\\开头,第一个元素是目标计算机的名字,第二个元素是相应的WMI命名空间,第三个元素是相应的类名,并用:
将它与命名空间分隔开来。
例如:
\\..\root\cimv2:
win32_service
其中那个.代表是本地系统。
四、WMI的查询语言——WQL仅仅是ANSISQL的一个子集,只能用于数据的提取。
数据、事件查询的基本语法为:
Selectpro1,pro2,pro3frommyclass(myclassevent)
例如:
Selectname,pathfromWin32_share说明:
列出所有共享的名称和路径
也可以使用通配符*,例如:
Select*fromWin32_share
关键字Where用于限定查询的范围。
例如:
Select*fromWin32_sharewherename=”Admin”
五、WMI脚本中使用的三个步骤
步骤1:
连接到WMI服务
在任何WMI脚本中,第一个步骤都是建立一个到目标计算机上的Windows管理服务的连接。
方法是调用[作者:
临汾市外事旅游局薛靖澜,转载请注明出处]VBScript的Getobject函数并将WMI脚本库的名字对象的名称(即“winmgmts:
”,后跟目标计算机的名称)传递到Getobject,并返回一个对象的引用,此时,您就可以调用其提供的方法如:
InstancesOf,正如方法名所示,InstancesOf返回由资源的类名标识的托管资源的所有实例。
步骤2:
检索WMI托管资源的实例
一般采用WQL来实现。
步骤3:
显示WMI托管资源的属性
最后一个步骤是枚举检索得到集合的内容。
一般采用
Foreachenuminmyclass
…
Next结构来实现。
六、WMI测试器(wbemtest.exe)验证脚本执行结果
现在,您对可用于浏览和查看CIM的工具已经有了一些认识,让我们使用WMI测试器(wbemtest.exe)来检查Win32_Process类定义,以便从在您的本地计算机上运行的进程检索一些属性。
1.打开一个命令提示,键入C:
\>wbemtest.exe,按下Enter来开始WMI测试器工具。
请注意,大部分按钮在主WMI测试器窗口上是被禁用的,这说明此时您没有连接到WMI。
2.单击“连接”按钮连接到本地或远程计算机上的WMI服务。
显示“连接”对话框,它提供一个标记为名称空间的文本输入区域,该区域默认值为root\default。
将名称空间区域的值更改为root\cimv2,单击“连接”对话框的连接按钮返回到主WMI测试器窗口。
3.主窗口中左上角的命名空间标识符应该显示为root\cimv2。
请注意,所有的按钮现在都已启用,这说明在当前凭据环境下,您已经成功连接到本地主机上的WMI。
单击枚举类别打开“超类信息”对话框。
4.在“超类信息”对话框中,不要填写输入超类别名称区域,单击递归选项,单击确定以枚举root\cimv2名称空间中定义的所有CIM类。
请注意,列于“查询结果”对话框顶部的类是以两个下划线为开头的。
这些是系统类。
系统类是预定义的CIM类,支持内部WMI配置与操作,例如提供程序注册、命名空间安全性及事件通知等。
现在,忽略系统类,向下滚动“查询结果”对话框直至看到以CIM_开头的类。
名称以CIM_开头的类是由DMTF维护的核心与公共基类。
继续向下滚动直至到达以Win32_开头的类。
名称以Win32_开头的类是Microsoft扩展类,表示Windows特定的托管资源。
如果这是您第一次检查root\cimv2命名空间,您可能希望熟悉root\cimv2命名空间中的类的完整集合,尤其是有Win32_前缀的类。
5.向下滚动“查询结果”对话框直至到达Win32_Process类,双击该类名打开Win32_Process对话框的对象编辑器。
6.“对象编辑器”对话框显示被选定类的定义和实现的详细信息(属性和方法)。
选择HideSystemProperties复选框隐藏系统属性。
[作者:
临汾市外事旅游局薛靖澜,转载请注明出处]剩余的Win32_Process属性表示您可以从在本地或远程计算机上运行的进程检索的信息。
运行如下代码:
strComputer="."
SetwbemServices=Getobject("winmgmts:
"&strComputer)
SetwbemObjectSet=wbemServices.InstancesOf("Win32_Process")
ForEachwbemObjectInwbemObjectSet
WScript.Echo"Name:
"&wbemObject.Name&vbCrLf&_
"Handle:
"&wbemObject.Handle&vbCrLf&_
"ProcessID:
"&wbemObject.ProcessID
Next
7.在运行脚本之后,您可以用WIMI测试器验证脚本的结果。
在Win32_Process对话框的对象编辑器中,单击Instances。
产生的查询结果对话框列出在计算机上运行的进程的实例。
双击一个指定的进程实例,查看该实例的详细信息
阻止客人运行你不想运行的程序
很多人都有这样的经验,刚刚装好的系统,让人运行了一些你不想他运行的程序,比如说QQ,又是聊天,又是下载表情,不过一会,流氓插件、病毒、木马已经盘踞了你的计算机,常常是忍痛将这个程序卸载,可是不知情的人很自觉的下载安装,使整个系统无法正常运行。
其实用vbs和wmi结合起来,使你的计算机上有相应的程序安装,别人又无法运行起来太容易了,现在给出代码:
OnErrorResumeNext'忽略所有的错误
Dimbag,pipe,honker,good
Do
good="."'定义为本地计算机
setbag=getobject("winmgmts:
"&good&"\root\cimv2")'l连接到cimv2命名空间
setpipe=bag.execquery("select*fromwin32_processwherename='qq.exe'orname='qqgame.exe'orname='winmine.exe'")'看,这是我的计算机上不允许运行的程序,qq、qqgame、winmine(扫雷)如果你还有其他的程序不允许运行,很简单,在其中添加orname='你不允许运行的程序名'
foreachiinpipe
i.terminate()
msgbox"发现盗版系统,现已进行功能限制!
[作者:
临汾市外事旅游局薛靖澜,转载请注明出处]"&vbcrlf&"请使用正版软件!
",,"微软提示"'此行其实可有可无,有这行只是为了免去怀疑
next
wscript.sleep60000'每1分钟检测一次
loop
那么如果我自己想运行这些程序该怎么办呢?
[作者:
临汾市外事旅游局薛靖澜,转载请注明出处]很简单,Ctrl+Alt+Del三个键齐按,打开windows任务管理器,在进程中结束Wscript.exe和wmiprvse.exe进程的运行就可以了
◎Vbs脚本编程简明教程之十四—使用dictionary对象
VBS中存在一个特殊的对象-dictionnary,是一个集合对象。
一般情况霞,我把这个特殊的集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务,无须担心数据是在哪些行列,而是使用唯一的键进行访问或者是一个只能运行在内存中的数据库,并只有两个字段分别是:
key和item,在使用中,字段key是索引字段。
setsdict=CreateObject("Scripting.Dictionary")
sdict.add"a","apple"
sdict.add"b","banana"
sdict.add"c","copy"
foreachkeyinsdict.keys
msgbox"键名"&key&"是"&"="&sdict(key)
next
sdict.removeall
这个脚本很简单,就是定义了一个dictionary对象的实例sdict,并加入了三条数据,然后对每一条数据进行了枚举,最后,将对象的实例清空。
Dictionary对象的成员概要
属性和说明
CompareMode设定或返回键的字符串比较模式
Count只读。
返回Dictionary里的键/条目对的数量
Item(key)设定或返回指定的键的条目值
Key(key)设定键值
方法和说明
Add(key,item)增加键/条目对到Dictionary
Exists(key)如果指定的键存在,返回True,否则返回False
Items()返回一个包含Dictionary对象中所有条目的数组
Keys()返回一个包含Dictionary对象中所有键的数组
Remove(key)删除一个指定的键/条目对
RemoveAll()删除全部键/条目对
◎Vbs脚本编程简明教程之十五—VBS内置函数
Abs函数:
返回数的绝对值。
Array函数:
返回含有数组的变体。
Asc函数:
返回字符串首字母的ANSI字符码。
Atn函数:
返回数值的反正切。
CBool函数:
返回已被转换为Boolean子类型的变体的表达式。
CByte函数:
返回已被转换为字节子类型的变体的表达式。
CCur函数:
返回已被转换为货币子类型的变体的表达式。
CDate函数:
返回已被转换为日期子类型的变体的表达式。
CDbl函数:
返回已被转换为双精度子类型的变体的表达式。
Chr函数:
返回与指定的ANSI字符码相关的字符。
CInt函数:
返回已被转换为整形子类型的变体的表达式。
CLng函数;返回已被转换为Long子类型的变体的表达式。
Cos函数:
返回角度的余弦。
CreateObject函数:
创建并返回对“自动”对象的引用。
CSng函数:
返回已被转换为单精度子类型的变体的表达式。
CStr函数:
返回已被转换为字符串子类型的变体的表达式。
Date函数:
返回当前系统日期。
DateAdd函数:
返回的日期已经加上了指定的时间间隔。
DateDiff函数:
返回两个日期之间的间隔。
DatePart函数:
返回给定日期的指定部分。
DateSerial函数:
返回指定年月日的日期子类型的变体。
DateValue函数:
返回日期子类型的变体。
Day函数:
返回日期,取值范围为1至31。
Eval函数:
计算表达式并返回结果。
Exp函数:
返回e(自然对数的底)的多少次方。
Filter函数:
根据指定的筛选条件,返回含有字符串数组子集的、下限为0的数组。
Fix函数:
返回数的整数部分。
FormatCurrency函数:
返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的