前言¶
在 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 次相同结论才执行隐藏或显示(防抖):
- 全屏窗口:前台窗口铺满显示器且无标题栏(
WS_CAPTION)。普通最大化窗口不算(仍保留标题栏或任务栏区域)。 - 游戏进程:前台可执行文件位于扫描到的游戏目录(Steam 库读注册表与
libraryfolders.vdf,并包含 Epic / Xbox / GOG / Riot / WeGame 等常见路径;可用extra_game_dirs、extra_game_exes扩展)。 - 忽略进程:先检查
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