dsh-pet-game-guard:打游戏时自动收起 dsh-pet 桌宠

前言

在 Windows 上用 DeepSeek Harness(DSH)跑智能体时,很多人会装 dsh-pet 做桌面或 Web 桌宠。全屏游戏或无边框前台窗口会挡住桌宠,手动关窗口又要在退出游戏后重新找状态。手动最小化或改 pet 配置,要么打断游戏节奏,要么和 pet 插件自身的 display 设定纠缠在一起。

下面介绍社区插件 dsh-pet-game-guard(维护者 sadnessXU):在 DSH 宿主运行时,用独立辅助进程监听前台窗口,判定「正在游戏或全屏」时隐藏标题前缀为 dsh-pet 的窗口,回到桌面后再显示,且不修改 dsh-pet 配置、不结束 pet 进程。

这是什么

dsh-pet-game-guard 是 DSH 生态下的 Windows 专用插件(package 版本 0.1.2,MIT 许可证)。它解决的是:打游戏或全屏应用在前台时,自动隐藏 dsh-pet 窗口;退出后恢复可见,并保持置顶且不抢焦点。

前提条件:

  • 仅 Windows(os: win32)。
  • 已安装 dsh-pet,且桌宠处于可见状态(display 为 desktop、web 或 both 均可;隐藏逻辑针对桌面窗口类名与标题前缀)。

插件随 DSH 启停:DSH 退出时辅助进程也会退出。辅助程序解包到 %LOCALAPPDATA%\PetGuard\,不能放在 DSH 工作区内运行,否则低完整性标签会导致 ShowWindow 失败(err=5)。

核心功能

隐藏与恢复

  • 前台为游戏或全屏应用时,通过 Win32 ShowWindow 隐藏匹配 窗口标题前缀 dsh-pet、类名 Chrome_WidgetWin_1 的 pet 窗口(覆盖 display: desktop 与 display: both,无需逐个 pet id)。
  • 回到桌面等非「游戏中」状态时,再次显示同一批窗口,仍置顶且不窃取焦点。
  • 不改动 dsh-pet 自身配置文件;pet 进程继续运行,只是暂时不可见。

判定逻辑

每 350 ms 轮询一次,三种信号组合,且需 连续 2 次相同结论才执行隐藏或显示(防抖):

  1. 全屏窗口:前台窗口铺满显示器且无标题栏(WS_CAPTION)。普通最大化窗口不算(仍保留标题栏或任务栏区域)。
  2. 游戏进程:前台可执行文件位于扫描到的游戏目录(Steam 库读注册表与 libraryfolders.vdf,并包含 Epic / Xbox / GOG / Riot / WeGame 等常见路径;可用 extra_game_dirs、extra_game_exes 扩展)。
  3. 忽略进程:先检查 ignore_processes,例如全屏的 DeepSeek Harness 不会触发隐藏。

系统托盘

托盘图标名称为「宠物游戏守卫」/ Pet Game Guard,可:暂停守卫、立即显示桌宠、重新加载配置、退出。

安装与启用

宿主 profile 为 web 时,在资料给出的命令为:

dsh plugin --profile web add dsh-pet-game-guard

若宿主不是 web,将 --profile 换成你的 profile 名,例如:

dsh plugin --profile desktop add dsh-pet-game-guard

安装后 重启 DSH 宿主一次。插件会解包辅助二进制并在 DSH 启动时拉起,DSH 退出时停止;无需额外手动启动。

本地开发可链到目录(路径改为你本机绝对路径):

dsh plugin --profile web add link:/absolute/path/to/dsh-pet-game-guard

插件声明与 DSH 0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.2 兼容;安装前请对照你当前的 DSH 版本与 package.json 中的 dsh.compatibility。插件以当前 DSH 进程权限运行,安装前应阅读仓库源码与 MIT 许可证。

配置与典型用法

首次运行后,设置写在 %LOCALAPPDATA%\PetGuard\config.ini(只创建一次,更新插件不会覆盖)。常用项如下:

键 默认值 含义
enabled 1 0 则完全关闭守卫,桌宠始终可见
poll_ms 350 检测间隔(毫秒)
hide_after / show_after 2 连续多少次「在游戏中 / 不在游戏中」才隐藏或显示
hide_when_fullscreen 1 全屏前台时是否隐藏
hide_when_game_process 1 前台为游戏进程时是否隐藏
ignore_processes explorer.exe,DeepSeek Harness.exe 这些 exe 在前台时不隐藏(逗号分隔)
extra_game_dirs / extra_game_exes 空 手动追加游戏目录或可执行文件名
debug_log 1 为 1 时写入 petguard.log(512 KiB 轮转)

修改 config.ini 后,在托盘图标上右键选择 重新加载配置。

命令行调试(在 %LOCALAPPDATA%\PetGuard\ 下对 PetGuard.exe):

PetGuard.exe --once     # 单次检测结果写入 selftest.txt
PetGuard.exe --dirs     # 打印已扫描的游戏目录与额外 exe
PetGuard.exe --list     # 列出可见的 pet 窗口
PetGuard.exe --hide     # 立即隐藏
PetGuard.exe --restore  # 立即显示
PetGuard.exe --status   # 当前状态
PetGuard.exe --quit     # 请求运行中的实例退出(会先恢复桌宠)

适用场景与注意

适合:Windows 上长期开着 dsh-pet,又经常切全屏游戏或全屏应用,希望桌宠自动让路、退出后自动回来,且不想改 pet 的 JSON 配置。

需要注意:

  • 隐藏的是窗口,不会停止 dsh-pet;pet 自带的 whisper 等仍会按原 schedule 调用模型。若要在游戏期间完全静默,需在 dsh-pet 配置里关闭例如 whisperEnabled。
  • 无边框全屏视频(如 YouTube 全屏)也会触发全屏判定。若只想对游戏隐藏,可将 hide_when_fullscreen=0,仅依赖游戏进程路径判定。
  • 守卫仅在 DSH 运行期间 生效;关闭 DSH 即关闭守卫。
  • 辅助程序为 .NET Framework 4,源码在仓库 assets/PetGuard.cs。

社区插件目录站点 SkillHub 上的 dsh-pet-game-guard 页 与 GitHub 仓库相互独立索引,均非 DeepSeek / 幻方官方应用商店;生态遵循 DSH「一切皆插件」的扩展方式。

结尾

dsh-pet-game-guard 把「全屏 + 游戏目录」两类前台信号和防抖策略绑在一起,只动 pet 窗口可见性,适合 Windows 桌宠用户与 DSH 宿主同开游戏的常见组合。细节与更新记录以仓库 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/sadnessXU/dsh-pet-game-guard
  • GitHub:https://github.com/sadnessXU/dsh-pet-game-guard
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye