body::before{content:"";position:fixed;inset:0;z-index:-1;background:radial-gradient(900px 500px at 85% -10%,rgba(34,211,238,.12),transparent 60%),radial-gradient(700px 460px at -10% 40%,rgba(129,140,248,.09),transparent 60%);pointer-events:none;}body::after{content:"";position:fixed;inset:0;z-index:-2;background-image:linear-gradient(rgba(148,163,184,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(148,163,184,.05) 1px,transparent 1px);background-size:44px 44px;pointer-events:none;}
ReminderTool.exe · 桌面级提醒管理工具 · 完整功能清单与架构图解
事件提醒 APP 是一款基于 PyQt5 开发的 Windows 桌面提醒工具,用于定时提醒工作任务、会议、巡检等事件。它以主窗口 + 系统托盘的形式常驻后台,支持多循环类型、农历日期、提前提醒、自延提醒,并通过桌面弹窗、邮件、企业微信、微信 PushPlus 四个通道触达用户。
图 1 · 事件提醒 APP 功能总览架构
主窗口以表格形式展示所有提醒,每列均有固定宽度与弹性权重;支持对提醒的全生命周期管理。
| 操作 | 说明 |
|---|---|
| 新增 | 弹出编辑对话框,填写事件、说明、日期、时间、循环、农历、通知开关、提前提醒、自延分钟。 |
| 编辑 | 双击行或右键菜单进入编辑;编辑后会清空 email_sent 与 other_channels_sent 去重标记,避免重新定时不通知。 |
| 删除 | 右键删除单条或批量删除。 |
| 完成 | 勾选后该条暂停提醒;点击 "恢复" 可重新进入待提醒状态。 |
| 导入 / 导出 Excel | Excel 表头固定为:事件、说明、日期、时间(24H)、循环、农历、通知、提前提醒、自延。 |
123 px;自延列固定为 70 px;事件 / 说明列按权重弹性扩展。触发引擎每秒轮询一次所有提醒,根据时间、循环、提前量、自延量决定何时弹出提醒。
目前支持 15 种循环类型,涵盖日、周、月、季、半年、年:
无 / 每天 / 每2天 / 每3天 / 每4天 / 每5天 / 每工作日 / 每周 / 每两周 / 每月 / 每两月 / 每季度 / 每四个月 / 每五个月 / 每半年 / 每年
启用农历后,日期按农历存储;计算下次触发时根据循环类型自动转公历判断,并正确处理闰月、大小月(农历每月时,取 min(日, 30/29))。
可配置在正式提醒前 5 分钟 ~ 2 周 之间的 18 个档位提前弹出一次提醒。提前提醒弹窗仅显示 「知道了」 按钮,无延期按钮,避免逻辑冲突。
首次提醒后若用户未点击「知道了」,系统按配置的自延时间再次提醒。自延选项共 28 档,从 10 分钟到 1 季度;默认值 360 分钟(6 小时)。
图 2 · 循环 / 农历 / 提前 / 自延类型
事件触发后先弹桌面提醒,随后按通道开关分别发送邮件、企业微信、微信通知;并通过独立的去重标记防止同一时间点重复发送。
| 通道 | 技术方式 | 配置位置 |
|---|---|---|
| 桌面弹窗 | PyQt5 顶层弹窗,置顶显示 | 无需配置 |
| 邮件 | SMTP,支持 SSL | 设置 → SMTP服务器 / 端口 / 发件邮箱 / 授权码 |
| 企业微信 | 企业微信群机器人 Webhook | 设置 → 企业微信 Webhook URL |
| 微信 | PushPlus Token 推送 | 设置 → PushPlus Token |
图 3 · 通知触发与去重流程
email_sent 字段记录已发送的 next_notify;企业微信/微信共用 other_channels_sent 字段。每次编辑 / 恢复时会重置这两个字段,保证重新编辑后的提醒能再次收到通知。弹窗 UI 区分正常提醒与提前提醒:
QPixmap,避免 QIcon 缩放导致高 DPI 下截断。
图 4 · 弹窗交互状态机
为保证同一时刻只运行一个实例,并在二次启动时把已有窗口置前:
CreateMutexW,锁名包含 「事件提醒」 与 GUID,避免与其他软件冲突。CreateEventW 并保留句柄。OpenEventW + SetEvent 发出信号后立即退出。WaitForSingleObject,收到信号后 ResetEvent 并把窗口 bring_to_front()。
图 5 · 单实例锁与唤醒机制
软件采用永久授权 + 30 天试用模式:
device_id 派生,实现云同步后多机通用;未配置时回退到系统 MachineGuid。SHA256 XXXX-XXXX-XXXX-XXXX。| 能力 | 实现方式 / 效果 |
|---|---|
| 系统托盘 | 最小化后驻留托盘;双击 / 右键菜单可打开主窗口、设置、退出。 |
| 开机自启 | 配置项 autostart,写注册表启动项实现。 |
| 高 DPI 适配 | 兼容 1080P/100% 与 3K/200% 多显示器环境。 |
| 数据目录 | 随 exe 所在目录存放,打包后使用 sys.executable 路径。 |
所有数据以 JSON 文件保存在 exe 同目录:
config.json:自动启动、首次运行、注册码、邮件/企微/微信配置、device_id。reminders.json:提醒列表,结构如下。
图 6 · 提醒数据模型