# PPTTime-newr **Repository Path**: nozero/PPTTime-newr ## Basic Information - **Project Name**: PPTTime-newr - **Description**: PPT放映计时器(负计时/全屏自动启停/多闹钟点) - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-21 - **Last Updated**: 2026-08-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PPTTimer 使用说明 ## 简介 PPTTimer 是一个桌面悬浮计时器,专门为 PPT/WPS 课件演示设计。当检测到课件进入**全屏放映**模式时自动开始倒计时,退出全屏放映时自动恢复。倒计时到 0 后进入**超时负计时**(-00:01、-00:02 …),橙红色醒目提醒。支持系统托盘常驻、自由拖拽定位,关闭时自动保存设置。同一台电脑只允许运行一个实例。 ## 功能列表 ### 1. 全屏放映检测 - 自动检测 PowerPoint (POWERPNT) 和 WPS 演示 (wpp) 的全屏放映状态 - PPT:窗口标题含"幻灯片放映"/"Slide Show"/"- 放映" 且窗口全屏 → 开始倒计时 - WPS:窗口标题含"放映"/"演示"/"Slide Show" 且窗口全屏 → 开始倒计时 - 仅打开 PPT/WPS(编辑模式)不会触发,必须进入全屏放映才触发 - 进入全屏放映 → 自动显示窗口并开始倒计时 - 退出全屏放映 → 停止倒计时,恢复默认时间 ### 2. 单实例运行 - 使用系统 Mutex 限制,同一台电脑只能运行一个 PPTTimer - 重复启动时自动退出,不会出现多个实例 ### 3. 系统托盘 - 点击 × 按钮 → 保存设置并隐藏到系统托盘(程序继续运行) - 双击托盘图标 → 恢复窗口显示 - 托盘右键菜单:显示窗口、时间选项、退出程序 - 托盘图标悬停显示当前计时状态(剩余 / 已超时 / 等待演示) - 演示开始时自动从托盘恢复窗口 ### 4. 时间设置 - **右键菜单 / 托盘菜单**:直接选择时间选项(默认:10/15/20/25/30 分钟) - **滚轮**:前滚 +1 分钟,后滚 -1 分钟,范围 1~60 分钟 - **单击**:减少时间(默认 1 分钟),低于 1 分钟时循环回到 60 分钟 - 仅在非倒计时状态下可调整时间 ### 5. 自由定位 - 直接拖拽窗口到任意位置 - 拖拽结束后自动保存位置(相对坐标 0.0~1.0) - 下次启动时在上次位置恢复显示 ### 6. 颜色切换 - **Ctrl+单击**:切换时钟字体颜色(白色 ↔ 红色) - 颜色状态会保留,不受课件启停影响 - 超时状态下强制橙红色,覆盖颜色切换 ### 7. 倒计时模式 进入全屏放映时窗口自动切换为紧凑模式: - 透明度降至 50% - 背景色变为深灰(RGB 30,30,30) - 窗口缩小为 180×70,只显示时钟 - 隐藏状态栏和关闭按钮 - 退出全屏放映后自动恢复原大小和控件 ### 8. 超时负计时 - 倒计时到 00:00 后不会停止,继续向下计数(-00:01、-00:02 …) - 超时状态下时间显示为 **橙红色**,字体前带负号 - 托盘 tooltip 同步显示「已超时 XX:XX」 - 超时计时一直持续,直到退出全屏放映模式 ### 9. 声音提醒 - 通过配置项 `AlarmMinutes` 设置多个提醒时间点(分钟),逗号分隔 - 默认 `0,1`:剩余 1 分钟时播放一次 `time.wav`,时间到(00:00)时再播放一次 - 每个时间点只播放一次,不会重复 - 可自定义任意组合,如 `0,1,3,5` 表示在剩余 5 分钟、3 分钟、1 分钟和时间到时各提醒一次 - 配置值为 0 表示时间到时提醒 ### 10. 配置保存 - 点击 × 隐藏到托盘时保存当前时间到 TimeOptions 第一项和窗口位置 - 拖拽结束后自动保存位置和时间 - 退出程序时保存当前时间和位置 - 演示开始时也会保存一次(防止意外崩溃丢失设置) - 保存时只更新 TimeOptions 第一个值,其余选项保持不变 - 下次启动时自动载入上次保存的设置 ### 11. 托盘图标 - 使用独立的 `timer.ico` 文件(多分辨率 16/24/32/48/64/128/256) - 图标设计:金属银圈秒表 + 深色表盘 + 12 个刻度 + 白色时针 + 金色分针 + 金色中心点 + 顶部高光弧线 + 投影 - 找不到 `timer.ico` 时自动回退到系统默认图标 ## 配置文件 修改 `App.config` 文件调整配置: ```xml ``` ## 操作说明 | 操作 | 效果 | |------|------| | 左键拖动 | 移动窗口位置(松手后自动保存) | | 滚轮前滚 | 时间 +1 分钟(范围 1~60) | | 滚轮后滚 | 时间 -1 分钟(范围 1~60) | | 单击 | 时间减少(低于1分钟回到60) | | Ctrl+单击 | 切换字体颜色(白/红) | | 右键 | 弹出时间设置菜单 | | × 按钮 | 保存设置并最小化到系统托盘 | | 托盘双击 | 恢复窗口显示 | | 托盘右键 | 显示窗口 / 时间选项 / 退出程序 | ## 启动方式 双击 `PPTTimer.exe` 运行,程序会显示在上次保存的位置,同时系统托盘出现时钟图标。已有实例运行时,重复启动会被自动忽略。 ## 声音文件 将 `time.wav` 音频文件放到程序目录下(与 `PPTTimer.exe` 同目录)。Windows 文件名大小写不敏感,`time.WAV` 同样可用。 ## 编译方式 项目采用 SDK 风格 csproj,目标框架为 .NET Framework 4.6.2,需安装对应 Targeting Pack: ```bash dotnet build ``` 输出路径:`bin\Debug\net462\PPTTimer.exe` ## 项目结构 | 文件 | 职责 | |------|------| | `Program.cs` | 程序入口 + 单实例 Mutex | | `MainForm.cs` | 主窗口 UI、事件协调、倒计时逻辑 | | `MainForm.Designer.cs` | WinForms 设计器(初始化组件) | | `AppConfigManager.cs` | 配置读写(App.config),保存/加载设置 | | `PresentationDetector.cs` | 全屏放映检测(PPT/WPS,关键词 + 全屏双重判断) | | `PresentationSoftware.cs` | 演示软件类型枚举(None / PowerPoint / WPS) | | `AlarmPlayer.cs` | 声音播放(SoundPlayer,只播放一次) | | `NativeMethods.cs` | Win32 P/Invoke(圆角窗口、窗口矩形、可见性) | | `time.wav` | 提醒声音文件 | | `timer.ico` | 程序图标(多分辨率 ICO,秒表造型) |