VBScript脚本编程:从整蛊到自动化,Windows脚本入门指南 1. 项目概述从“整蛊”到脚本启蒙的VBS世界说起Vbs很多老一代的电脑玩家尤其是经历过Windows XP到Windows 7时代的朋友嘴角可能会不自觉地泛起一丝“坏笑”。在那个网络娱乐尚不如今日这般丰富的年代一段段用记事本写就的、后缀为.vbs的脚本文件承载了无数人的“整蛊”回忆。从让电脑反复弹出对话框到模拟鼠标乱动、键盘失灵再到制造一些无伤大雅的“系统假象”VBS脚本因其简单易学、无需编译、双击即运行的特点成为了早期电脑爱好者们“技术娱乐”的首选工具。今天我想和大家分享的正是我多年来收集、整理、甚至自己动手编写和改良的VBS脚本“宝库”。这不仅仅是一份“整人代码大集合”我更愿意把它看作是一个窥探Windows脚本自动化世界的有趣入口一个从恶作剧出发最终通向实用技能学习的桥梁。VBS全称VBScript是微软开发的一种轻量级脚本语言它内置于Windows系统之中通过Windows Script HostWSH来解析执行。它的语法简单与Visual Basic一脉相承对于没有任何编程基础的人来说也能在几分钟内看懂并修改一些简单的脚本。我收集这些代码的初衷确实始于年少时的“顽皮”但随着时间的推移我逐渐发现这些看似“调皮”的脚本背后隐藏着文件操作、系统信息获取、用户交互、进程控制等非常实用的自动化能力。比如一个能自动备份文件的脚本其核心循环和文件操作逻辑可能就源于某个让U盘文件“神秘消失”的整蛊程序。因此这份集合的价值远不止于博人一笑。它适合所有对电脑自动化感兴趣的新手作为入门阶梯也适合有经验的开发者从中汲取一些快速实现特定功能的灵感片段。2. 核心思路与代码分类解析我的这个代码库并非杂乱无章的堆砌。经过多年的整理我大致将其分为了几个核心类别每一类都代表了VBScript在某个方向上的典型应用。理解这个分类有助于你快速找到所需也能更系统地认识VBS的能力边界。2.1 交互与提示类最基础的“人机对话”这类脚本的核心是利用MsgBox和InputBox函数与用户进行简单的图形化交互。它们是所有VBS入门者的第一课也是很多复杂脚本的组成部分。MsgBox函数用于弹出信息提示框。你可以控制其显示的图标信息、警告、错误等和按钮确定、是否、重试取消等。一个经典的整蛊就是循环弹出无法轻易关闭的对话框。 示例一个“烦人”的循环提示框 do msg MsgBox(点确定继续弹窗, vbOKOnly vbExclamation, 温馨提示) loop while msg vbOK 只要用户点击“确定”就继续循环注意在实际“整蛊”中这种无限循环会严重干扰正常使用。更“狡猾”的做法可能是将对话框标题改为“系统警告”内容模仿系统提示增加迷惑性。但请务必在可控的测试环境如虚拟机中运行并知晓如何通过任务管理器结束wscript.exe或cscript.exe进程来终止脚本。InputBox函数用于接收用户的简单文本输入。可以设计一些互动式的小游戏或验证恶作剧。 示例一个简单的“密码”验证恶作剧 password InputBox(请输入管理员密码以继续, 系统安全验证) If password 123456 Then 这里可以设置一个假密码 MsgBox 验证通过, vbInformation Else MsgBox 密码错误系统将在30秒后锁定..., vbCritical 可以在这里加入倒计时或其它吓唬人的代码但并非真正锁定 End If2.2 系统模拟与控制类制造“假象”这类脚本通过调用Windows Shell对象或WMI模拟一些系统行为制造故障假象是整蛊脚本的“主力军”。模拟键盘输入使用WScript.Shell对象的SendKeys方法。可以模拟按下任意键包括组合键如CtrlAltDelete。Set WshShell WScript.CreateObject(WScript.Shell) 示例模拟连续按退格键造成正在输入的文字被删除的假象 For i 1 To 50 WshShell.SendKeys {BS} {BS} 代表退格键 WScript.Sleep 100 延迟100毫秒模拟人手操作 Next实操心得SendKeys的威力很大务必小心使用。在脚本运行前最好保存所有工作。一个常见的防御方法是快速连续按几次Esc键有时可以中断SendKeys的输入流。模拟鼠标移动VBS本身没有直接控制鼠标的API但可以通过调用Windows API或创建特殊对象实现。一种经典方法是利用WScript.Shell运行一段临时的JScript代码或者使用MoveTo方法需要特定对象模型并非所有环境支持。更常见的“整蛊”是打开画图板并让“画笔”自己动起来这其实是结合了启动程序和SendKeys模拟方向键。控制光驱与音量控制光驱弹开和关闭是经典整蛊。Set oWMP CreateObject(WMPlayer.OCX.7) Set colCDROMs oWMP.cdromCollection If colCDROMs.Count 1 Then For i 0 to colCDROMs.Count - 1 colCDROMs.Item(i).Eject() 弹开光驱 WScript.Sleep 2000 等待2秒 colCDROMs.Item(i).Eject() 再次执行关闭光驱如果支持 Next End If注意事项现代电脑很多已不带光驱此脚本可能无效。它利用了Windows Media Player的控件展示了VBS如何通过COM组件与系统深度交互。修改系统设置假象例如通过修改注册表需管理员权限或桌面壁纸或者更简单地创建一个假的“屏幕分辨率更改”提示框。但必须强烈警告随意修改注册表风险极高可能导致系统不稳定。在整蛊脚本中应仅限于读取或制造假象避免真实修改。2.3 文件与桌面操作类无中生有与移形换影这类脚本操作文件和桌面元素制造出文件“丢失”、桌面“混乱”的效果。创建、删除、移动文件/文件夹使用FileSystemObject对象。Set fso CreateObject(Scripting.FileSystemObject) 示例在桌面创建一堆莫名其妙的文件 desktopPath WScript.Shell.SpecialFolders(Desktop) For i 1 To 10 fso.CreateTextFile(desktopPath \神秘文件_ i .txt) Next MsgBox 你的桌面被神秘文件占领了, vbInformation避坑技巧在涉及文件删除(DeleteFile)或移动(MoveFile)的脚本中务必先进行备份或者使用fso.FileExists检查文件是否存在。一个经典的“吓人”脚本是“隐藏”桌面所有图标其实是移动到了另一个文件夹再配合一个“恢复”脚本。修改文件属性例如将文件设置为“隐藏”或“只读”。Set file fso.GetFile(C:\path\to\your\file.txt) file.Attributes file.Attributes 2 2 表示增加隐藏属性注意在文件资源管理器中设置“显示隐藏的文件”即可看到被隐藏的文件。这是一个可逆的操作。操作桌面图标与任务栏直接操作比较困难但可以通过SendKeys发送WinD显示桌面、F5刷新等或者结合启动cmd执行taskkill命令来结束资源管理器进程explorer.exe造成桌面和任务栏消失的假象再重新启动它。 警告此操作会暂时关闭桌面和开始菜单所有打开的文件管理器窗口也会关闭 WshShell.Run taskkill /f /im explorer.exe, 0, True MsgBox 桌面消失了别慌..., vbCritical WScript.Sleep 3000 WshShell.Run explorer.exe, 1, False MsgBox 看它又回来了, vbInformation2.4 网络与信息获取类一点“高级”趣味这类脚本会进行一些简单的网络操作或获取系统信息用于制作更“智能”或更具欺骗性的效果。获取计算机名、用户名Set WshNetwork WScript.CreateObject(WScript.Network) userName WshNetwork.UserName computerName WshNetwork.ComputerName MsgBox 当前用户: userName vbCrLf 计算机名: computerName, vbInformation可以用来制作“个性化”的整蛊消息例如“警告[计算机名]上的用户[用户名]检测到非法操作”访问特定网站使用Shell对象的Run方法打开浏览器。WshShell.Run https://www.example.com, 1, False可以结合循环和随机延迟间歇性地打开某个网页比如一个吓人的图片制造困扰。读取剪贴板内容这涉及到更高级的COM组件调用展示了VBS的潜力但必须注意隐私边界此类代码仅用于学习原理切勿用于侵犯他人隐私。2.5 音效与视觉类增强“沉浸感”单纯的文字提示不够生动加入声音和简单的视觉特效整蛊效果倍增。播放声音可以播放系统提示音或者调用媒体播放器播放指定的音频文件如一段恐怖笑声或系统错误音效。 播放系统感叹号声音 WshShell.Run cmd /c echo ^G, 0, True ^G 是ASCII的Bell字符在CMD中通过CtrlG输入 或者使用更复杂的方法播放WAV文件 Set sound CreateObject(WMPlayer.OCX.7) sound.URL C:\Windows\Media\notify.wav sound.Controls.play Do While sound.playState 1 等待播放停止 WScript.Sleep 100 Loop修改窗口外观虽然VBS不能直接创建复杂GUI但可以通过MsgBox设置不同的图标错误、警告、信息等或者通过WScript.Shell的Popup方法创建更定制的提示框可以设置超时自动关闭。3. 经典整蛊脚本实例深度剖析与实现了解了分类我们来看几个经过时间考验的“经典之作”。我会详细拆解其代码并分享如何安全地测试、修改以及最重要的——如何“防御”或终止它们。3.1 实例一“无限弹窗风暴”这是最古老也最直接的整蛊。代码实现 无限弹窗.vbs Option Explicit Dim WshShell, msg Set WshShell WScript.CreateObject(WScript.Shell) Do 使用vbSystemModal参数使窗口保持在最前 msg WshShell.Popup(你的电脑好像出了点问题 vbCrLf 点击确定尝试修复..., 0, 系统警告, vbOKCancel vbCritical vbSystemModal) 即使用户点击了取消我们也将其视为确定继续循环 Loop While True 这是一个真正的无限循环技术拆解WScript.CreateObject(WScript.Shell”)创建WSH Shell对象它是很多系统交互操作的基础。WshShell.Popup比MsgBox更灵活的对话框函数可以设置标题、按钮、图标和超时时间。这里我们设置了vbSystemModal让窗口模态化强制用户处理。Do ... Loop While True一个条件永远为真的循环构成了“无限”的核心。如何终止这是关键。因为窗口会抢占焦点你很难去操作任务栏。正确的方法是快速连续按AltF4尝试关闭当前活动窗口。如果运气好焦点在弹窗上可以关闭一个但下一个会立刻弹出。启动任务管理器按下CtrlShiftEsc或CtrlAltDelete选择启动任务管理器。结束进程在任务管理器的“进程”或“详细信息”选项卡中找到wscript.exe或cscript.exe进程选中并点击“结束任务”。这是最根本的解决方法。安全修改与学习你可以将其改造成一个“休息提醒器”Dim WshShell, i Set WshShell WScript.CreateObject(WScript.Shell) For i 1 To 3 只弹3次 WshShell.Popup 已经工作1小时了该起来活动一下啦, 10, 健康提醒, vbInformation 10秒后自动关闭 WScript.Sleep(3600000) 休眠1小时3600000毫秒 Next MsgBox 今日提醒结束。, vbInformation看同样的技术从恶作剧变成了实用工具。3.2 实例二“鬼畜打字机与光驱舞者”这个脚本组合了键盘输入和硬件控制效果很滑稽。代码实现 鬼畜光驱.vbs Dim WshShell, oWMP, colCDROMs, i, j Set WshShell WScript.CreateObject(WScript.Shell) Set oWMP CreateObject(WMPlayer.OCX.7) Set colCDROMs oWMP.cdromCollection 第一部分让光驱跳段“舞” If colCDROMs.Count 1 Then For j 1 To 5 循环5次 For i 0 To colCDROMs.Count - 1 colCDROMs.Item(i).Eject() Next WScript.Sleep(500) 等待半秒 For i 0 To colCDROMs.Count - 1 colCDROMs.Item(i).Eject() 再次执行若已弹出则关闭若已关闭则弹出 Next WScript.Sleep(500) Next End If 第二部分在记事本里“鬼畜”打字 WshShell.Run notepad.exe, 1, False WScript.Sleep(500) 等待记事本打开 WshShell.AppActivate 无标题 - 记事本 激活记事本窗口 For i 1 To 100 WshShell.SendKeys 这是一段自动输入的鬼畜文字... WScript.Sleep(50) 每输入一段延迟50毫秒 Next技术拆解CreateObject(WMPlayer.OCX.7”)创建Windows Media Player的COM对象通过其cdromCollection来访问光驱。.Eject()控制光驱弹开或关闭的方法。在同一状态上调用两次会执行相反操作。WshShell.AppActivate通过窗口标题将输入焦点切换到指定程序窗口确保SendKeys的输入能发送到正确的地方。WScript.Sleep让脚本暂停指定的毫秒数用于控制节奏。潜在问题与适配现代电脑无光驱脚本第一部分会静默失败因为colCDROMs.Count为0但不影响第二部分执行。可以增加一个判断如果无光驱则跳过或给出提示。窗口标题匹配AppActivate依赖精确的窗口标题。如果记事本已保存为其他名字或者系统语言非中文需要修改标题字符串。更稳健的做法是运行记事本后通过WshShell.Exec获取其进程对象。3.3 实例三“桌面图标隐身术”这个脚本制造了桌面图标“全部消失”的恐慌实则只是被移动了。代码实现 桌面图标消失术.vbs Dim fso, WshShell, desktopPath, hideFolder Set fso CreateObject(Scripting.FileSystemObject) Set WshShell WScript.CreateObject(WScript.Shell) desktopPath WshShell.SpecialFolders(Desktop) hideFolder desktopPath \HiddenIconsBackup_ Year(Now) Month(Now) Day(Now) 用日期创建唯一备份文件夹名 If Not fso.FolderExists(hideFolder) Then fso.CreateFolder(hideFolder) End If 移动桌面所有快捷方式.lnk和普通文件到备份文件夹排除系统文件夹如“我的电脑”等 注意这是一个简化示例实际桌面可能包含文件夹、非.lnk文件等移动所有项目需更复杂的遍历和判断。 Dim folder, file, item Set folder fso.GetFolder(desktopPath) For Each item In folder.Files If LCase(fso.GetExtensionName(item.Name)) lnk Then 主要移动快捷方式 item.Move(hideFolder \) End If Next MsgBox 桌面图标已神秘消失若要恢复请运行‘恢复桌面图标.vbs’。, vbInformation, 系统提示 配套的恢复脚本 恢复桌面图标.vbs Dim fso2, WshShell2, desktopPath2, hideFolder2 Set fso2 CreateObject(Scripting.FileSystemObject) Set WshShell2 WScript.CreateObject(WScript.Shell) desktopPath2 WshShell2.SpecialFolders(Desktop) 这里需要知道备份文件夹名可以写死或通过某种方式记录 hideFolder2 desktopPath2 \HiddenIconsBackup_20231027 示例 If fso2.FolderExists(hideFolder2) Then Dim folder2, item2 Set folder2 fso2.GetFolder(hideFolder2) For Each item2 In folder2.Files item2.Move(desktopPath2 \) Next 可选删除空备份文件夹 folder2.Delete MsgBox 桌面图标已恢复, vbInformation Else MsgBox 未找到备份文件夹无法恢复。, vbExclamation End If深度解析与注意事项WshShell.SpecialFolders(Desktop”)这是获取当前用户桌面路径的正确方法兼容不同系统版本和用户配置。安全风险此脚本直接移动文件。必须确保备份文件夹名唯一防止覆盖。有配套的、可靠的恢复脚本。最好只移动.lnk快捷方式文件因为移动实际文档或文件夹可能导致数据路径错误。更安全的做法是只操作快捷方式或者创建一个脚本来“隐藏/显示”桌面图标通过修改注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced下的HideIcons键值但需要刷新桌面。恢复机制恢复脚本必须和隐藏脚本配对使用且备份路径需要能传递。一个更优的设计是让隐藏脚本在桌面上创建一个临时的、包含恢复指令的文本文件或者将备份路径写入注册表的一个特定位置。4. 从整蛊到实用VBS脚本的正面应用玩转这些整蛊脚本后你会发现VBScript的能力完全可以用于正经的自动化任务。以下是一些方向自动化安装与配置编写脚本自动点击安装程序的“下一步”填入序列号或配置网络打印机。WshShell.Run software_setup.exe WScript.Sleep 2000 WshShell.SendKeys {ENTER} 下一步 WScript.Sleep 1000 WshShell.SendKeys I accept the agreement{ENTER} 接受协议 ... 后续步骤批量文件处理重命名一系列文件转换编码或从CSV文件中读取数据并生成报告。Set fso CreateObject(Scripting.FileSystemObject) Set folder fso.GetFolder(C:\MyDocs) For Each file In folder.Files If InStr(file.Name, old_) 0 Then newName Replace(file.Name, old_, new_) file.Move(folder.Path \ newName) End If Next系统信息监控与报告定期收集磁盘空间、内存使用情况并通过邮件发送报告需配置邮件组件。简单的客户端管理在局域网内结合组策略或远程执行可以批量运行VBS脚本进行一些简单的客户端设置。5. 安全警告、伦理边界与最佳实践在分享和运行任何脚本尤其是从网络获取的脚本时必须牢记以下几点绝对不要运行来源不明的脚本.vbs文件可以直接执行系统命令。恶意脚本可以格式化硬盘、删除文件、窃取信息。在运行前务必用记事本打开检查代码。在虚拟机或沙盒环境中测试这是最安全的做法。VMware、VirtualBox或Windows Sandbox都是理想的选择。理解代码再运行即使是我分享的代码也建议你逐行阅读明白每一条语句的作用。这是学习的最佳途径也是安全的前提。尊重他人遵守法律整蛊脚本仅适用于事先知情并同意的朋友之间或在完全由自己控制的测试环境中。用于骚扰、破坏他人计算机或网络是非法且不道德的行为。知晓如何终止永远记住终止VBS脚本运行的方法打开任务管理器CtrlShiftEsc找到并结束wscript.exe或cscript.exe进程。小心“一键启动”陷阱网络上所谓的“vbs一键启动”合集可能打包了多个脚本其中混有危险代码。解压后务必单独审查每个文件。“电脑防锁屏vbs”的真相一些VBS脚本通过模拟键盘或鼠标操作如每隔一段时间按一下Shift键来防止系统因空闲而锁屏。这在某些需要保持屏幕常亮的情景下似乎有用但它并非真正的“防锁屏”只是欺骗系统认为用户仍在操作。可能违反公司或组织的计算机使用政策。存在安全风险保持未锁屏的工作站可能导致信息泄露。更好的方法应在系统电源设置或组策略中调整锁屏时间或使用官方认可的演示工具。6. 常见问题与故障排查实录在实际编写和运行VBS脚本时你可能会遇到以下问题问题1双击.vbs文件后脚本一闪而过没有任何效果。可能原因脚本中有语法错误导致运行时立即崩溃退出。排查方法在命令行中运行打开CMD切换到脚本目录输入cscript //nologo 你的脚本.vbs。cscript会在命令行中显示错误信息比默认的wscript图形宿主更利于调试。在脚本开头添加On Error Resume Next可以跳过错误继续执行不推荐用于调试但更好的方法是使用On Error Goto 0并配合Err对象输出错误信息。使用记事本仔细检查代码常见错误有拼写错误如Msgbox、缺少引号、括号不匹配、对象创建失败如路径错误。问题2SendKeys没有把内容发送到预期的窗口。可能原因脚本运行时目标窗口尚未获得焦点或者窗口标题不匹配。解决方案在SendKeys前使用WScript.Sleep给予足够的时间让目标窗口启动并激活。使用WshShell.AppActivate通过窗口标题或进程ID来激活目标窗口。确保标题字符串完全匹配包括空格和标点。对于后台发送可以探索使用WshShell.SendKeys配合特定的应用程序对象模型但这更复杂。问题3脚本在别人的电脑上运行不正常。可能原因系统路径不同你的脚本中使用了绝对路径如C:\MyFiles\...。权限不足某些操作如写入系统目录、修改注册表需要管理员权限。系统组件缺失脚本依赖的特定COM组件如老版本Media Player控件在新系统上可能不存在或版本不同。解决方案使用相对路径或特殊文件夹用WshShell.SpecialFolders(Desktop)代替C:\Users\...\Desktop。检查权限对于需要高权限的操作可以提示用户以管理员身份运行或者在脚本开头检查权限。错误处理在创建对象或访问资源时使用On Error Resume Next判断是否成功并给出友好的提示信息。问题4如何让VBS脚本在后台静默运行方法将脚本文件后缀从.vbs改为.vbeVBScript Encoded。.vbe是编码后的脚本无法直接用记事本查看且默认使用cscript.exe在后台运行没有图形界面。注意这主要用于保护代码虽然编码很弱和静默运行但不利于调试。最后我想说的是这整箱的“整蛊代码”对我而言早已超越了其最初的娱乐属性。它们是我学习Windows自动化和脚本编程的起点每一个闪烁的光驱、每一个弹出的窗口背后都是一行行对系统交互逻辑的探索。我希望你在莞尔一笑之余也能看到VBScript这门看似老旧的语言里蕴含的自动化力量。从读懂这些代码开始尝试修改它们最终创造出能真正为你提高效率的实用工具这才是技术爱好者最大的乐趣所在。记住能力越大责任越大始终在合法合规、尊重他人的前提下使用你的技能。