课后自动复原
GordonYoung • Version 1.1.0.0课后自动复原
下课一段时间后,如果电脑没回到干净状态,就全屏倒计时提示,没人拦就自动收拾。
给多人共用的教室电脑用:上一节课留下的窗口、U 盘、桌面上多出来的文件,下一节课开始前自动清掉。
什么时候触发
下课满一段时间(默认 15 秒,可调)后检查。满足任意一条就提示:
- 任务栏上还有窗口没关
- 窗口标题或进程名命中关键词(默认
Hite、WPS、Seewo) - 桌面布局和录入的基线对不上
- 有 U 盘没弹出
连堂课跳过:下节课和上节课是同一科目时不收拾。但只要两节课之间跨过了设定的时间点 (默认 09:40 / 13:00 / 18:00,也就是长课间与午休),说明中间隔得够久、教室可能被别人用过,照常收拾。
按刚下课那一节的科目名还能单独指定:某些科目直接开始(跳过倒计时),某些科目一律不收拾。
提示与取消
全屏淡灰色遮罩,倒计时默认 5 秒。点屏幕任意位置或按任意键即取消,倒计时走完才动手。
取消之后会隔一段时间再问一次(默认 3 分钟,最多 2 次,可关)。重试前重新判定: 已经收拾干净、或者又上课了,就不再打扰。
收拾什么
| 动作 | 说明 |
|---|---|
| 关闭任务栏软件 | 只关任务栏上看得见的程序 |
| 弹出 U 盘 | 只弹可移动卷 |
| 清理桌面 | 新增文件移到回收站(可改为直接删除) |
| 恢复图标位置 | 摆回录入基线时的位置 |
定时关机
可设若干时刻(默认 12:30 / 22:40)。到点先跑一遍复原,收拾完再弹关机倒计时。
确认后先强制退出软件,再发关机命令。否则只要有一个程序弹着「是否保存」, Windows 的关机就会停在那儿等人点,没人管的话第二天来电脑还开着。
关机专用的关闭策略比平时激进:宽限期压到 1 秒且一律强制结束。保护名单不受影响。
关机与下课复原用的是同一个全屏遮罩,两者会在同一时刻撞上(关机点往往正好是下课点)。 插件内部按优先级仲裁:关机高于复原,可以接管正在倒计时的复原, 而不是把它当成「用户取消」互相顶掉。
安全设计
这个插件会结束进程、弹设备、删文件,所以每一处都按「宁可漏做也不做错」来设计。
关软件
- 只处理任务栏窗口(标准的 Alt+Tab 判据:排除工具窗口、无标题窗口、被 DWM cloak 的挂起 UWP、 以及归属于别人的附属窗口)。后台服务、托盘程序、其它插件的浮窗天然不在范围内
explorer只关窗口,绝不结束进程- 内置硬保护名单(用户改不掉):系统外壳与核心进程、输入法、远程控制软件、任务管理器、 以及任何位于 Windows 目录下的程序、ClassIsland 自己
- 先发
WM_CLOSE让程序自己退(未保存的文档照常弹提示),等宽限期后仍在才强制结束
弹 U 盘
- 只处理
DriveType.Removable的卷。键鼠、摄像头这些根本不是卷,进不了范围 - 加锁失败(盘里还有文件开着)就直接放弃并报出是哪个盘,绝不强行卸载
桌面
桌面这块的保险最多。桌面有可能落在共享目录、网络重定向路径或不支持回收站的位置上, 而这类路径在短暂掉线之后重新可读时,所有内容都会被判成「新增」。所以:
- 没录基线就什么都不做
- 录基线时如果一个项目都读不到(盘掉了),拒绝录入
- 基线绑定机器名 + 用户 SID + 桌面路径,任一不符直接放弃
- 数量熔断:新增项超过设定的上限(默认 25)就只上报不删除
- 默认走回收站,删了能找回
- 文件夹要单独开开关,而且真删之前先递归数一遍,过大直接跳过
- 单个文件超过 200 MB 不动
- 只比对第一级,文件夹里面怎么变都不管
删除方式
默认把新增文件移入回收站。设置里有「直接删除,不放入回收站」—— 开了就是永久删除、找不回来,默认关。
回收站并非随处可用(网络路径、部分共享目录就没有)。默认路径是先试回收站, 用不了时如实上报而不删除;开了直接删除才会退到永久删除。
真正拦住误删的不是这个开关,而是上面那串闸——尤其是基线的身份绑定。 删除方式只决定「删了能不能找回」,决定「删不删」的是它们。
设置
应用设置 → 课后自动复原。可调触发延迟、倒计时长度、连堂判定、各项开关、 永不关闭的程序名单、触发关键词,也可以在那里录入桌面基线、看当前会不会触发。
| 按钮 | 行为 |
|---|---|
| 演练一次 | 正常弹倒计时和进度动画,确认后只报告不动手 |
| 立即执行 | 真的执行一遍,不等下课。不受启用开关约束,用于装好之后验一遍 |
| 演练关机 | 走完整的关机流程但不真关,会报出将强制退出几个程序 |
建议顺序:先演练确认判定正确,再用「立即执行」验一遍真实效果,最后才打开自动执行。
开源信息
- 仓库:https://github.com/Gordonynh/ClassReset · MIT 协议
- 针对 ClassIsland 2.1(Avalonia)构建;随 release 提供打包好的
.cipx - 从源码编译:克隆到 ClassIsland 源码树的
plugins/目录下,dotnet build -c Release