☰
VBS整人脚本入门:从弹窗到语音的可恢复恶作剧代码
2026/10/15 8:11:22 网站建设 项目流程

简介:这是一份面向VBS脚本初学者与编程爱好者的整人代码合集,以docx文档形式收录了多种利用MsgBox消息框、WScript.Shell系统命令、Do...Loop无限循环、InputBox条件判断、SendKeys键盘模拟及WMPlayer媒体播放等技巧编写的恶作剧小程序,帮助读者在虚拟机等安全环境中理解VBS的自动化能力与潜在风险。资源包内共1个docx文件,约192KB,内容按代码片段分类整理,涵盖模拟系统警告、诱导关机重启、循环弹窗、强制刷新页面等典型玩法,并附有运行效果说明与安全警告提示。目前已有11802人学习下载,适合想了解脚本原理、练习代码阅读或进行安全演示的读者参考,同时提醒使用者尊重他人电脑使用权,将技术用于提升效率而非制造困扰。

1. 从“VBS整人代码大全”说起:脚本恶作剧的边界与落地

很多人第一次接触 VBS 都是被整蛊的:桌面突然弹出一个关不掉的对话框,或者光驱莫名其妙弹出来,又或者鼠标指针开始不受控制地乱飘。这些效果背后往往就是几行 Windows 自带的 VBScript 代码。VBScript 是 Windows 系统内置的脚本语言,双击.vbs文件就能由wscript.exe或cscript.exe直接解释执行,不需要装任何运行环境,这也是“VBS整人代码大全”这类内容长期流传的根本原因——门槛低到几乎为零。

但这里要先立一个边界:整人脚本和恶意程序之间只隔一层窗户纸。写个弹窗逗同事笑一下,和写个脚本把人家文件删了、把系统搞崩、把账号密码发出去,性质完全不同。本文只讨论前者——可控、可恢复、不破坏数据、不窃取隐私的轻量级恶作剧,并且所有代码都会给出“后悔药”,也就是怎么一键恢复。适合谁看?适合想了解 Windows 脚本能力的安全初学者、想给朋友开个无伤大雅玩笑的普通用户,以及需要向非技术人员演示“脚本能干什么”的培训场景。如果你打算拿这些代码去搞破坏,那后面的内容不适合你,也建议趁早打消这个念头。

2. 整人脚本的底层逻辑:为什么几行 VBS 就能让人抓狂

2.1 VBScript 在 Windows 里的执行链路

要理解整人脚本为什么有效,得先搞清楚一个.vbs文件从双击到产生效果中间发生了什么。Windows 注册表里.vbs默认关联到wscript.exe,这是一个图形化的脚本宿主,它加载vbscript.dll解释执行代码。脚本里能调用的东西远比一般人想象的多:WScript.Shell可以启动程序、读写注册表、操作环境变量;WScript.CreateObject能创建几乎任何已注册的 COM 对象,比如Shell.Application可以操作系统外壳,SAPI.SpVoice能让电脑开口说话。

这意味着 VBS 不需要任何第三方库,就能做到弹窗、发声、模拟按键、开关窗口、修改桌面壁纸这些事。整人脚本的“威力”正来源于此——它用的是系统本身就给你的能力,只是用在了让人不舒服的地方。

2.2 整人效果的三种基本类型

把市面上常见的 VBS 整人代码拆开看,效果无非三类。第一类是视觉干扰:无限弹窗、满屏文字、桌面图标消失、壁纸被换。第二类是听觉干扰:循环播放系统语音、突然发出怪声。第三类是交互干扰:模拟键盘输入、锁定鼠标、让窗口不停闪烁。理解这三类之后,你就能自己组合出变种,而不是只会复制粘贴别人写好的代码。

下面是一个最经典的无限弹窗脚本,我把它拆开讲:

' 无限弹窗基础版 Do MsgBox "你中招了!", 48, "提示" Loop

Do...Loop是一个无限循环,MsgBox弹出对话框。第二个参数48是图标类型,表示警告图标;第三个参数是标题栏文字。这段代码一旦运行,对话框关掉一个立刻弹下一个,因为循环永远不会结束。要停掉它,只能打开任务管理器结束wscript.exe进程。这就是为什么整人脚本必须配“后悔药”——普通用户根本不知道怎么终止。

2.3 让脚本“可控”的三个设计原则

写整人脚本和写正常程序一样,要考虑可控性。我一般坚持三个原则:有次数上限、有退出条件、有恢复手段。比如把上面的无限循环改成弹 10 次就停:

' 有限次数弹窗,弹完自动结束 Dim i For i = 1 To 10 MsgBox "第 " & i & " 次提醒", 64, "提示" Next

For...Next循环从 1 到 10,&是字符串拼接。这样对方被烦到 10 次之后脚本自己就退了,不会陷入必须杀进程的尴尬。参数上,64是信息图标,比48警告图标温和一些。实际使用时把10改成3到5更适合玩笑场景。

3. 从零写一个可恢复的整人脚本:弹窗、语音、桌面三件套

3.1 环境准备与运行方式

不需要安装任何东西,Windows 自带。新建一个文本文件,把扩展名从.txt改成.vbs,编码建议用 ANSI 或 UTF-8 带 BOM,否则中文可能乱码。双击运行,或者右键选择用cscript.exe运行可以在命令行看到输出。调试阶段我强烈建议用cscript,因为wscript出错时只弹一个模糊的对话框,而cscript会把错误行号和原因打在控制台里。

# 在命令行里运行,方便看报错 cscript //nologo prank.vbs

//nologo是去掉版权横幅,让输出干净。这个习惯能帮你省下大量排查时间。

3.2 弹窗 + 语音组合脚本

下面这个脚本会先弹几个对话框,然后用系统语音念一句话。语音功能依赖SAPI.SpVoice,绝大多数 Windows 都自带。

' 弹窗加语音整人脚本 Dim shell, voice, i Set shell = CreateObject("WScript.Shell") Set voice = CreateObject("SAPI.SpVoice") ' 先弹三个对话框 For i = 1 To 3 MsgBox "系统检测到异常,请点击确定继续", 48, "系统提示" Next ' 再用语音念出来 voice.Speak "你的电脑已经被我控制了" voice.Speak "开玩笑的,别紧张" ' 最后弹一个说明框,告诉对方怎么恢复 MsgBox "这只是个玩笑脚本,没有修改任何文件。", 64, "说明"

CreateObject创建 COM 对象,SAPI.SpVoice的Speak方法把文字转成语音。注意语音是异步还是同步取决于Speak的第二个参数,默认是同步,也就是念完才继续。如果你希望弹窗和语音同时进行,需要把voice.Speak放进单独的进程,但对整人场景来说没必要。

3.3 桌面壁纸替换与一键恢复

换壁纸是视觉干扰里比较温和的一种,因为改回来很容易。核心是修改注册表里的壁纸路径,然后调用系统刷新。

' 替换壁纸并记录原值,方便恢复 Dim shell, fso, regPath, oldWallpaper Set shell = CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") regPath = "HKCU\Control Panel\Desktop\Wallpaper" ' 读取原壁纸路径 oldWallpaper = shell.RegRead(regPath) ' 把原值写到一个备份文件里 Dim backupFile backupFile = shell.ExpandEnvironmentStrings("%TEMP%") & "\wallpaper_backup.txt" Dim f Set f = fso.CreateTextFile(backupFile, True) f.WriteLine oldWallpaper f.Close ' 换成一张指定的图片(这里假设图片放在 C:\temp\prank.jpg) shell.RegWrite regPath, "C:\temp\prank.jpg", "REG_SZ" ' 刷新桌面 shell.Run "RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters", 0, False MsgBox "壁纸已更换,原壁纸路径已备份到 " & backupFile, 64, "提示"

RegRead和RegWrite分别读写注册表,HKCU是当前用户配置,不需要管理员权限。ExpandEnvironmentStrings把%TEMP%展开成实际路径。RUNDLL32那行是让系统重新加载用户参数,壁纸才会立刻变。恢复的时候只要把备份文件里的路径重新写回去就行:

' 恢复壁纸 Dim shell, fso, backupFile, oldPath Set shell = CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") backupFile = shell.ExpandEnvironmentStrings("%TEMP%") & "\wallpaper_backup.txt" If fso.FileExists(backupFile) Then Dim f Set f = fso.OpenTextFile(backupFile, 1) oldPath = f.ReadLine f.Close shell.RegWrite "HKCU\Control Panel\Desktop\Wallpaper", oldPath, "REG_SZ" shell.Run "RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters", 0, False MsgBox "壁纸已恢复", 64, "提示" Else MsgBox "找不到备份文件,请手动设置壁纸", 48, "提示" End If

这个“先备份再修改”的模式应该成为你写任何整人脚本的默认习惯。没有备份的修改就是耍流氓。

4. 避坑与排查:整人脚本翻车的五种典型情况

4.1 脚本双击没反应,或者一闪而过

现象:双击.vbs文件,屏幕闪一下什么都没发生。原因:最常见的是代码里有语法错误,wscript遇到错误直接退出,不弹提示。另一个可能是文件关联被改过,.vbs不再指向wscript.exe。解决:用cscript //nologo 文件名.vbs在命令行运行,错误信息会直接打出来。如果是关联问题,在命令行执行assoc .vbs=VBSFile和ftype VBSFile=%SystemRoot%\System32\WScript.exe "%1" %*恢复。

4.2 中文变成乱码

现象:弹窗里的中文显示成问号或方块。原因:文件保存编码和脚本引擎预期不一致。wscript默认按 ANSI 读取,如果你存成 UTF-8 无 BOM,中文就会乱。解决:用记事本“另存为”时编码选 ANSI,或者选 UTF-8 带 BOM。更稳妥的做法是脚本开头不写中文,把提示文字改成英文,或者用ChrW函数拼中文,但那样可读性差,不推荐。

4.3 脚本关不掉,任务管理器也找不到

现象:弹窗无限出现,任务管理器里结束wscript.exe之后还在弹。原因:可能同时运行了多个脚本实例,或者脚本启动了子进程。解决:在任务管理器里按名称排序,把所有wscript.exe和cscript.exe都结束掉。如果还不行,检查启动文件夹和注册表HKCU\Software\Microsoft\Windows\CurrentVersion\Run里有没有被写入自启动项。这也是为什么整人脚本绝对不要写自启动——那已经从整人变成恶意软件了。

4.4 语音功能报错“ActiveX 部件不能创建对象”

现象:运行到CreateObject("SAPI.SpVoice")时报错。原因:系统精简版或者某些语言版本没有安装语音组件。解决:在“设置”里检查语音包是否安装,或者干脆去掉语音部分,只保留弹窗。写整人脚本要假设对方系统是残缺的,功能越少越可靠。

4.5 杀毒软件直接拦截

现象:脚本刚保存就被杀毒软件删除或隔离。原因:整人脚本的行为特征(无限循环、修改注册表、模拟输入)和恶意脚本高度重合,启发式引擎会误报。解决:这是正常现象,不要试图绕过杀毒软件。如果只是自己测试,把脚本目录加入排除项即可,但绝对不要教别人关闭杀毒软件来运行你的脚本。这个坑没有技术上的“后悔药”,只有行为上的边界。

5. 进阶技巧:用 VBS 做“可交互”的整人体验

前面讲的都是单向输出——弹窗、发声、换壁纸,对方只能被动接受。真正让人印象深刻的整人脚本会“假装有智能”,根据对方的操作做出不同反应。这里给一个具体技巧:用InputBox获取输入,然后根据输入内容决定下一步,制造一种“它在跟我对话”的错觉。

' 假装有智能的问答整人脚本 Dim answer, count count = 0 Do answer = InputBox("请输入'我错了'来结束程序:", "系统提示") If IsEmpty(answer) Then ' 用户点了取消或关闭 MsgBox "你选择了逃避,程序将继续。", 48, "提示" ElseIf LCase(Trim(answer)) = "我错了" Then MsgBox "态度不错,这次放过你。", 64, "提示" Exit Do Else count = count + 1 If count >= 3 Then MsgBox "你已经试了 " & count & " 次,提示:输入'我错了'。", 48, "提示" Else MsgBox "输入不对,再想想。", 48, "提示" End If End If Loop

InputBox返回用户输入的文字,IsEmpty判断是否点了取消,LCase转小写,Trim去首尾空格,这样“我错了”和“ 我错了 ”都能识别。Exit Do跳出循环结束脚本。这个脚本的整人点在于:对方以为随便输点什么就能关掉,但实际上只有特定答案才有效,而提示又给得模棱两可,让人又气又笑。

参数上,InputBox的第二个参数是标题栏,第一个参数是提示文字。你可以把提示文字改得更“官方”一些,比如“请输入管理员密码以继续”,但注意不要真的诱导对方输入密码——那是钓鱼,不是整人。这个边界必须守住。

再进阶一点,可以用WScript.Sleep控制节奏,让脚本在弹窗之间停顿几秒,制造“系统在思考”的假象:

WScript.Sleep 3000 ' 暂停 3000 毫秒,也就是 3 秒 MsgBox "正在分析...", 64, "系统" WScript.Sleep 2000 MsgBox "分析完成,你被整了。", 64, "系统"

WScript.Sleep的单位是毫秒,3000就是 3 秒。这个函数在wscript下有效,在cscript下也有效。注意不要睡太久,超过 10 秒对方可能以为死机了直接杀进程,效果反而不好。

最后说一个我自己的习惯:每次写完一个整人脚本,我都会先在自己的虚拟机或者备用账户里跑一遍,确认三件事——能不能正常结束、有没有修改不该修改的东西、恢复步骤是不是真的有效。这个习惯让我避免了好几次尴尬,比如有一次备份文件写到了对方没权限的目录,结果恢复脚本读不到备份,差点下不来台。整人脚本的乐趣建立在“对方知道这是玩笑”的基础上,一旦越界,玩笑就不好笑了。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询