看点:
你知道吗?为什么现在脚本病毒如此猖獗?
你知道吗?编写一个脚本病毒其实非常简单!
你知道吗?根本不懂编程的你只要稍加操练也能编出不错的软件!

Windows脚本就像魔法卷轴般神奇,编写起来也很容易。或许这句话并没有凭据,但把玩几个小时,比如看完这期专题并且亲自演练一下,相信你会同意我的说法。当然,有一点编程经验当然更好,因为你会发现很多知识都是相通的。
 

快来吧!编写你的第一个脚本
 

打开"记事本",按照如图1所示输入(图1  你的第一个脚本程序),并把这个文件保存为HelloWorld.vbs,接着双击它,你就会看到一个跳出来的对话框,上面写着"Hello World!",点击"确定"按钮就可以结束这个脚本。恭喜!你已经完成了第一个脚本程序!

一、魔法的前言:什么是脚本
1.什么是编程语言
许多朋友一听到什么编程语言就头大,其实理解起来并不困难,说得通俗些,编程语言就是类似于汉语、英语的语言,只不过它们是用来和电脑沟通的语言,程序员就相当于你和电脑之间的翻译,他们会把你需要实现的功能用相应语言告诉电脑,让它来执行,如果某个功能会有非常多人用到,那么程序员就把它翻译成成一个文件,这就是程序。因此,你只要掌握了编程语言的基本命令、规范、用法,那么就能轻松编出程序,当然,电脑在理解语言方面有些弱智,或者说是非常严谨,你不能说错一个单词或把语句顺序搞混,否则它就无法理解你的话,无法执行你的命令或做出完全相反的事情。
2.什么是Windows脚本语言
首先,Windows脚本语言也是一种编程语言,也有自己专门的命令词汇、规范、用法,你只要按照自己的要求把命令写进去,那么Windows就会直接执行。只不过相对于Java、C++等编程语言要简单得多,也就是即使以前根本没有编程经验的普通人也能很容易地在较短时间内学习并掌握。同时,Windows脚本语言是完全免费的,不像一套Visual Basic或Delphi,动辄几千人民币,它不花一分钱。
Windows脚本也有一些不同的语言,比如:VBScritp、Jscrīpt,它们内嵌在Windows中,不需要安装,可以直接使用,真不愧为微软的免费礼物。另外脚本语言还有更为强大的Perl(http://www.activestate.com/)和现今异常火爆的Python(http://www.python.org/)。
3.有"记事本"就能马上编脚本
Windows脚本最大的好处在于它是用文本描述的,只要一个文本编辑器,比如"记事本",就可以编写,并能立即看到效果。同时,脚本文件本身就是源代码,拿到一个脚本后,可以根据自己的个性进行定制,遇到功能不够或不完整的情况,可以随意修改。不像普通的共享软件,必须等作者升级软件而望穿秋水。
4.脚本程序是谁来执行的?
此外,Windows脚本有着一个非常坚实的基础,那就是Windows脚本的运行环境--Windows脚本宿主(Windows scrīpt Host),简称WSH。它是一个Windows管理工具,能够给VBscrīpt(.vbs)、Javascrīpt(.js)等脚本文件提供一个特殊的外部运行环境,换言之,当我们运行某个VBS文件时,是WHS在幕后为之创建对象(也就是功能模块,比如:读写注册表、操作文件、创建快捷方式等),并且按照脚本内的语言的指令执行操作。
小提示
WSH即可以使脚本直接在Windows下,也可以让其运行在命令提示符下,它在Windows中的程序名为Wscrīpt.exe,在命令提示下的程序名为Cscrīpt.exe。
这期特别话题中我们将主要介绍VBscrīpt,毕竟BASIC语言与比尔·盖茨的超友谊关系是世人皆知的。
二、脚本编写再上一层楼
1.全面分析"Hello World!"
刚才我们一起制作了"Hello World!"这个程序,下面再用它当实验品来深刻理解一下这个脚本的意思。
"Wscrīpt.Echo"翻译成中文的意思是:显示。也就是告诉电脑,"请调用你的显示功能为我显示'Hello World!'这个语句"。要注意的是让电脑显示的语句必须包括在英文双引号中,否则电脑就会分不清那些是你要显示的内容了。
Just Do It
请修改这个脚本,让它显示:"你好!《电脑爱好者》"。
小提示
如果在输入时不小心出入错误,比如不小心把"Echo"打成"Eche"了,那么执行时,Windows会毫不犹豫地向你抱怨,并且错误提示相当详细,赶快修正吧!。另外,你还要注意你的引号是否正确,一定要使用英文的引号才可以,不然Windows同样也会拒绝你。
2.让电脑来赞美你吧!
在"Hello World!"的基础上,让我们再扩展一下功能。打开"记事本",输入如下语句(只用三行文字,就可以让电脑问候你):


程序翻译
(1)"Dim":定义"strName"为变量,用来存储信息,这里的作用是存储用户姓名,并且它是可变的,会根据用户输入的内容变化。举个通俗的比喻,"strName"就像电影票上的座位号(比如:1号),它和坐在上面的观众并没固定的关系,也就是它不长期属于张三或李四,一旦张三买了这个座位号的电影票,那么在看电影期间这个座位号就和张三联系在一起了,大家一喊1号座位的那个人,就等于在叫张三。当电影散场时,这个座位号与张三的联系也就没有了。
(2)"'定义变量":这是注释语句,在VBscrīpt脚本语言中,单引号以及单引号后的字符都是注释,不会被解释执行。
(3)"strName=InputBox("输入你的名字:")":显示"输入你的名字:",让用户在下面的输入框输入名字,而"strName="的意思就是告诉电脑,前面所定义的变量"strName"就是用户输入的文字。执行时会显示这样的输入框(快来输入你的名字):
(4)当你输入完成并单击"确定"后,现在只要一说"strName",电脑就知道它就是"Bill Gates",因为前面的语句已经告诉电脑"strName"="Bill Gates"。
而第三行中的"&"符号用于连接"Bill Gates"和",你好!"的字符串,并且用"Wscrīpt.Echo"显示出来。从而,最终你就会得到。

Just Do It
请改造这个脚本,让它在输入名字后,显示为"XXX,你真的太漂亮了!"。呵呵,完成后赶快把它发送给你的女朋友,让她狂喜一下吧。
小提示
如果你想成为VBscrīpt脚本高手
编写脚本无非是一个调用函数以达到最终目的的过程。VBscrīpt脚本语言提供非常多的函数,以至于你很难找到它不能做的事情。如果你想成为一名VBscrīpt脚本高手,那么请参考微软的权威知识库:
VBscrīpt语言参考:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/scrīpt56/html/vbscrīpttoc.asp
WSH基础:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/scrīpt56/html/wsconwshbasics.asp

三、注册表魔法--更方便的ActiveX屏蔽工具
实例1:入门实例--Windows XP启动加速器
作为后文脚本的铺垫,首先学习一下Windows脚本读写注册表的方法。Windows脚本主要通过WSH的WshShell对象来读写注册表的,下面这段代码就演示了仅修改注册表里一个参数,就使Windows XP的开机速度大大提高,让启动画面的滚动条从滚动六圈加快到一圈半(下载地址:http://www.cfan.com.cn/11program/200406/booster.zip):
' 加速Windows XP启动
' 《电脑爱好者》专用 狮峰制造
Option Explicit
Dim WshShell, RegKey
Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
RegKey = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher"
WshShell.RegWrite RegKey, &H00000001, "REG_DWORD"
程序翻译
(1)前两行因为带有"'",所以一看就知道是用来注释的,不会被执行。
(2)"Option Explicit":说明这个脚本中使用的变量必须事先声明,虽然也可以不输入,但建议最好写每个脚本时都输入它,因为这是避免错误的好方法。
(3)"Dim WshShell, RegKey":也很明白了,就是定义"WshShell"、" RegKey"两个变量。
(4)"Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")":"CreateObject"的意思是创建对象,也就是创建一个Wscrīpt.Shell对象(它就是可以读写注册表的WshShell对象),同时告诉电脑"WshShell"=Wscrīpt.Shell对象。
(5)"RegKey = ……":这一语句的意思就是"RegKey"=要修改的注册表键。
(6)"WshShell.RegWrite RegKey, &H00000001, "REG_DWORD"":翻译过来就是,用现在已经可以读写注册表的"WshShell"写注册表(RegWrite)的"RegKey"(就是前面的注册表键)这个双字节键,将其值修改为十六进制的数字1。
火速链接
如果你在阅读此处时有问题出现,说明你对注册表还不了解,建议你参考本刊2004年第1期的《其实你不懂我的心--由0晋身200%注册表高手》一文。
Just Do It
在[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]右侧窗格新建名为"NoShellSearchButton"的双字节值,将其值设置为1,即可隐藏"资源管理器"的"搜索"按钮,请将这个技巧写成一个脚本文件。

实例2:弹出窗口免疫器
这个工具一共可以对网上流行的8个弹出窗口以及Flash进行免疫(下载地址:http://www.cfan.com.cn/11program/200406/banit.zip)。
该脚本在Windows XP下面测试通过。强烈建议你阅读下面的脚本说明,学会维护以及扩充这个脚本的方法。
' 禁止IE调用指定ActiveX来实现对3721/CNNIC/BAIDU等的免疫
' 《电脑爱好者》专用 狮峰制造
Option Explicit
Dim WshShell, RegPath, RegKey, ClassIdCollection, Item
Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
RegPath = "HKLM\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\"
RegKey = "\Compatibility Flags"
'以下ClassId分别代表:
'3721网络实名,3721上网助手,3721中文邮,
'百度搜索伴侣,CNNIC通用域名,网易泡泡,
'新浪点点通,新浪IE通,搜狐视频播放器,
'XXXToolbar,Mtree Dialers,Mtree Dialers,
'Adodb.Stream 2.7,Adodb.Stream 2.5,Flash
ClassIdCollection = Array( _
    "{B83FC273-3522-4CC6-92EC-75CC86678DA4}", _
    "{1B0E7716-898E-48CC-9690-4E338E8DE1D3}", _
    "{4EDBBAEA-F509-49F6-94D1-ECEC4BE5B686}", _
    "{BC207F7D-3E63-4ACA-99B5-FB5F8428200C}", _
    "{9A578C98-3C2F-4630-890B-FC04196EF420}", _
    "{CF051549-EDE1-40F5-B440-BCD646CF2C25}", _
    "{15DDE989-CD45-4561-BF99-D22C0D5C2B74}", _
    "{98FA5667-513F-4F15-8A15-C171477B8847}", _
    "{2D0C7226-747E-11D6-83F0-00E04C4A2F90}", _
    "{018B7EC3-EECA-11D3-8E71-0000E82C6C0D}", _
    "{E8EDB60C-951E-4130-93DC-FAF1AD25F8E7}", _
    "{FC87A650-207D-4392-A6A1-82ADBC56FA64}", _
    "{00000566-0000-0010-8000-00AA006D2EA4}", _
    "{4B106874-DD36-11D0-8B44-00A024DD9EFF}", _
    "{D27CDB6E-AE6D-11cf-96B8-444553540000}")
If MsgBox("屏蔽这些ActiveX以便加速浏览?要屏蔽选择Yes,要恢复选择No:", vbYesNo) = vbYes Then
    For Each Item In ClassIdCollection
     WshShell.RegWrite RegPath & Item & RegKey, &H00000400, "REG_DWORD"
    Next
Else
    For Each Item In ClassIdCollection
     WshShell.RegWrite RegPath & Item & RegKey, &H00000000, "REG_DWORD"
    Next
End If
小提示
手动操作的原理与方法请见本刊2004年第1期《其实你不懂我的心--由0晋身200%注册表高手》一文。使用脚本读写注册表有很多好处,比如:
★注册表与Windows相当大脑与人类,复杂而且重要,手动操作注册表非常不方便,而且相当危险,万一把Windows弄得全身瘫痪,罪莫大焉,而使用经过严格测试的脚本则安全可靠。
★可以把多个操作融合到一个脚本中,比如对ActiveX屏蔽和恢复功能,与注册表文件(使用REG文件)方式相比体积大大减小,而且维护起来更不容易出错。
程序翻译
首先前面的注释、变量、创建Wscrīpt.Shell对象等都不用再解释了,你可以对照前面的实例进行解读。
(1)接下来的几行定义了一个ClassIdCollection数组。关于数组呢,你可以根据的变量简单的理解它为电影院里的一排座位。ClassIdCollection数组保存的是这九个ActiveX的CLSID,由于需要换行表示,所以在后面加上了"_"符号。如果你将来要免疫新的弹出窗口或ActiveX控件,可按照这样的格式自己添加,非常简单。
小提示
ActiveX控件的CLSID的方法。寻找它的方法有很多,最简单的就是到会弹出窗口的网页源代码中去找,那些长长的32个16进制的字符串多半就是你要找的东西。
(2)剩下的所有代码可以看成一个整体,也就是"如果……否则……"的结构。首先弹出一个窗口询问用户"屏蔽这些ActiveX以便加速浏览?要屏蔽选择Yes,要恢复选择No:"如果用户选择"Yes",那么就将它们全部禁掉,如果选择"No",那么就会恢复它们。
小提示
脚本可以做很多事情,也包括坏事。所以,许多反病毒软件对脚本可是严加看管的,特别是那些创建了"Wscrīpt.Shell"对象的脚本。比如,如果你安装了Norton AntiVirus软件,当你要运行这个脚本时,它就会横加阻拦。由于是我们自己编写的脚本,当然不会有恶意,选择"Authorize this scrīpt"(对这个脚本授权),然后点击OK按钮即可。
Just Do It
请试着将下面的命令写为一个脚本,并且在Windows 98中运行,看看效果。
Option Explicit
Dim WshShell
Set WshShell = Wscrīpt.CreateObject("Wscrīpt.Shell")
WshShell.Run "scandskw  /all /n /silent",1,true
WshShell.Run "defrag /F /P /all /noprompt",1,true

 

http://blog.chinaitlab.com/html/41/1948541-178267.html

http://windows.chinaitlab.com/special/Script/