WindowTimePlug 是一个面向 Windows 桌面的倒计时插件。当前项目以 Win10 兼容性为第一优先,运行时使用 .NET Framework 4.8 + GDI+ + layered window 自绘链路,让组件能够稳定挂在已经验证过的桌面层上,并尽量在 Win + D 后保持正确显示。

如果你是第一次接手这个项目,建议先按这个顺序阅读:
AGENTS.mddocs/ENGINEERING_HANDOFF.zh-CN.mdscripts/package_release.ps1WindowTimePlug.App/Services/WidgetController.csWindowTimePlug.App/Widgets/DesktopWidgetWindow.cs
- 这是“桌面插件”,不是普通倒计时窗口。
- 视觉方向是“轻透玻璃分组”,但不追求依赖系统模糊 API 的高风险效果。
- Win10 可读性、稳定性、耐看性优先于截图效果。
- 当前已经明确放弃背景截图式伪透明。
- 当前保留现有桌面宿主方案,即使它会显示在桌面图标/文件之上。
AGENTS.md- 给后续 AI / 工程接手者的短操作规则
docs/ENGINEERING_HANDOFF.zh-CN.md- 需求动机、设计推理、系统结构、构建链路、踩坑记录、修改边界
WindowTimePlug.App- 桌面应用、托盘、设置窗口、桌面组件自绘
WindowTimePlug.Core- 倒计时计算、配置模型
WindowTimePlug.Core.Tests- 配置与规则测试
scripts/package_release.ps1- 唯一推荐的打包入口
installer/WindowTimePlug.iss- Inno Setup 安装器脚本
本地调试:
dotnet build .\WindowTimePlug.App\WindowTimePlug.App.csproj -c Debug
dotnet test .\WindowTimePlug.Core.Tests\WindowTimePlug.Core.Tests.csproj推荐发布流程:
powershell -ExecutionPolicy Bypass -File .\scripts\package_release.ps1脚本执行完成后会直接打印:
WindowTimePlug.exe的文件路径WindowTimePlug.exe所在目录- portable zip 的文件路径
- portable zip 所在目录
这个项目的发布不是单纯 dotnet build 就够了,因为过去反复踩过以下问题:
WindowTimePlug.exe正在运行导致输出文件被锁- 便携包压缩时,刚生成的输出目录文件仍然被占用
- 开发者忘记先跑测试
当前脚本已经处理这些问题,固定流程如下:
- 检测并结束
WindowTimePlug.exe - 等待进程退出
- 执行
dotnet test - 执行
dotnet build -c Release - 生成
dist/WindowTimePlug-Portable.zip - 如果本机有
ISCC.exe,继续构建安装器
如果本机没有 Inno Setup,脚本仍然会成功完成,并保留 portable zip 作为发布产物。
配置文件写入:
%AppData%\WindowTimePlug\config.json
主要字段包括:
titlesubtitletargetLocalTimeshowHoursshowMinutesshowSecondsthemepositionlockedrunAtStartupdesktopMode
- 不要重新引入背景截图式透明
- 不要用整窗 alpha 来控制玻璃透明度
- 不要轻易重写桌面宿主挂载策略
- 默认位置现在是“右上角锚定”
- 用户拖拽后会切换为手动位置,不应再被默认逻辑覆盖
- Release 主程序:
WindowTimePlug.App\bin\Release\net48\WindowTimePlug.exe
- 便携包:
dist\WindowTimePlug-Portable.zip
后续如果改了以下任一内容,请同步更新 AGENTS.md 与 docs/ENGINEERING_HANDOFF.zh-CN.md:
- 桌面宿主策略
- 透明渲染链路
- 默认位置逻辑
- 打包脚本
- 图标系统
- 兼容性策略
