6e09de53166d44c7d685b05af920e5c02f98ad41
TimerApp
一个常驻后台的“工作/休息”计时提醒工具,核心目标是把休息从“靠自觉”变成“靠节奏”:工作一段时间后进入休息提示,休息结束再回到下一轮工作。
产品定位
- 适用人群:需要规律休息/护眼提醒的人,或希望把“休息”纳入工作节奏的人
- 目标:减少连续久坐、避免长时间盯屏,通过强提示把休息真正落地
- 使用方式:后台常驻 + 托盘入口,默认不打扰,只有到点进入休息时才强提醒
核心概念
- 一个周期:工作一段时间 → 休息一段时间 → 开始下一轮
- 三种状态:
- 空闲:系统判断你没有在“有效工作”,本轮工作时长不推进
- 工作:系统判断你在“有效工作”,本轮工作时长持续推进
- 休息:工作时长达到阈值后进入的强提醒阶段,休息倒计时结束后回到下一轮
核心逻辑(状态机)
- 初始进入空闲:避免一启动就强行把你当作“正在工作”
- 空闲 → 工作:当检测到你处于活动状态,开始累积本轮工作时长
- 工作 → 空闲:当检测到你长时间未操作或处于“非工作占用”(例如看视频等),暂停本轮工作推进
- 工作 → 休息:当本轮工作时长累计达到设定值,进入休息提醒并开始倒计时
- 休息 → 空闲:休息倒计时结束,提示“休息结束”,回到空闲等待下一次有效活动
计时规则(核心策略)
- “工作时长”不是自然时间,而是“有效工作时间”
- 你在活动状态时才累积
- 你离开电脑/长时间不操作时不会累积
- 你处在明显的非工作占用时段(如看视频)不会累积
- 空闲时间很长时会重置本轮进度
- 设计目的:避免“离开一小时回来只剩 1 分钟就休息”的反直觉体验
- 直观理解:离开足够久就视为已经中断了一轮工作,回来从新的一轮开始更合理
- 休息倒计时以“秒级稳定推进”为目标
- 设计目的:让休息提示的倒计时更平滑、更可预期
媒体播放检测(视频/音频)
- 目标:当你在“播放视频/音频”时,倾向不推进工作计时,避免把被动观看算作连续高强度工作
- 判定策略(由强到弱):
- 系统媒体会话(SMTC/GSMTC):当播放器/浏览器接入系统媒体控制时,可直接识别“播放/暂停”
- 音频会话峰值兜底:当系统媒体会话不可用时,通过默认音频设备的会话峰值判断是否正在输出声音
- 响应延迟:
- 计时器自身按 1 秒节拍检查一次
- 媒体状态会做短缓存刷新:播放中约 0.5 秒刷新、未播放约 1.2 秒刷新
- 实际体验通常是“暂停后约 1 秒左右恢复计时”
休息提醒(强提示的边界)
- 休息阶段会出现遮罩式提醒,核心是“让你意识到现在该休息了”
- 休息阶段提供“跳过”
- 设计目的:保证强提示不与真实工作紧急程度冲突,必要时可快速回到工作
- 休息结束会给出结束提示,帮助你在不打开主界面的情况下也能知道已进入下一轮
使用说明(产品层)
- 设置工作/休息时长:决定每轮节奏的长度
- 暂停/恢复:临时不想被计时推进或进入休息时使用
- 重置:放弃当前进度,从新一轮开始
- 隐藏到托盘:把窗口收起但继续运行(避免误关)
- 退出:真正结束应用与提醒(需要显式操作)
常见场景
- 你在电脑前持续工作:按设定节奏进入休息提醒
- 你离开电脑一会儿再回来:这段时间不算作有效工作,避免“人在不在都算工作”
- 你在看视频/会议播放:倾向不推进工作计时,避免把“被动观看”算作高强度连续工作
- 你刚好在关键时刻被提醒:可以跳过本次休息,稍后再通过节奏回到下一轮
运行逻辑(从用户视角)
- 启动后读取上次的时长与偏好,进入后台常驻
- 当检测到用户处于活动状态时,进入“工作”并开始累积工作时长
- 当检测到用户长时间未操作或处于“非工作占用”(例如看视频等)时,进入“空闲”,并按规则暂停/重置工作进度,避免把不在工作的时间算进“工作时长”
- 当工作时长达到阈值时,进入“休息”,弹出遮罩式提醒并倒计时
- 休息倒计时结束后,关闭提醒并提示“休息结束”,回到下一轮
交互与体验取舍
- 托盘常驻:关闭窗口不等于退出,避免误关导致节奏中断;需要显式“退出”才结束进程
- 手动控制:支持调整工作/休息时长、暂停/恢复、重置一轮,用于临时打断或重新开始
- 休息阶段可跳过:允许用户在必要场景下结束本次休息并立刻回到下一轮
设置与发布形态
- 将“工作/休息时长、空闲判定阈值、主题偏好”等作为可持久化设置,保证重启后仍保持用户习惯
- 同时考虑“安装使用”和“解压即用”的便携形态:便携形态下更倾向把设置跟随程序一起携带,便于拷贝迁移
系统要求
- Windows 10 2004(版本号 19041)及以上:媒体播放检测依赖系统媒体会话相关 API
编译与发布
- 开发环境要求
- Windows(WinForms 桌面程序)
- .NET SDK 9(项目目标框架:net9.0-windows10.0.19041.0)
- 本地编译
- Debug:
dotnet build
- Release:
dotnet build -c Release
- Debug:
- 本地运行
dotnet run
- 便携版打包(生成 dist zip)
- PowerShell:
.\scripts\publish-portable.ps1- 自包含(目标机无需安装 .NET Desktop Runtime):
.\scripts\publish-portable.ps1 -SelfContained $true
- 指定架构(示例:x64):
.\scripts\publish-portable.ps1 -Rid win-x64
- CMD:
.\scripts\publish-portable.cmd
- PowerShell:
Description
Languages
C#
96.1%
PowerShell
3.7%
Batchfile
0.2%