1. 从“整蛊”两个字说起:VBS脚本到底能玩出什么花样
很多人第一次接触VBS,不是因为要写自动化运维脚本,而是被朋友发来的一个“双击一下,有惊喜”的文件勾起了好奇心。双击之后,光驱弹出来了、鼠标指针开始自己乱跑、屏幕上弹出一连串关不掉的对话框,甚至电脑突然开始朗读一段莫名其妙的文字。这些让人又气又笑的场景,背后其实都是同一类东西——VBScript脚本。
VBScript的全称是Microsoft Visual Basic Scripting Edition,它是Windows系统自带的一种轻量级脚本语言。你不需要安装任何编译器,只要把代码写进一个后缀为.vbs的文本文件里,双击就能运行。它的能力边界完全取决于你调用了哪些系统接口:可以操作文件系统、可以调用Windows自带的语音引擎、可以控制键盘和鼠标的输入模拟、可以弹出各种样式的对话框、还可以启动和关闭其他程序。正因为这些能力都是系统原生提供的,所以VBS脚本的“整蛊”效果往往来得特别直接——不需要额外安装任何东西,发给朋友就能跑。
但这里有一个非常重要的前提需要说清楚:整蛊和恶意破坏之间有一条清晰的红线。一个合格的整蛊脚本,应该是“看起来吓人、实际无害、关掉就恢复”的。比如让屏幕闪烁、弹出搞笑对话框、让电脑发出奇怪声音,这些都属于可接受的范畴。但如果脚本删除了文件、修改了系统关键设置、或者让电脑无法正常使用,那就不是整蛊,而是破坏。我在实际写这类脚本的时候,给自己定了一条规矩:任何脚本运行后,必须能通过任务管理器或者简单的操作完全恢复,不留下任何持久性的影响。
这篇文章面向的是对VBS脚本感兴趣、想自己动手写几个整蛊小玩意儿的读者。不管你是完全没写过代码的新手,还是有一点编程基础想找点乐子的人,下面的内容都会从最基础的操作讲起,逐步深入到三十二个具体脚本的实现思路和代码细节。我会把每个脚本的原理讲清楚,把代码给出来,同时把“为什么这样写”和“哪里容易出问题”一并说明。你拿到之后可以直接复制使用,也可以根据自己的想法修改参数,做出属于你自己的版本。
注意:所有脚本仅限在你自己拥有或明确授权的设备上运行。发给朋友之前,最好先确认对方能接受这种玩笑,并且知道如何关闭脚本。任何未经允许在他人设备上运行脚本的行为,都可能带来不必要的麻烦。
2. 动手之前:VBS整蛊脚本的运行环境与安全边界
2.1 为什么VBS脚本双击就能跑
Windows系统内置了一个名为Windows Script Host的组件,它负责解析和执行VBScript和JScript脚本。当你双击一个.vbs文件时,系统会自动调用wscript.exe来执行它。这个机制从Windows 98时代就存在了,一直保留到现在。也就是说,你不需要安装Python、不需要配置Node.js环境,打开记事本就能开始写。
创建一个VBS脚本的流程简单到不能再简单:打开记事本,输入代码,点击“文件”菜单里的“另存为”,在文件名那一栏写上test.vbs,保存类型选择“所有文件”,编码选择ANSI(这一点很重要,后面会解释原因),然后双击这个文件,代码就会运行。如果代码里有语法错误,系统会弹出一个错误提示框,告诉你哪一行出了问题。
这里有一个新手经常踩的坑:如果用记事本保存时没有把“保存类型”改成“所有文件”,系统会自动在文件名后面加上.txt,变成test.vbs.txt,双击打开的是记事本而不是运行脚本。另一个坑是编码问题,如果保存时选择了UTF-8,中文注释和字符串可能会变成乱码,因为VBScript默认按照系统本地编码来解析文件。所以在中文Windows环境下,保存VBS文件时选择ANSI编码是最稳妥的做法。
2.2 整蛊脚本的“无害化”设计原则
写整蛊脚本和写正经的自动化脚本,在技术层面上没有本质区别,但在设计思路上有一个核心差异:整蛊脚本必须把“可恢复性”放在第一位。我总结了三条原则,每次写新脚本的时候都会对照检查。
第一条原则是不修改持久性设置。比如不要用脚本去改注册表里的开机启动项,不要修改系统的显示设置,不要更改网络配置。这些改动即使重启也不一定能恢复,会给对方造成真正的困扰。整蛊的效果应该局限在当前会话中,关掉脚本或者重启就消失。
第二条原则是提供明确的退出方式。如果一个脚本弹出了一堆窗口,那至少要保证对方能通过按某个键或者关闭某个窗口来结束整个脚本。我通常会在脚本开头设置一个快捷键检测,比如按下Esc键就退出,或者在弹窗里放一个“停止”按钮。最忌讳的是写一个死循环,对方除了强制关机没有任何办法停下来。
第三条原则是控制影响范围。比如模拟键盘输入的时候,不要输入大量无意义的字符把对方的文档搞乱;播放声音的时候,不要把音量调到最大吓人一跳。整蛊的目的是让人会心一笑,不是让人摔键盘。
2.3 调试脚本时最实用的几个技巧
写VBS脚本有一个很不方便的地方:它没有像现代编程语言那样的调试器。代码出错的时候,你只能看到一个错误提示框,告诉你第几行出了什么问题。经过多次实践,我总结了几个提高调试效率的方法。
第一个方法是用MsgBox做断点。在代码的关键位置插入MsgBox "到这里了",运行脚本时如果弹出了这个提示,说明前面的代码都正常执行了。虽然笨,但非常有效。
第二个方法是用WScript.Echo输出变量值。不过要注意,WScript.Echo在双击运行.vbs文件时默认不显示输出,需要用cscript.exe来运行才能在命令行窗口看到结果。具体操作是打开命令提示符,输入cscript //nologo 脚本名.vbs,这样就能看到所有的输出信息。
第三个方法是把大段代码拆成小段测试。不要一次性写完三十二个脚本再运行,而是写一个测一个。每个脚本单独保存成一个文件,确认能正常运行之后再继续写下一个。这样出问题的时候,排查范围就小很多。
3. 三十二个整蛊脚本的分类拆解与代码实现
3.1 弹窗类脚本:从简单提示到无限循环
弹窗是VBS整蛊里最基础也最经典的一类。MsgBox函数是VBS的内置函数,调用它会弹出一个模态对话框,对方必须点击按钮才能继续。这个函数的完整语法是MsgBox(提示文字, 按钮类型, 标题文字)。按钮类型决定了对话框上显示哪些按钮,比如vbOKOnly只显示“确定”,vbYesNo显示“是”和“否”,vbCritical会显示一个红色的错误图标。
最简单的整蛊脚本就是弹出一个带有搞笑文字的对话框:
MsgBox "你的电脑已经被外星人控制了!", vbExclamation, "警告"这行代码会弹出一个带有黄色感叹号图标的对话框,标题是“警告”,内容是“你的电脑已经被外星人控制了!”。对方点击“确定”之后,脚本就结束了。效果很温和,适合作为入门级的整蛊。
稍微进阶一点的做法是连续弹出多个对话框。用循环语句可以让对话框一个接一个地弹出来:
Dim i For i = 1 To 10 MsgBox "第 " & i & " 次提醒:你的鼠标正在逃跑!", vbInformation, "重要通知" Next这段代码会弹出十个对话框,每点掉一个就弹出下一个。对方需要点击十次“确定”才能全部关掉。如果把循环次数改成一百,那就有点烦人了。所以我一般建议控制在五到十次之间,既能达到整蛊效果,又不至于让对方真的生气。
再狠一点的版本是无限弹窗,但必须留一个退出机制。下面这个脚本会不断弹出对话框,直到对方在某个对话框里点击“取消”:
Dim result Do result = MsgBox("点确定我就再弹一个,点取消我就放过你。", vbOKCancel, "你选吧") Loop While result = vbOK这个脚本的逻辑是:只要对方点的是“确定”,循环条件就成立,继续弹下一个;一旦点了“取消”,循环结束,脚本退出。这样既达到了整蛊效果,又给了对方一个明确的“逃生通道”。
实操心得:弹窗类脚本最容易引发对方反感,因为对话框会强制打断对方正在做的事情。我的经验是,如果对方正在工作或者玩游戏,最好不要用这类脚本。适合的场景是对方闲着没事干的时候,或者作为朋友之间互相开玩笑的调剂。
3.2 语音合成类脚本:让电脑开口说话
Windows系统自带了一个语音合成引擎,VBS可以通过SAPI.SpVoice对象来调用它。这个功能的整蛊效果非常好,因为电脑突然开口说话这件事本身就很有戏剧性。
最基本的用法是这样的:
Dim voice Set voice = CreateObject("SAPI.SpVoice") voice.Speak "你好,我是你的电脑,我饿了。"把这段代码保存成.vbs文件,双击运行,电脑就会用默认的语音朗读这句话。朗读的音量、语速、音调都可以通过对象的属性来调整。比如voice.Rate = -5可以让语速变慢,voice.Volume = 50可以把音量降到一半。
一个比较有趣的整蛊脚本是让电脑反复朗读同一句话,而且语速越来越快:
Dim voice, i Set voice = CreateObject("SAPI.SpVoice") For i = 1 To 5 voice.Rate = i * 2 voice.Speak "我停不下来了,快帮帮我!" Next这段代码会让电脑用越来越快的语速重复同一句话五次。第一次正常速度,第二次稍快,到最后一次的时候语速已经快得听不清了。效果很滑稽,而且脚本运行时间很短,不会造成持续困扰。
还有一个更隐蔽的玩法:把语音合成和弹窗结合起来。先弹出一个对话框,对方点击“确定”的同时,电脑开始朗读一段文字。这种“视觉加听觉”的组合效果比单独使用任何一种都要好。
Dim voice Set voice = CreateObject("SAPI.SpVoice") MsgBox "点一下试试?", vbInformation, "惊喜" voice.Speak "恭喜你,你的电脑现在归我管了。" MsgBox "开玩笑的,别紧张。", vbInformation, "逗你玩"这个脚本的节奏感很好:先制造悬念,再制造紧张,最后用一句“开玩笑的”收尾。整个过程不超过十秒钟,但对方的情绪会被完整地调动一遍。
注意:语音合成功能依赖于系统安装的语音包。在中文Windows上,默认的语音引擎通常支持中文朗读,但声音可能比较机械。如果对方系统没有安装中文语音包,朗读中文可能会出错或者没有声音。在发给朋友之前,最好先在自己的电脑上测试一下。
3.3 输入模拟类脚本:鼠标和键盘的“幽灵操作”
VBS可以通过WScript.Shell对象的SendKeys方法来模拟键盘输入。这个方法的原理是向当前活动窗口发送按键消息,效果就像有人真的在敲键盘一样。整蛊的玩法通常是:打开一个程序(比如记事本),然后让脚本自动输入一段文字。
Dim shell Set shell = CreateObject("WScript.Shell") shell.Run "notepad.exe" WScript.Sleep 1000 shell.SendKeys "救命啊,键盘自己动起来了!"这段代码会先启动记事本,等待一秒钟让记事本窗口完全打开,然后自动输入一行文字。对方会看到记事本自己打开,然后文字一个一个字地蹦出来,视觉效果非常诡异。
SendKeys方法支持的按键包括普通字母、数字、符号,以及一些特殊按键。特殊按键需要用大括号括起来,比如{ENTER}表示回车键,{TAB}表示制表符,{BACKSPACE}表示退格键,{F1}到{F12}表示功能键。如果要发送组合键,比如Ctrl+C,可以写成^c,其中^代表Ctrl键,%代表Alt键,+代表Shift键。
一个比较经典的整蛊脚本是让鼠标指针自己移动。不过VBS本身没有直接控制鼠标位置的函数,需要借助WScript.Shell的SendKeys来模拟方向键,或者调用Windows API。用方向键的方案比较简单:
Dim shell, i Set shell = CreateObject("WScript.Shell") WScript.Sleep 2000 For i = 1 To 50 shell.SendKeys "{RIGHT}" WScript.Sleep 50 Next这段代码会在等待两秒后,连续发送五十次右方向键。如果对方当时正在看网页或者文档,光标就会自己往右移动。效果取决于对方当前打开的是什么程序,在文本编辑器里是光标移动,在图片查看器里可能是切换图片。
实操心得:输入模拟类脚本的“翻车率”比较高,因为
SendKeys是向当前活动窗口发送按键,如果对方在你等待的那一秒钟里切换了窗口,按键就会发送到错误的程序里。我的做法是把等待时间设置得长一点,比如三到五秒,给对方一个“停下来看看发生了什么”的时间,这样脚本运行时活动窗口大概率就是脚本自己打开的那个程序。
3.4 视觉干扰类脚本:屏幕闪烁与颜色反转
视觉干扰类的整蛊效果最直观,因为对方直接能看到屏幕上的变化。VBS本身没有直接操作屏幕像素的能力,但可以通过调用系统命令或者修改注册表来实现一些视觉效果。
一个简单的方法是反复打开和关闭光驱。虽然这不是视觉干扰,但光驱弹出和收回的机械声加上托盘的动作,效果也很明显:
Dim shell, i Set shell = CreateObject("WScript.Shell") For i = 1 To 5 shell.Run "wmic cdrom where drivetype=5 call eject", 0, True WScript.Sleep 2000 Next这段代码会调用系统命令让光驱弹出五次,每次间隔两秒。不过这个脚本只对带有光驱的电脑有效,现在很多轻薄本已经没有光驱了,所以适用范围有限。
另一个视觉干扰的思路是让屏幕上的内容不断刷新。可以通过反复发送F5键来实现:
Dim shell, i Set shell = CreateObject("WScript.Shell") WScript.Sleep 3000 For i = 1 To 20 shell.SendKeys "{F5}" WScript.Sleep 300 Next如果对方当时正在看网页,F5就是刷新键,网页会不断重新加载。如果对方在桌面,按F5也会刷新桌面图标。这个脚本的效果取决于对方当前打开的程序,但不管怎样,屏幕上的内容会不断变化,造成一种“电脑出问题了”的错觉。
还有一个比较温和的视觉整蛊是改变命令提示符窗口的颜色。先打开一个命令提示符窗口,然后用color命令改变它的背景色和文字颜色:
Dim shell Set shell = CreateObject("WScript.Shell") shell.Run "cmd.exe /k color 4e"这段代码会打开一个命令提示符窗口,并把背景设为红色、文字设为淡黄色。对方看到一个红底黄字的命令行窗口,可能会觉得有点奇怪。这个脚本的好处是完全无害,关掉窗口就恢复正常。
注意:视觉干扰类脚本的效果很大程度上取决于对方当前在做什么。如果对方正在全屏玩游戏或者看视频,很多按键模拟可能不会生效。所以在设计这类脚本的时候,最好选择那些不依赖特定窗口的操作,比如光驱弹出或者系统声音播放。
3.5 声音干扰类脚本:系统提示音的“交响乐”
Windows系统自带了很多提示音,比如错误提示音、警告提示音、信息提示音等。VBS可以通过CreateObject("WScript.Shell").Run来调用系统命令播放这些声音,或者直接用Beep函数发出蜂鸣声。
Beep函数是VBS内置的,用法很简单:Beep。调用一次就发出一声短促的蜂鸣。如果把它放进循环里,就能制造出连续不断的蜂鸣声:
Dim i For i = 1 To 30 Beep WScript.Sleep 100 Next这段代码会发出三十声蜂鸣,每声间隔一百毫秒。声音虽然不大,但在安静的环境里突然响起来,效果还是很明显的。
更“高级”一点的玩法是播放系统提示音。Windows的系统提示音存储在C:\Windows\Media目录下,文件名通常是.wav格式。可以用WScript.Shell的Run方法来播放:
Dim shell Set shell = CreateObject("WScript.Shell") shell.Run "sndrec32 /play /close C:\Windows\Media\Windows Error.wav", 0, False不过sndrec32这个程序在较新的Windows版本中已经被移除了,所以这个方法不一定通用。更可靠的方式是使用SAPI.SpVoice对象来播放声音文件:
Dim voice Set voice = CreateObject("SAPI.SpVoice") voice.Speak " "等等,SAPI.SpVoice的Speak方法是用来朗读文字的,不是用来播放音频文件的。如果要播放.wav文件,需要用SAPI.SpVoice的AudioOutputStream属性,或者使用MediaPlayer对象。不过这些方法都比较复杂,对于整蛊脚本来说,直接用Beep函数或者语音合成已经足够了。
一个比较有趣的组合是让电脑一边发出蜂鸣声一边朗读文字:
Dim voice, i Set voice = CreateObject("SAPI.SpVoice") For i = 1 To 5 Beep voice.Speak "系统即将崩溃,请立即保存文件。" WScript.Sleep 500 Next这个脚本会先发出一声蜂鸣,然后朗读一句“系统即将崩溃,请立即保存文件”,重复五次。虽然内容听起来很吓人,但实际上什么都不会发生。对方如果信以为真,可能会赶紧去保存文件,然后发现什么事都没有,这种反差感就是整蛊的乐趣所在。
实操心得:声音类脚本在办公室或者图书馆等安静环境里效果最好,因为突然响起的声音会格外引人注意。但在嘈杂环境里,或者对方戴着耳机的时候,效果就会大打折扣。另外,如果对方电脑的音量调得很低或者静音了,声音类脚本就完全没用了。所以在使用这类脚本之前,最好先确认一下对方的音量设置。
3.6 文件系统类脚本:创建和打开各种文件
VBS可以通过FileSystemObject对象来操作文件和文件夹。整蛊的玩法通常是:在桌面上创建一堆文件,或者打开某个文件让对方面对一堆弹窗。
一个经典的整蛊脚本是在桌面上创建大量文本文件:
Dim fso, desktop, i Set fso = CreateObject("Scripting.FileSystemObject") desktop = fso.GetSpecialFolder(0) For i = 1 To 50 fso.CreateTextFile desktop & "\整蛊文件" & i & ".txt", True Next MsgBox "你的桌面被我占领了!", vbInformation, "哈哈"这段代码会在桌面上创建五十个空的文本文件,文件名从“整蛊文件1.txt”到“整蛊文件50.txt”。对方看到桌面上突然多出五十个文件,可能会吓一跳。不过这个脚本的“后遗症”比较明显:对方需要手动删除这些文件。所以我在使用这个脚本的时候,通常会在最后加一段清理代码,或者至少告诉对方怎么快速删除。
另一个思路是打开一个包含大量内容的文本文件,让对方以为电脑出了问题:
Dim fso, file, i Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.CreateTextFile("C:\temp_整蛊.txt", True) For i = 1 To 1000 file.WriteLine "系统错误代码:" & i & ",请联系管理员。" Next file.Close WScript.Shell.Run "notepad.exe C:\temp_整蛊.txt"这段代码会创建一个包含一千行“系统错误代码”的文本文件,然后用记事本打开它。对方看到满屏幕的错误信息,可能会以为电脑真的出了大问题。实际上这些文字都是脚本自己写进去的,没有任何实际意义。
注意:文件系统类脚本的“破坏性”相对较强,因为创建的文件需要手动清理。如果创建的文件数量太多,或者文件太大,可能会占用对方的磁盘空间。我的建议是把文件数量控制在二十个以内,文件大小控制在一兆字节以内。另外,创建文件之前最好先检查一下目标路径是否存在,避免因为路径错误导致脚本报错。
3.7 系统功能类脚本:光驱、计算器和任务管理器的“恶作剧”
VBS可以调用系统命令来启动各种程序,也可以操作一些系统功能。整蛊的玩法通常是:反复打开某个程序,或者让某个系统功能不断触发。
一个经典的整蛊脚本是反复打开计算器:
Dim shell, i Set shell = CreateObject("WScript.Shell") For i = 1 To 10 shell.Run "calc.exe" WScript.Sleep 500 Next这段代码会打开十个计算器窗口。对方需要一个个关掉它们。如果把循环次数改成一百,那就有点过分了。所以我一般建议控制在五到十个之间。
另一个玩法是反复打开和关闭光驱,这个前面已经提到过了。还有一个比较温和的玩法是让任务管理器自己打开:
Dim shell Set shell = CreateObject("WScript.Shell") shell.Run "taskmgr.exe" WScript.Sleep 2000 shell.SendKeys "{ESC}"这段代码会打开任务管理器,等待两秒,然后发送Esc键关闭它。效果是任务管理器窗口一闪而过,对方可能会以为自己看错了。
还有一个比较有趣的脚本是让系统不断弹出“找不到文件”的错误提示:
Dim shell, i Set shell = CreateObject("WScript.Shell") For i = 1 To 5 shell.Run "nonexistent_file_" & i & ".exe", 0, False WScript.Sleep 1000 Next这段代码会尝试运行五个不存在的文件,每次都会触发系统的“找不到文件”错误提示。对方会看到一连串的错误弹窗,但每个弹窗的内容都是“Windows找不到文件”,看起来像是系统出了问题。
实操心得:系统功能类脚本的效果通常比较直接,但也最容易引起对方的反感。我的经验是,这类脚本适合用在比较熟悉的朋友之间,而且最好在对方心情好的时候用。如果对方正在忙或者心情不好,这类脚本可能会适得其反。
4. 让整蛊脚本更“高级”的几个技巧
4.1 用随机数让脚本每次运行都不一样
如果每次运行脚本的效果都一模一样,对方很快就会失去新鲜感。用VBS的Randomize和Rnd函数可以给脚本加入随机性,让每次运行的结果都不同。
Randomize Dim messages, index messages = Array("你的电脑被入侵了", "系统即将重启", "检测到病毒", "鼠标即将失效") index = Int(Rnd * 4) MsgBox messages(index), vbExclamation, "警告"这段代码会从四个消息中随机选一个弹出来。每次运行脚本,弹出的消息都可能不同。如果把随机数用在循环次数、等待时间、弹窗位置等地方,脚本的变化就更多了。
4.2 用延时和节奏控制制造“真实感”
一个整蛊脚本的效果好不好,很大程度上取决于节奏。如果所有动作都在一瞬间完成,对方可能还没反应过来就结束了。如果加入适当的延时,让动作一个接一个地发生,效果就会好很多。
Dim shell Set shell = CreateObject("WScript.Shell") WScript.Sleep 2000 shell.Run "notepad.exe" WScript.Sleep 1500 shell.SendKeys "你" WScript.Sleep 500 shell.SendKeys "好" WScript.Sleep 500 shell.SendKeys "啊"这段代码会先等待两秒,然后打开记事本,再等待一秒半,然后一个字一个字地输入“你好啊”。每个字之间间隔半秒,看起来就像有人在慢慢打字一样。这种节奏感会让整蛊效果更加逼真。
4.3 用条件判断让脚本“聪明”一点
VBS支持If...Then...Else条件判断语句,可以根据不同的情况执行不同的操作。比如可以判断当前时间,只在晚上运行整蛊效果;或者判断某个文件是否存在,只在特定条件下触发。
Dim hour hour = Hour(Now) If hour >= 22 Or hour < 6 Then MsgBox "这么晚了还不睡?", vbExclamation, "关心你" Else MsgBox "白天别偷懒!", vbInformation, "提醒" End If这段代码会根据当前时间弹出不同的消息。晚上十点到早上六点之间弹出“这么晚了还不睡?”,其他时间弹出“白天别偷懒!”。这种“看情况说话”的脚本会让对方觉得脚本好像有智能一样。
5. 整蛊脚本的“翻车”现场与避坑指南
5.1 脚本卡死关不掉怎么办
这是新手写整蛊脚本时最容易遇到的问题:写了一个无限循环,结果对方关不掉,只能强制关机。这种情况非常尴尬,而且可能会让对方真的生气。
避免这个问题的方法很简单:永远不要在整蛊脚本里写没有退出条件的无限循环。如果确实需要循环,一定要在循环体里加入检测退出条件的代码。比如检测某个按键是否被按下,或者检测某个窗口是否还存在。
Dim shell Set shell = CreateObject("WScript.Shell") Do While True If shell.AppActivate("关闭我") Then WScript.Quit End If Beep WScript.Sleep 1000 Loop这段代码会不断发出蜂鸣声,但同时检测是否存在一个标题为“关闭我”的窗口。如果对方打开了这样一个窗口,脚本就会自动退出。这样对方就有了一个明确的“逃生通道”。
5.2 脚本在别人电脑上跑不起来的原因
你写好的脚本在自己电脑上运行正常,发给朋友之后却没有任何反应,这种情况很常见。原因通常有以下几个:
第一个原因是文件扩展名被隐藏了。如果对方的电脑设置了“隐藏已知文件类型的扩展名”,你发过去的整蛊.vbs可能会显示成整蛊,对方双击的时候可能会被系统拦截,或者打开方式不对。
第二个原因是安全软件拦截。很多安全软件会把VBS脚本列为“可疑文件”,尤其是那些包含SendKeys、Run等操作的脚本。如果对方的电脑上安装了安全软件,脚本可能会被直接阻止运行。
第三个原因是系统版本差异。不同版本的Windows对VBS的支持程度不同。比如SAPI.SpVoice在Windows 7上工作正常,但在某些精简版的Windows 10上可能没有安装语音组件。
解决这些问题的方法是在发给朋友之前,先在自己的电脑上做一次完整的测试,并且告诉对方如何关闭安全软件的拦截。如果对方不放心,可以先把脚本内容用记事本打开给对方看,确认没有恶意代码之后再运行。
5.3 哪些整蛊手法绝对不能碰
有些整蛊手法看起来很有趣,但实际上已经越过了“玩笑”的边界,绝对不能使用。我列了一个黑名单,每次写脚本的时候都会对照检查:
- 删除或修改文件:任何删除、移动、重命名对方文件的操作都不行。即使你打算之后恢复,过程中也可能造成数据丢失。
- 修改系统设置:包括但不限于修改注册表、更改网络配置、调整显示设置、修改开机启动项。这些改动可能影响对方的正常使用。
- 锁死电脑:任何让电脑无法正常操作、无法关闭脚本、无法打开任务管理器的行为都不行。
- 伪装成系统警告:不要弹出看起来像真正的系统错误或安全警告的对话框,这可能会让对方误以为电脑真的出了问题,造成不必要的恐慌。
- 涉及隐私:不要读取、复制、发送对方的任何个人文件或信息。
提示:整蛊的底线是“对方知道真相后会觉得好笑,而不是觉得被冒犯”。如果你不确定某个脚本会不会让对方生气,那就不要用。
6. 从整蛊到正经:VBS还能做哪些有趣的事
写整蛊脚本的过程其实也是学习VBS的过程。当你掌握了MsgBox、SendKeys、FileSystemObject、SAPI.SpVoice这些对象的用法之后,你会发现同样的技术可以用在很多正经的场景里。
比如用SAPI.SpVoice做一个定时语音提醒工具:设定一个时间,到点之后电脑自动朗读“该休息了”或者“该开会了”。用SendKeys做一个自动填表工具:把常用的地址、电话、邮箱等信息预先写好,需要的时候一键输入。用FileSystemObject做一个文件整理工具:自动把桌面上的文件按类型分类到不同的文件夹里。
我自己就写过一个“下班提醒”脚本,每天下午六点自动弹出一个对话框,问我“今天的工作完成了吗?”,如果我点“是”,它就播放一段轻松的音乐;如果我点“否”,它就每隔十分钟再问一次。这个脚本的代码结构和整蛊脚本几乎一模一样,只是用途不同而已。
所以,如果你对VBS脚本产生了兴趣,不妨把整蛊脚本当作一个起点。先学会让电脑弹窗、说话、模拟按键,然后再把这些技能用到更有实际价值的地方。整蛊只是手段,理解脚本的工作原理才是真正的收获。
最后分享一个我在写脚本时养成的习惯:每写完一个脚本,先在自己的电脑上运行三遍。第一遍正常操作,看看效果是否符合预期;第二遍快速点击,看看有没有什么异常情况;第三遍故意不按套路操作,比如在脚本运行时切换窗口、按下其他按键,看看脚本会不会出错。这三遍测试下来,大部分问题都能提前发现。