C

ClassIslandMarketplace
Preview

课后自动复原

GordonYoung • Version 1.1.0.0
gordon.classreset
941
1
Requires Windows to install

课后自动复原

下课一段时间后,如果电脑没回到干净状态,就全屏倒计时提示,没人拦就自动收拾。

给多人共用的教室电脑用:上一节课留下的窗口、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