吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7840|回复: 8
收起左侧

[其他转载] VBS 的学习笔记[基础篇] From 乱码

  [复制链接]
淡然出尘 发表于 2013-2-24 17:42
本帖最后由 淡然出尘 于 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,但是不加密也是可以运行的。




本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

青春期_。 发表于 2013-2-24 17:47
vb bu dong .
xiafanyi123 发表于 2013-2-24 17:48
FishSauce 发表于 2013-2-24 17:55
hackhp 发表于 2013-2-24 18:04
你之前不是发过乱码的这个VBS教程视频么

点评

嗯 但是有些代码视频课件中没有列出 我就整理出来了、  发表于 2013-2-24 18:32
1354669803 发表于 2013-2-24 19:08
尘哥学脚本吗 膜拜会写的
傻b控、 发表于 2013-5-18 10:07
使用free释放p1所指向的内存
2314902431 发表于 2013-9-10 16:54
表示前来参考学习.
lcg2014 发表于 2014-3-16 19:02
学无止境,日拱一卒
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 13:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表