一个用 Windows PowerShell 编写的自动打铃脚本。按预设的作息时间表,自动播放上课铃、预备铃与提醒音;最后一节课结束后弹出倒计时关机提示。全程后台静默运行,不需要人盯着。
最初是为了让电脑在正确的时刻「响铃」而写的小工具,适合教室、自习室、家庭作息提醒等场景。
- 两套作息时间表,按星期启用(工作日 / 周末可各用一套)
- 三种声音
ring.wav— 上课铃warning bell\— 预备铃(从文件夹里随机挑一首,一轮内不重复,全部播完自动重置)wake.wav+announcement.wav— 午休唤醒
- 预备铃后自动补铃:每次预备铃 / 唤醒时刻之后 3 分钟,自动再响一次上课铃
- 低占用动态休眠:按距离下一次铃声的时间自适应休眠(40 分钟 / 1 分钟 / 1 秒 / 1 毫秒),几乎不占 CPU
- 下课自动关机:当天最后一声铃响完,弹出 30 秒倒计时关机窗口,可点「取消」撤销
- 防多开:全局互斥锁,重复运行不会响两遍
- 静默运行:
run.vbs以隐藏窗口启动,不闪黑框
| 文件 | 作用 |
|---|---|
ring.ps1 |
主脚本(时间表、铃声逻辑都在这里) |
schedule.txt |
每日启用开关与作息表选择 |
run.vbs |
启动脚本(隐藏窗口) |
stop.vbs |
停止脚本 |
test.vbs |
测试模式(不会真正关机) |
ring.wav / announcement.wav / wake.wav |
铃声素材 |
warning bell\ |
预备铃素材(可放任意多个 .wav) |
warning_played.txt |
运行时自动生成,记录预备铃播放历史(已在 .gitignore 中忽略) |
- Windows 10 / 11
- 系统自带的 Windows PowerShell 5.1 与 WScript —— 无需额外安装
把音频放到对应位置(文件名保持不变,脚本按文件名调用):
ring.wav、announcement.wav、wake.wav放在脚本根目录- 预备铃素材放进
warning bell\文件夹,可放任意数量的.wav,脚本会随机播放
⚠️ 本仓库默认不包含音频文件(体积大,且多数音乐受版权保护)。请自行放入无版权音频或自己录制。
编辑 schedule.txt,每天一行,格式为:
# Day,Enabled,Schedule
Monday,false,2
Saturday,true,1
- Day — 星期几(
Monday…Sunday) - Enabled — 当天是否启用(
true/false) - Schedule — 使用哪套作息表(
1或2)
铃声时间写在 ring.ps1 顶部的数组里:
$schedule1_ring = @("07:30", "08:00", "08:45", ...) # 上课铃
$schedule1_warning = @("08:52", "09:57", ...) # 预备铃
$schedule1_wake = "13:57" # 午休唤醒
$schedule2_ring = @(...)
$schedule2_warning = @(...)
$schedule2_wake = "13:57"时间用 HH:mm(24 小时制)。预备铃与唤醒时刻会自动 +3 分钟补一次上课铃,无需手动再加。
run.vbs # 启动(后台隐藏运行)
stop.vbs # 停止
test.vbs # 测试模式:打印当天所有铃声,弹窗与倒计时走测试逻辑,不会真关机
- 把
run.vbs的快捷方式放进启动文件夹:%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup - 或用「任务计划程序」添加登录时触发器,操作设为
wscript.exe "<脚本目录>\run.vbs"
run.vbs 以隐藏窗口拉起 ring.ps1。脚本先读取 schedule.txt 判断今天用哪套时间表,然后进入主循环:算出距离最近的铃声时刻,按远近做自适应休眠;到点就播放对应声音。当天最后一声铃响完后,调用 shutdown /s /t 30 并弹出一个 VBS 倒计时窗口——点「取消」会执行 shutdown -a 撤销关机。
代码部分采用 MIT 许可。仓库不含任何音频素材,音源请自备。