用途与实际影响
这项功能怎样使用
为什么需要它
通知可能重复或过期,任务半途退出也可能留下不消失的卡片;目标屏认错又会把浮层放到主屏。水冷屏只保留真正值得一瞥的事件,完成后按来源和时效收起。
举个实际例子
我说“把这次照片复制进度放到水冷屏上”。屏幕始终更新同一张进度卡,不会一会儿刷出十几张;复制完成后短暂显示结果再收起,脚本半路崩了也会自动清掉死卡。
最后我会得到什么
水冷屏在原背景上显示最多六张有期限的事件卡,长任务只更新同一张;清理键不误删正在进行的事,时钟选择会记住。找不准目标副屏就不显示到主屏。
正常时
确认唯一目标副屏后显示透明事件卡,Win+F1 清可清项,Win+F2 切换时钟。
发现问题时
通知重复、过期或生产者退出时只整理对应卡片;热键冲突只影响热键。
入口不可用或证据不足时
目标显示器不唯一或消息来源不合要求时停显示,不回退主屏。
从哪里开始
在 HS2 水冷屏查看任务和通知;Win+F1 清可清内容,Win+F2 切换时钟,任务进度由已接入生产者更新。
需要准备什么
- 希望显示的事件或任务
- 正确 HS2 屏幕是否已连接
- 清理或时钟切换选择
从开始到拿到结果
- 1
确认目标副屏
系统先验唯一非主屏与绑定,避免把浮层放到桌面主屏。
- 2
整理事件卡片
从本地媒体、Windows 通知和任务状态筛选新鲜事件,同一任务沿稳定标识更新进度。
- 3
控制并自动收口
最多显示六张;完成、取消、过期或来源退出后收起,Win+F1 不清不可清的在途任务,Win+F2 保存时钟选择。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
音乐、Steam、双来源电量与通知寿命来源证据保留;2026-09-14 HS2浮层和壁纸进程各1个,唯一2288×1048非主屏存在;完整绑定、落点与实体像素未新验收关键规则与设计选择
密集遥测和低频事件分屏,不复制 TimeAudit 或机箱屏。
动态壁纸只提供背景,浮层只提供信息;任一方退出不会伪装成另一方故障。
听网易云时,歌名、全部歌手、封面和双语标题在播放期间紧凑常驻,切歌扩展 8 秒;窗口标题与播放列表不能精确对应就暂时隐藏,暂停或退出后收起,绝不按预加载缓存猜当前歌曲。
启动 Steam 游戏后可看本次会话时长、封面与 UTC+8 开始时间;退出后总结累计可见 60 秒。它回答‘这次玩了多久’,不冒充账号总时长、游戏 FPS、成就或非 Steam 通用识别。
手机放在一旁时,电量和充电状态无底板常驻并微位移防烧屏。小米妙享和手机连接始终各自探测;同等新鲜优先小米,手机连接证据明显更新时选后者。断开、无有效数据或确认过旧就隐藏,不让旧日志和台式机电池制造假在线。
普通通知和动态状态最多显示 60 个真正可见秒,连接提示 5 秒;启动时普通旧消息只建基线,仍活动的来电/传输可恢复,并在源结束或持续失联 5 分钟后收起。最新三条手机通知按到达顺序保留,第四条淘汰最旧,最新一条不会被其他普通卡挤掉。
同一消息经小米妙享和手机连接错峰转发时只保留一张,数字不同仍保留区别。明确验证码语义才放大最新 4–8 位数字,显示 15 个可见秒;新码原位替换旧码,同码重复不续命,不把订单号、取件码、手机号或日期误当验证码。
最多六卡且只为真实内容占位;少量内容贴底收拢。
硬件告警、来电和活动传输优先;音乐、游戏与最新手机通知在普通压力下保留。除即时音量卡外,计时卡被挤出时暂停可见计时,但超过三分钟墙钟寿命后不再复活;验证码另算通知配额,仍受全局六卡限制。
通知来源独立采集、标准化去重,验证码只在明确语义下识别且不写日志。
Win+F1 清除手机通知、验证码、短操作、完成提示、游戏总结和恢复提示,但保留活动媒体、游戏、任务、传输、来电与硬件告警;同一中继内容在抑制窗内不复活。
Win+F2 只切换中国标准时间的 HH:mm 时钟;状态写入应用本地设置,重启后继续,Win+F3/F4 不占用。
只有 Win+F1 注册返回冲突 1409 时才启用低级键盘窄回退;它只处理真实键盘的 Win+F1 且要求不带 Ctrl/Alt,并从按下到抬起只触发一次。Win+F2 不安装广域回退。
主动任务必须由生产者显式发布 Id、Title、可选 Detail/ProgressPercent/RemainingMinutes 与 active/completed/cancelled,不扫描系统进程猜任务。
活动任务默认五分钟租约;同 Id 进度续报自动续租,重开先清旧完成提示,completed 显示 15 秒完成卡,cancelled 清除两种状态,异常退出后自动收卡。
浮层不修改壁纸、主屏、远程虚拟屏或 Windows 原生鼠标边界。
本模块用到的名词
- event lifetime(事件寿命)
- 卡片实际可见的累计时间;被高优先级挤出时可暂停。
- pixel alpha(逐像素透明度)
- 只有卡片和文字参与合成,不建立黑色全屏底板。
- display binding(显示器绑定)
- 用尺寸、主/副属性和已保存拓扑锁定目标 OLED,而不是猜 DISPLAY 编号。
- dismissal suppression(清场抑制)
- 清掉一条可清内容后,在有界时间内按同一内容身份拒绝中继重复投递;真正不同的新内容仍可显示。
- task producer protocol(任务生产者协议)
- 发起长任务的脚本通过命名管道显式声明 Id、标题、详情、进度、预计剩余、状态和租约。
- lease sweep(租约清理)
- 浮层每五秒检查活动任务;超过默认五分钟未续报就移除卡片,避免异常生产者留下死状态。
专业定义
在唯一非主 2288×1048 显示器的动态壁纸上,以透明卡片显示媒体、任务、手机、音量、游戏和告警;Win+F1 清场、Win+F2 切换时钟,长任务由发起脚本显式登记。
解决什么
解决双屏重复、空卡、通知风暴、旧通知复活、验证码误识别、超长文本、目标显示器误选、清场误伤活动工作、热键冲突扩大以及长任务卡永久残留。
当前怎样实现
- Core 项目拥有事件、优先级、寿命、去重、布局与告警纯逻辑。
- WinUI 3 应用创建逐像素透明、无激活、鼠标穿透窗口。
- Wallpaper Engine 或 Windows 当前背景负责底层画面;浮层不连接或修改其设置。
- `NeteaseLocalMediaProbe` 读取窗口标题、完整 playing list(播放列表)与音频会话;只在同歌名/全部歌手的精确候选内用歌词缓存新鲜度消歧。`MediaSessionSource` 发布 MediaActive 与 8 秒 MediaTrackChange,按曲目 URI 异步缓存封面,ArtworkGenerationGate 阻止上一首的迟到封面覆盖当前曲目。
- `SteamGameSource` 从本地 appmanifest 清单和 gameprocess_log.txt 匹配仍存活的 Steam 会话;`SteamGameTracking` 解析日志本地时区和夏令时,显示统一 UTC+8。运行卡随本次起点计算时长,结束后生成独立 GameSummary;OverlayPolicies 规定 60 个可见秒,封面异步完成也必须仍属于同一会话。
- `PhoneBatterySources` 每 5 秒同时启动小米妙享与手机连接探测,各自有 2 秒超时及 single-flight(单飞)保护。小米读界面与近期日志、手机连接读伴随文件与界面;PhoneBatteryProbeReadingCache 分开 ObservedAt(来源证据时间)与 ConfirmedAt(最近确认时间),重复读旧日志不会刷新证据时间。
- `PhoneBatteryArbitration` 先排除未连接、越界或确认超过 15 秒的读数,再比较证据时间:小米不比手机连接旧超过 15 秒时优先小米,否则选择更新的手机连接。小米界面电量可合并近期日志充电趋势;一个探测故障不阻断另一个,只有均不可用才收起电量。
- `PhoneNotificationSource` 通过 Windows UserNotificationListener 读取小米妙享和手机连接实际通知;`PhoneNotificationReconciler` 按 ID 对账活动状态、启动基线与移除事件,并为来电/传输保留 5 分钟安全租约。PhoneNotificationClassification 规范 Unicode、空白和标点后跨源近似去重,数字序列不同不合并。
- `PhoneVerificationCodeDetector` 要求验证码/OTP(一次性密码)上下文并排除非验证码数字;固定验证码事件 ID 让新码原位替换,同码去重不重置寿命。OverlayPolicies 定义普通/动态 60 秒、连接 5 秒、验证码 15 秒;OverlayScheduler 累计真实可见时间、限制最新三条通知与三分钟墙钟队列,不把正文或验证码写日志。
- 音量来自 Windows 默认音频端点变化,显示 6 秒且不带设备名;U 盘和网络事件显示 12 秒,网络断开需连续确认。硬件告警来自 TURZX/LHM,异常常驻、恢复提示 10 秒;这些来源与媒体、Steam、任务和手机各自隔离。
- GlobalHotkeyCoordinator 优先 RegisterHotKey;只有 Win+F1 的 1409 冲突进入低级键盘 hook(钩子),手势状态机过滤注入按键、Ctrl/Alt 和重复 keydown。
- GlanceSource 把 GlanceVisible 写入 ApplicationData 本地设置;默认显示 HH:mm,启动、解锁和每个整分钟边界刷新。
- OverlayScheduler 的 ClearDismissible 只移除可清类型,并按内容指纹保存至少 10 秒、手机中继 3 分钟的抑制状态。
- Publish-HS2Task.ps1 把有界 JSON 写入 `HS2.CrystalOverlay.Tasks`;协议层校验 Id、字段类型与范围,投影层管理活动/完成身份,租约表每 5 秒清理超时任务。
- max-six、sparse、reflow、overflow 等 demo 使用合成数据。
执行流程
- 1
发现并验证目标显示器。
- 2
从每个本地 adapter(执行适配器) 和任务命名管道形成事件候选。
- 3
任务生产者用稳定 Id 上报 active;进度续报刷新租约,completed 或 cancelled 明确收口。
- 4
标准化、去重并应用来源新鲜度。
- 5
按优先级、寿命和六卡上限选择。
- 6
布局到曲面安全区域并透明显示。
- 7
Win+F1 只清可清内容并建立复活抑制;Win+F2 只切换并保存时钟状态。
- 8
事件结束、租约到期或显示器失效后收起。
边界
- 通知正文和验证码属于本机显示内容,不进入公开仓库或网站样图。
- 动态壁纸由独立应用提供;当前现场截图中的市场场景作者与公网再发布许可为 Unknown(未验证),不声称用户拥有或原创。纯软件 demo 继续使用项目可证明的合成背景。
- 网易云当前无权威播放位置,因此不显示歌词、进度条和已播/总时长;保留的 HS2.NeteasePlaybackBridge 只是未启用的兼容与诊断工程,不属于当前浮层运行链。歌词缓存仅用于精确候选消歧,不代表歌词已经显示。
- 手机链只接收 Windows 通知中心实际提供的两条中继来源,不等于手机全部通知或手机全库;双源电量是证据择优,不是两个值取平均或界面永远优先。
- Steam 成就和非 Steam 游戏通用识别尚未实现。
- Win+F1 的窄回退只在注册冲突 1409 时启用;注入按键、没有 Win、带 Ctrl/Alt 的 F1 全部透传,其他注册错误不扩大拦截。Win+F2 注册失败时只记录不可用。
- 任务管道是本机显式生产者入口,不是权限通道、远程 API 或通用进程监视器;单行最多 64K 字符,Id 最多 128 个安全字符,标题最多 256、详情最多 1024。
失败与恢复
- 目标显示器缺失或多解
- 不在主屏创建窗口,等待唯一目标。
- 单个通知来源异常
- 继续检查另一来源,不让一条链短路全部手机状态。
- 普通旧通知在启动时存在
- 只建立基线,不翻出旧消息;活动来电/传输可恢复。
- 网易云标题/全部歌手无法精确匹配或存在无法消解的版本歧义
- 隐藏媒体卡片,保留未匹配/歧义状态;不以最新缓存、预加载歌曲或迟到封面填空。
- Steam 清单、进程日志或本次起点不能确认
- 不虚构当前游戏和时长;没有足够结束证据时不凭缺项制造总结,成就和非 Steam 识别继续明确未接入。
- 小米妙享或手机连接探测超时
- 两条链继续独立;短暂失败可保留尚新鲜的最近确认值,超时本身不刷新证据时间。两源都失联或过旧时隐藏电量。
- 普通通知重复、同 ID 更新或同验证码跨源重发
- 按内容和 ID 去重且不重置原寿命;数字不同保留为不同通知,新验证码才在固定位置替换并重新计时。
- 来电/传输通知已移除或通知访问持续失联
- 源移除时结束活动卡;失联最长 5 分钟后收起,不永久占卡。
- Win+F1 已被其他程序注册
- 仅在错误 1409 时启用真实键盘 Win+F1 且不带 Ctrl/Alt 的窄回退;按下一次触发、重复按下不重触发、抬起后释放,注入按键和冲突组合透传。
- Win+F2 或非冲突型热键注册失败
- 记录具体错误并只关闭该快捷键,不安装会吞掉其他按键的广域 hook(钩子)。
- 任务 JSON 非法、超界、客户端静默或半途断开
- 非法消息不发布;读取一秒超时且单行最多 64 KiB,断开的管道立即重开,意外服务错误记录后退避一秒。
- 任务生产者异常退出或同 Id 重开
- 无续报时默认五分钟租约到期自动清卡;同 Id 重开先清旧完成提示,再显示新的活动进度。
真实入口
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\NeteaseLocalMediaSource.cs网易云窗口/播放列表精确身份、音频状态与候选消歧
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\MediaSessionSource.cs播放/切歌卡与防迟到封面覆盖
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\SteamGameSource.csSteam 清单、进程日志、本次时长、UTC+8 与退出总结
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\PhoneBatterySources.cs双电量探测器、独立超时与缓存确认
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay.Core\PhoneBattery.cs证据时间、连接有效性与双源仲裁
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\PhoneNotificationSource.csWindows 双中继通知与五分钟活动安全租约
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay.Core\PhoneNotificationReconciler.cs启动基线、活动结束、去重与固定验证码卡
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay.Core\OverlayPolicies.cs媒体、游戏、手机各类可见寿命与优先级
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay.Core\OverlayScheduler.cs事件、优先级和寿命调度
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay.Core\OverlayDeckLayout.cs六卡与曲面安全布局
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\GlobalHotkeyCoordinator.csWin+F1/F2 注册、冲突处理和窄回退
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay.Core\GlobalHotkeyGestureState.cs物理 Win+F1 一次触发、注入过滤和按键透传状态机
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\GlanceSource.csHH:mm 时钟、整分钟刷新与持久可见状态
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\Publish-HS2Task.ps1主动任务命名管道生产者入口
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay.Core\ImportantTaskProtocol.cs任务 JSON 字段、类型、范围和状态校验
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\ImportantTaskSource.cs任务管道、默认租约、到期清卡和失败隔离
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\src\HS2.CrystalOverlay\App.xaml.csWinUI 应用、显示选择和本地 adapter(执行适配器)
E:\Projects\Tools\TURZX-SideScreen\tools\hs2_crystal_overlay\tests\HS2.CrystalOverlay.Tests事件、清场抑制、热键手势、任务协议/租约/管道、时间和布局测试
E:\Projects\Tools\TURZX-SideScreen\docs\hs2-crystal-overlay.md产品行为、演示场景和实体验收
如何验证
- 源码列出 max-six 等 15 类纯软件 demo 场景,并明确全部使用合成数据。
- 当前main的GlobalHotkeyGestureStateTests与OverlaySchedulerTests覆盖物理Win+F1一次触发、注入/冲突组合透传、活动媒体/游戏/任务/来电/传输/告警保留及同一手机中继内容不复活;其既有测试证据不由本次TURZX恢复冒充为新的HS2实机验收。
- ImportantTaskProtocolTests、ImportantTaskProjectionTests 与 BoundedLineReaderTests 覆盖明确进度单位、completed/cancelled、同 Id 重开、五分钟租约续报、并发到期、静默客户端超时和下一客户端恢复;本轮未用真实生产任务做用户可见 E2E(端到端验证)。
- 2026-09-02 只读核对 NeteaseLocalMedia、SteamGameTracking、PhoneBattery、PhoneNotificationReconciler、PhoneNotificationClassification 与 OverlayScheduler 对应源码/测试定义;本次没有重跑这些来源测试,也没有读取真实媒体、手机电量或通知。
- 8 月 31 日历史回读曾确认 2288×1048 HS2、wallpaper64 和 HS2.CrystalOverlay 同时在线及浮层落点;实体动态壁纸只沿用 2026-08-30 本人历史确认,没有读取通知正文。
- 实体动态壁纸本轮未重验;透明合成性能、全部事件寿命、真实 Win+F1/Win+F2、生产任务异常退出、睡眠与异常重启恢复也仍未重演。
与其他模块的关系
安装与换机模块先建立本机 HS2 绑定;本模块读取指标异常、接收显式任务并管理用户控制,与电源恢复模块共享显示器模式边界,但不依赖机箱屏渲染。
