# everyday_toast **Repository Path**: yzhcat/everyday_toast ## Basic Information - **Project Name**: everyday_toast - **Description**: 借助snoretoast和windows任务计划 实现每日通知提醒 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-20 - **Last Updated**: 2026-09-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # everyday_toast 借助 **Snoretoast** 与 **Windows 任务计划程序**,实现轻量、零依赖的每日定时打卡提醒。 ![Platform](https://img.shields.io/badge/platform-Windows-blue) ![PowerShell](https://img.shields.io/badge/powershell-5.1%2B-green) ![License](https://img.shields.io/badge/license-MIT-yellow) --- ## 功能简介 everyday_toast 是一个面向 Windows 的极简打卡提醒工具,核心能力: - ⏰ **每日定时提醒**:在设定时间弹出 Windows 原生风格的通知(Toast)。 - 🔁 **未确认则循环提醒**:忽略、关闭或超时后,等待指定间隔再次弹出。 - ✅ **当日一次性确认**:点击通知按钮即视为今日已打卡,当天不再打扰。 - 📅 **每日自动重置**:以日期为标记,次日自动恢复提醒。 - 🪶 **零依赖运行**:仅依赖 Snoretoast(单文件 exe)+ 系统自带的任务计划程序。 ## 效果说明 通知弹出后,存在以下几种交互结果: | 用户操作 | Snoretoast 退出码 | 行为 | |---------|------------------|------| | 点击「确认打卡」按钮 | `4`(ButtonPressed) | 写入当日标记,今日不再提醒 ✅ | | 关闭通知 / 忽略 | `2`(Dismissed) | 等待间隔后再次弹出 🔁 | | 通知超时 | `3`(TimedOut) | 等待间隔后再次弹出 🔁 | | 隐藏 / 成功 / 失败 | `1` / `0` / `-1` | 等待间隔后再次弹出 🔁 | > 只有「点击按钮(退出码 4)」才会创建确认标记,其余情况均按 `IntervalSeconds` 继续提醒。 --- ## 软件架构 整个项目仅由三个部分组成,无后台服务、无常驻进程: ``` everyday_toast/ ├── CheckInSnore.ps1 # 核心提醒脚本(PowerShell) ├── snoretoast_0.9.0/ # Snoretoast 通知程序(单文件 exe) │ └── snoretoast.exe ├── 定时打卡提醒.xml # Windows 任务计划程序配置(可直接导入) └── README.md ``` **运行流程:** ``` 任务计划程序(每日到点触发) │ ▼ CheckInSnore.ps1 │ ├─ 检查当日标记文件是否存在 → 存在则退出 │ ▼ Snoretoast 弹出 Toast 通知 │ ├─ 用户点击「确认打卡」→ 写标记 → 退出 └─ 忽略/关闭/超时 → Sleep(IntervalSeconds) → 重新弹出 ``` --- ## 环境要求 - **操作系统**:Windows 10 / 11 - **运行时**:PowerShell 7.1 及以上 - **通知组件**:Snoretoast(已随本项目打包在 `snoretoast_0.9.0/` 目录) > 💡 Snoretoast 基于 Windows 的 Toast 通知 API,首次运行会在开始菜单注册应用快捷方式,属正常现象。 --- ## 安装教程 ### 方式一:克隆仓库(推荐) ```bash git clone https://gitee.com/yzhcat/everyday_toast.git cd everyday_toast ``` ### 方式二:下载 ZIP 在 Gitee 仓库页面点击「克隆/下载 → 下载 ZIP」,解压即可。 --- ## 使用说明 ### 1. 配置提醒脚本 用文本编辑器打开 `CheckInSnore.ps1`,修改以下参数: ```powershell param( [int]$IntervalSeconds = 1800, # 未确认时的提醒间隔(秒),默认 30 分钟 [int]$MaxRetries = 0, # 0 = 不限次数一直弹到确认;>0 限制当天最多弹几次 [string]$Snore = 'snoretoast' # Snoretoast 路径,若在 PATH 直接写 'snoretoast', # 否则写绝对路径,如 'E:\everyday_toast\snoretoast_0.9.0\snoretoast.exe' ) ``` > 建议将 `Snore` 改为脚本同目录下的绝对路径,避免任务计划程序找不到 exe。 ### 2. 导入任务计划(推荐) 项目已提供导出的任务计划配置 `定时打卡提醒.xml`,可直接导入: 记事本修改`定时打卡提醒.xml`中实际 `CheckInSnore.ps1` 路径 ``` -ExecutionPolicy Bypass -WindowStyle Hidden -File "D:\path\to\CheckInSnore.ps1" ``` 1. 按 `Win + R`,输入 `taskschd.msc` 打开**任务计划程序**。 2. 右侧「操作」面板 → **导入任务…**。 3. 选择项目中的 `定时打卡提醒.xml`。 4. 在弹出的对话框中: - 确认「触发器」中的开始时间(默认为每日 18:30,可按需修改)。 - 确认「操作」→「编辑」中 `-File` 指向的实际 `CheckInSnore.ps1` 路径。 5. 点击「确定」完成导入。 ### 3. 或手动创建任务计划 若导入失败,可手动创建: **使用命令行(推荐,一行搞定):** ```bat schtasks /Create /TN "CheckIn_DailyWork" /SC DAILY /ST 18:30 /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File 'D:\path\to\CheckInSnore.ps1' -IntervalSeconds 1800" /F ``` > ⚠️ `CheckIn_DailyWork`是任务名称; `/ST 18:30` 为每日触发时间; 将路径 `D:\path\to\` 替换为你的实际脚本路径。 **或使用 GUI:** 1. 任务计划程序 → 右侧「创建基本任务」。 2. 名称:`CheckIn_DailyWork`,触发器选「每天」,设置开始时间。 3. 操作选「启动程序」,程序填 `pwsh`,参数填: ``` -NoProfile -ExecutionPolicy Bypass -File "D:\path\to\CheckInSnore.ps1" -IntervalSeconds 1800 ``` 4. 完成。确保在「属性」→「常规」中勾选 **「只在用户登录时运行」**(Toast 通知必须运行在用户会话,不可使用 SYSTEM)。 --- ## 参数说明 `CheckInSnore.ps1` 支持通过命令行参数或脚本顶部 `param(...)` 配置: | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `IntervalSeconds` | int | `1800` | 未确认时,两次提醒之间的间隔(秒) | | `MaxRetries` | int | `0` | 当日最大提醒次数;`0` 表示不限次数,直到确认才停止 | | `Snore` | string | `'snoretoast'` | Snoretoast 可执行文件路径 | **示例:每 10 分钟提醒一次,最多弹 20 次** ```powershell pwsh -File ".\CheckInSnore.ps1" -IntervalSeconds 600 -MaxRetries 20 ``` --- ## 常见问题 **Q1:通知不弹出 / 没有声音?** - 检查 Windows「设置 → 通知」中是否已为 Snoretoast 开启通知。 - 确认当前未开启「专注模式 / 勿扰模式」。 - 首次运行 Snoretoast 会在开始菜单生成快捷方式以注册 AppID,需允许。 **Q2:想自定义通知来源名称(AppID)?** 可使用 Snoretoast 的 `-install` 注册自定义 AppID,并在脚本中通过 `-appID` 指定: ```bat snoretoast -install "MyReminder\reminder.lnk" "snoretoast.exe" "My.Reminder.AppID" ``` **Q3:脚本中文提示乱码?** 将 `CheckInSnore.ps1` 用记事本「另存为」,编码选择 **UTF-8 with BOM**。 **Q4:如何立即测试脚本是否生效?** 在 PowerShell 中手动运行: ```powershell .\CheckInSnore.ps1 -IntervalSeconds 30 ``` 等待 30 秒即可看到循环提醒效果;点击按钮应停止当天提醒。 **删除今日标记文件** ```powershell rm (Join-Path $env:TEMP ("checkin_done_" + (Get-Date -Format 'yyyyMMdd') + ".txt")) ``` **Q5:如何卸载?** - 删除任务计划:`schtasks /Delete /TN "CheckIn_DailyWork" /F` > `CheckIn_DailyWork` 为任务名称 - 删除项目目录即可,无残留注册表项。 --- ## 参与贡献 欢迎 Fork 和 PR,贡献流程: 1. Fork 本仓库 2. 新建特性分支 `Feat_xxx` 3. 提交代码 4. 新建 Pull Request 如需支持多按钮区分(如「确认打卡 / 稍后再说」不同行为),可基于 Snoretoast 的 pipe/回调机制扩展。 --- ## 特技 - 支持通过 `-f` 格式化将 `IntervalSeconds` 显示为 `HH:mm:ss` 或 `X小时X分钟` 的友好文案(见脚本 `Format-Interval` 实现)。 - 标记文件以日期命名(`checkin_done_yyyyMMdd.txt`),天然支持每日自动重置。 --- ## License 本项目基于 MIT 开源,使用时请注意具体代码上游依赖(Snoretoast 遵循其自身开源协议)。 > 如使用请关注 [Snoretoast](https://github.com/KDE/snoretoast) 的上游许可。