READMESource: main@9f0fb68f
静默浏览 · dsh-quiet-browser
给 DeepSeek Harness 用的窗口行为插件:DSH 的内置浏览器继续工作,但不再盖住你正在用的窗口,也不抢键盘焦点。
DSH 的浏览器工具需要一个真实窗口来加载页面。这个窗口默认会弹到最前;静默浏览在后台盯着它,把它按到所有窗口的最底层,并改成“不激活”窗口。
能力
- 只处理标题以 dsh-browser 开头的窗口,不碰 DSH 主窗口、微信、资源管理器、你开的 Chrome / Edge。
- 窗口仍然存在:页面照常加载、点击、执行 JS、截图。
- 不抢焦点:浏览器窗口不会成为前台窗口,你继续在原窗口里打字。
- 不遮挡:窗口被压到 HWND_BOTTOM,任何普通窗口都在它上面。
- 设置界面:DSH 设置 → 静默浏览,可随时启用 / 暂停。
- 暂停后会清掉“不激活”样式,浏览器恢复普通行为,方便你手动接管或处理验证码。
安装
在 DSH 里打开 设置 → 插件管理器,安装下面任一来源:
github:Yyhy110421/dsh-quiet-browser
file:<本仓库的绝对路径>
装完重启 DSH 生效。
注意:file: 安装是实体拷贝,改完源码要卸载再装才会更新;update 只支持 npm 注册表插件。 本插件不发布到 npm。
配置
设置文件:$DSH_HOME/data/quiet-browser.json(没有 DSH_HOME 时用 ~/.dsh)。
{
"enabled": true,
"pollMs": 200
}
- enabled:是否启用。也可以在设置页切换。
- pollMs:兜底轮询间隔(毫秒,50–5000),默认 200。窗口创建/显示/切前台时由 WinEvent 钩子立即处理,轮询只是兜底。
工作方式
- 插件随 DSH 启动一个隐藏的 PowerShell 守护进程(lib/quiet-browser.ps1)。
- 守护进程用 SetWinEventHook 监听前台切换、窗口显示、标题变化;命中目标就:
- 加 WS_EX_NOACTIVATE,让窗口不能被激活;
- 调 SetWindowPos(HWND_BOTTOM),压到所有普通窗口下面。
- 如果浏览器抢到了前台,守护进程会把上一个用户窗口切回去(SetForegroundWindow,失败再试 SwitchToThisWindow)。
- 插件卸载 / 暂停时,守护进程清掉 WS_EX_NOACTIVATE,窗口恢复正常。
不修改 dsh-builtin-browser,也不修改 DSH 本体。
已知限制
- Windows 创建浏览器窗口的一瞬间可能仍有一帧闪动;守护进程会在窗口显示后立即压回去。若你实测仍明显,请开 issue。
- 目标按标题匹配(dsh-browser 或 dsh-browser [...])。如果你有别的程序故意用这个标题,也会被压到底层。
- 浏览器窗口被压在最底层后,正常情况下会被 DSH 主窗口挡住;这是预期行为。需要看页面时,在设置里暂停,或等任务结束。
- 截图优先走 CDP;窗口被遮挡时 Electron 原生 capturePage 可能失败,插件会自动回退。实测 dsh_browser_screenshot 正常。
- 仅 Windows。
开发
# 查看当前目标窗口与“不激活”状态
powershell.exe -NoProfile -ExecutionPolicy Bypass -File lib/quiet-browser.ps1 -Action status
# 前台运行守护进程(Ctrl+C 退出)
powershell.exe -NoProfile -ExecutionPolicy Bypass -File lib/quiet-browser.ps1 -Action watch -PollMs 100
宿主部分零第三方依赖;窗口操作全在 lib/quiet-browser.ps1(Add-Type + Win32 API)。
License
MIT © 2026 Yyhy110421
No comments yet. Be the first to write one.