vbs满屏错误弹窗代码
vbs满屏错误弹窗代码
双击一个.vbs文件,屏错屏幕突然像爆米花一样炸开——几十个错误弹窗同时蹦出来,误弹点掉一个又冒出三个,窗代鼠标点得再快也赶不上弹窗生成的满码速度。这不是屏错病毒,就是误弹一段十几行的VBScript。我最早是窗代在一个老外的恶作剧论坛上看到的,原帖标题叫“Annoy your friends”,满码下面跟了几百条回复,屏错有人把代码改成了弹窗里显示自定义文字,误弹有人加上了声音,窗代还有人改成弹窗位置随机偏移,满码让整个屏幕看起来像得了帕金森。屏错
核心逻辑简单到离谱:一个Do...Loop死循环,误弹里面套一个MsgBox。但直接这么写,弹窗会一个接一个排队出现,你点掉一个才弹下一个,不够“满屏”。真正让人抓狂的版本用的是WScript.Shell的Popup方法,配合Execute或者Run来异步启动多个进程。每个进程独立弹窗,互不干扰,于是你点掉一个,另外五个还在那儿等着。更狠的是把弹窗超时设成0,意味着它永远不会自己消失,只能手动关。
Set shell = CreateObject("WScript.Shell") Do shell.Popup "你的电脑已经中毒了", 0, "错误", 16 Loop 上面这段就是最基础的“满屏”版本。Popup的第二个参数0表示无限等待,第四个参数16是红色叉号图标。你运行它,第一个弹窗出现,点掉,循环立刻再弹一个。但这样其实只算“无限弹窗”,还不是“满屏”。要满屏,得用多线程——VBS本身不支持多线程,但可以用WScript.Shell的Exec方法启动多个wscript.exe进程,每个进程跑同样的弹窗循环。我试过同时启动20个,任务管理器里瞬间多出20个wscript.exe,CPU占用直接飙到70%以上,弹窗像瀑布一样从屏幕左上角倾泻下来。
有人把弹窗文案改成了“你被耍了”“关不掉吧”“哈哈哈”,还有人加了Int((100 * Rnd) + 1)让弹窗位置随机偏移,每个窗口出现在屏幕不同角落,视觉上更混乱。更损的版本会在弹窗里再调用一次WScript.Shell,形成递归——你关掉一个,它内部又启动两个新的。这种指数级增长,几秒钟就能让系统卡死。
从技术角度看,这段代码能生效,是因为Windows的MsgBox和Popup都是模态窗口,会阻塞当前线程。但VBS的WScript.Shell对象在调用Popup时,如果超时参数为0,它不会释放控制权,直到用户点击。而多个进程同时调用,就绕过了单线程的限制。说白了,就是利用操作系统对多进程弹窗没有全局限制这个漏洞。微软后来在Windows 10的某个版本里加了限制,同一时间最多允许一定数量的模态窗口,但VBS脚本依然能钻空子。
我见过最绝的变种,是把弹窗和SendKeys结合。弹窗出现的同时,脚本模拟键盘按下Enter,而Enter默认选中弹窗的“确定”按钮。于是弹窗刚出现就被自动关掉,但循环立刻再弹一个,屏幕上就是无数弹窗一闪而过,像频闪灯一样。这种版本对眼睛的伤害比卡死系统还大。
如果你真想玩,建议在虚拟机里跑。VMware或者VirtualBox都行,快照一打,随便折腾。关掉虚拟机,宿主机毫发无伤。另外,别把.vbs文件发给不懂电脑的人,尤其是那种“双击看看”的口气——对方可能真的会点,然后你就得远程指导他进任务管理器结束进程。我有个朋友就这么干过,结果他爸以为电脑中了勒索病毒,差点把电脑砸了。
代码本身没有恶意,但效果足够让人血压升高。写这篇文章不是鼓励恶作剧,只是拆解一下这个流传了二十年的老把戏。下次再看到有人发“满屏弹窗代码”,你至少知道它怎么跑起来的,以及怎么在十秒内关掉它——Ctrl+Shift+Esc,找到所有wscript.exe,右键结束任务树。动作要快。









