本帖最后由 淡然出尘 于 2013-2-25 09:38 编辑
一、VBS 与 VB 的故事
VBS(Microsoft Visual Basic Script Edition)是基于 Visual Basic 的一种脚本语言,它们在语法上是一致的。如:
[Visual Basic] 纯文本查看 复制代码 'VBS与VB通用 ***信息框***
Msgbox"123",,"ssss"
[Visual Basic] 纯文本查看 复制代码 'VBS脚本 ***人机对话***
Pass="123" '口令是123
do
A=Inputbox("请输入A")
If A=Pass Then
Msgbox"呵呵"
Wsh.Quit '这是VBS脚本的“退出”,VB语言改为“End”即可
End if
Loop
上面的演示效果是一样的。但是它们还是有很多的差异。
①VBS面对过程,VB面对对象;VBS只能调用组件,不能操作对象。如:
[Visual Basic] 纯文本查看 复制代码 'VBS脚本 ***调用组件之例***
Set JC=CreateObject("WScript.Shell") '创建一个可执行的对象
JC.run "Notepad.exe" '"路径"亦可
②变量类型设置不同。VB语言中在定义变量时,必须要设置变量的类型;在VBS脚本中定义变量时,则不须要,它会默认为字符串型。如:
[Visual Basic] 纯文本查看 复制代码 'VB语言 ***两数相加***
Dim a,b AS Integer
a=InputBox("请输入A")
b=InputBox("请输入B")
Msgbox a+b
[Visual Basic] 纯文本查看 复制代码 'VBS脚本 ***两数相加***
Dim a,b '变量类型默认为字符串型
a=Cint(InputBox("请输入A")) 'Cint将变量转为数字型
b=Cint(InputBox("请输入B"))
Msgbox a+b
③VB语言中每个事件就是一个过程或者子程序;VBS脚本除非在操作网页的按钮时才会触发事件。
二、Msgbox 的秘密
Msgbox"内容",""按钮形式"+"图表形式"","标题" '结构
若内容包含多行,则可在各行之间用回车符 (Chr(13))、换行符 (Chr(10)) 或回车换行符的组合 (Chr(13) & Chr(10)) 分隔各行。
Msgbox "内容1" & Chr(10) & "内容2",""按钮形式"+"图表形式"","标题"
Msgbox 特殊值对照表
常数 值 描述
vbOKOnly 0 只显示“确定”按钮
vbOKCancel 1 显示“确定”和“取消”按钮
vbYesNoCancel 3 显示“是”、“否”和“取消”按钮
vbYesNo 4 显示“是”和“否”按钮
vbRetryCancel 5 显示“重试”和“取消”按钮
vbCritical 16 显示“临界消息”图标
vbQuestion 32 显示“警告消息”图标
vbInformation 64 显示“信息消息”图标
vbDefaultButton1 0 第一个按钮为默认按钮
vbDefaultButton2 256 第二个按钮为默认按钮
vbDefaultButton3 512 第三个按钮为默认按钮
vbDefaultButton4 768 第四个按钮为默认按钮
'Msgbox 返回值
vbOK 1 确定
vbCancel 2 取消
vbAbort 3 放弃
vbRetry 4 重试
vbIgnore 5 忽略
vbYes 6 是
vbNo 7 否
下面就举几个例子:
[Visual Basic] 纯文本查看 复制代码 '***显示“按钮形式”和“图表形式”***
Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox 例子") '65=1(按钮形式)+64(图标形式)
[Visual Basic] 纯文本查看 复制代码 '***返回值是检测用户点击哪个按钮的方式***
R=Msgbox("内容",3,"标题")
Msgbox R
'若返回6,用户点了“是”;若返回7,用户点了“否”;若返回2,用户点了“取消”。
[Visual Basic] 纯文本查看 复制代码 '***利用消息框的返回值实现人机交互***
R=Msgbox("请选择",4+256,"ss") '256表示默认聚焦的按钮是第二个“否”
If R=vbYes Then Msgbox"你点了“是”、"
If R=vbNO Then Msgbox"你点了“否”、"
三、Inputbox 的技巧
Inputbox("内容","标题","默认显示文字") '结构
函数 描述
Abs(Number) 返回数字的绝对值
Hex(Number) 返回数字的十六进制值
CBool(Expression) 返回表达式的 Boolean 类型
CByte(Expression) 返回表达式的 Byte 类型
CCur(Expression) 返回表达式的 Currency 类型
CDate(Date) 返回表达式的 Date 类型
'例:Msgbox CDate("October 19, 1962") & Chr(10) & CDate("4:35:47 PM")
CDbl(Expression) 返回表达式的 Double 类型
CInt(Expression) 返回表达式的 Integer 类型
CLng(Expression) 返回表达式的 Long 类型
CSng(Expression) 返回表达式的 Single 类
以下是几个例子:
[Visual Basic] 纯文本查看 复制代码 '***1+2+……+n***
n=CInt(Inputbox("请输入整数n","标题")) '输入整数,并赋值给n
For i=1 to n '循环1---n,共n次
Sum=Sum+i '累加
Next
Msgbox Sum
[Visual Basic] 纯文本查看 复制代码 '***简单的口令验证***
Const Pass="123" 'Const是常数,表示定义
do
a=Inputbox("请输入口令:","口令验证")
If a=Pass Then
Msgbox"口令验证成功!"
Exit do '退出循环
End if
Loop
[Visual Basic] 纯文本查看 复制代码 '***搞人小程序***
do While(a<>"我是猪")
a=Inputbox("说:我说猪","说不说","不说")
Loop
Msgbox"你本来就是猪嘛~~~",64,"Msgbox"
[Visual Basic] 纯文本查看 复制代码 '***搞人小程序《修改版》***
While Inputbox("说:我是猪","说不说","不说")<>"我是猪"
Wend
Msgbox"你本来就是嘛~~~",64,"Msgbox" 'While……Wend 循环语句
四、自定义函数和过程
编程的初学者往往不喜欢用函数,因为感觉那是很高级的东西。其实函数主要是将一些程序需要的小作用模块化,方便调用。示例:
[Visual Basic] 纯文本查看 复制代码 '***两个整数的分别累加<无函数>***
Dim i,n,m,sum
n=CInt(Inputbox("请输入整数N"))
For i=1 to n
sum=sum+i
Next
Msgbox sum
sum=0 '将sum清零,这一步很重要
m=CInt(Inputbox("请输入整数M"))
For i=1 to m
sum=sum+i
Next
Msgbox sum
[Visual Basic] 纯文本查看 复制代码 '***两个整数的分别累加<函数>***
Function sum(n)
For i=1 to n
sum=sum+i
Next
End Function
Msgbox sum(Inputbox("请输入整数N"))
Msgbox sum(Inputbox("请输入整数M"))
下面说说函数的分类:
①有参函数:需要传递参数给函数,然后返回遍历后的结果。格式及示例:
[Visual Basic] 纯文本查看 复制代码 '***一般格式***
Function X(a[,b])
... '通过条件,确定X的值
End Function
[Visual Basic] 纯文本查看 复制代码 '***示例:两个数比较***
Function Max(a,b)
If a>b Then Max=a else Max=b
End Function
X=CInt(Inputbox("请输入第一个数字:"))
Y=CInt(Inputbox("请输入第二个数字:"))
Msgbox "这两个数最中大的是:" & Max(X,Y)
②无参函数:直接执行代码,直接调用即可。格式及示例:
[Visual Basic] 纯文本查看 复制代码 '***一般格式***
Function X()
... '代码遍历
End Function
'***示例:版权标注***
Function ver()
Msgbox"本脚本有乱码所写",64,"版本"
End Function
ver() '直接调用
VBS脚本中,与函数相比,过程最大的特点就是没有返回值。鉴于它们的相似性,我们就看一下过程。
①有参型。
[Visual Basic] 纯文本查看 复制代码 '***示例:版权标注***
Function ver()
Msgbox"本脚本有乱码所写",64,"版本"
End Function
ver() '直接调用
[Visual Basic] 纯文本查看 复制代码 '***示例<一个参量>:版本标识***
Sub Ver(V) '定义过程
MsgBox "该脚本版权归乱码所有,版本:V" + V,64,"乱码领域"
End Sub
Ver "1.0" '调用方式
[Visual Basic] 纯文本查看 复制代码 '***示例<两个个参量>:两个数比较***
Sub Max_Sub(a,b) '定义过程
If a>b Then Max=a else Max=b
Msgbox "这两个数最中大的是:" & Max
End Sub
X=CInt(Inputbox("请输入第一个数字:"))
Y=CInt(Inputbox("请输入第二个数字:"))
Call Max_Sub(X,Y) '调用方式
②无参型。
[Visual Basic] 纯文本查看 复制代码 '***一般格式**
Sub X()
... '过程编写
End Sub
[Visual Basic] 纯文本查看 复制代码 Sub ver()
Msgbox"本脚本有乱码所写",64,"版本"
End Sub
ver '直接调用,不用Call
上面我们已经介绍了VBS的函数和过程,那我们就欣赏几段代码吧。
[Visual Basic] 纯文本查看 复制代码 '无参过程的调用
main
Err
'定义有参的比较函数
Function max(a,b)
if a>b then max=a else max=b
End Function
'定义无参过程
Sub main()
dim x,y
x=Cint(InputBox("请输入第一个数字"))
y=Cint(InputBox("请输入第二个数字"))
MsgBox "最大的是:" & max(x,y),64,"结果是:"
Ver "1.0"
wsh.quit
End Sub
'定义无参过程
Sub Err()
MsgBox "运行错误!",16,"错误"
Ver "1.0"
End Sub
'定义一个参数过程
Sub Ver(V)
MsgBox "该脚本版权归乱码所有,版本:V" + V,16,"乱码领域"
End Sub
[Visual Basic] 纯文本查看 复制代码 '定义检测重复运行的函数
Function IsRun()
IsRun=False '设置IsRun初始值
'遍历进程
For Each ps in GetObject("winmgmts:\\.\root\cimv2:win32_process").instances_
If Lcase(ps.name)="wscript.exe" Then
If instr(Lcase(ps.CommandLine),Lcase(wscript.scriptname)) Then i=i+1
End If
Next
If i>1 then IsRun=True '检测到相同的进程,改变初始值
End Function
If IsRun Then '事先检测是否是重复运行
Msgbox"发现已运行!",,"检测" '若重复运行,就弹出消息框
Wsh.quit '并且退出打开
End If
Msgbox"检测程序是否重复运行、",,"检测"
五、WScript.Shell对象
WScript.Shell组件是一个可执行对象,它可以操作注册表、环境变量、快捷方式和执行程序等。执行程序(即Run)是最常用的功能,我们先学习这个。
接着我们借助一个简单的例子,来说明其基本用法。
[Visual Basic] 纯文本查看 复制代码 Set WshShell = Wscript.CreateObject("Wscript.Shell")
'创建Wscript.Shell对象,并赋值给WshShell变量。
WshShell.Run "notepad.exe " & Wscript.ScriptFullname
'运行“记事本”,并用其打开本身。
Run打开一个组件的窗口样式是默认的,这个可以自己设置。
运行方法 值 说明
SW_HIDE 0 隐藏窗口运行
SW_SHOWNORMAL 1 默认窗口样式运行
SW_SHOWMINIMIZED 2 最小化窗口运行
SW_SHOWMAXIMIZED 3 最大化窗口运行
添加方法是直接在Run语句后面“,3”或者“,SW_SHOWMAXIMIZED”。如:
[Visual Basic] 纯文本查看 复制代码 WshShell.Run "notepad.exe ",3
WshShell.Run "notepad.exe ",SW_SHOWMAXIMIZED
WshShell.Run "notepad.exe " & Wscript.ScriptFullname,3
WshShell.Run "notepad.exe " & Wscript.ScriptFullname,SW_SHOWMAXIMIZED3
下面是几个Wscript.Shell的应用实例。
[Visual Basic] 纯文本查看 复制代码 '***默认浏览器打开网页***
Set objShell = CreateObject("Wscript.Shell")
objShell.Run("http://www.52pojie.cn")
[Visual Basic] 纯文本查看 复制代码 '***整人小代码***
Set WshShell=Wscript.CreateObject("Wscript.Shell") '创建可执行对象
WshShell.Run "Shutdown -r -t 60 -c 系统全面罢工中……" '60秒后关机
WshShell.Run "Taskkill /f /im explorer.exe" '资源管理器关掉
While InputBox("快说: 我是傻逼","系统全面罢工")<>"我是傻逼"
MsgBox "不说实话,耍我吗?",16,"快点说"
Wend
WshShell.run "Shutdown -a" '结束关机
WshShell.run "explorer.exe" '打开资源管理器
MsgBox "早知道你是傻 逼了..O(∩_∩)O哈哈~~",64,"系统恢复"
'由于VBS的小巧及功能基本上都是系统底层,所以往往会被黑客利用来破坏系统,从而QQ等IM程序会
'默认阻止这种程序的P2P传输。这是我们将后缀.VBS改为.VBE就能相互传了。
'VBE(VBScript Encoded Script)往往是加密后的VBS,但是不加密也是可以运行的。
|