前言¶
做 DSH 插件开发的人大概都经历过这种时刻:想让模型看一眼屏幕上的报错窗口、一张图、一段 UI,得先切出去开截图工具,截完保存,再回到 DSH 把文件拖进输入框。一次操作要跳出当前窗口三四次。dsh-screenshot 就是针对这段流程的:在输入框下面加一个「截图」按钮,点一下,DSH 窗口自己收起,你在屏幕上拖个框,松手后那块图直接落进输入框的附件条。
它由 syhliuyiqing 维护,分类是客户端,GitHub 上目前 2 stars。下面介绍它的能力边界、安装方式和几个实现取舍。
这是什么¶
一个 DSH 桌面端插件,用三层配合把「框选屏幕区域 → 变成输入框待发附件」这一段自动化掉。入口只有输入框下那个按钮,没有全局快捷键。
解决的核心问题是:减少让模型看屏幕内容的操作步骤,让截图和投递在同一个动作里完成。适用前提是 Windows 10 / 11,抓屏走 PowerShell + GDI+,其它平台还没写。
核心功能¶
1、点击「截图」按钮 → DSH 窗口最小化 → 整屏压暗 → 鼠标变成十字 → 拖矩形框选 → 松手后裁出框住的区域 → DSH 弹回前台 → PNG 出现在输入框附件条。
2、按住 Alt 再点,直接截整屏,不走框选。
3、拖动过程中框边实时显示 宽 x 高。
4、右键或 Esc 取消,什么都不放,也不弹错误。
5、成品长边超过 1920 会自动缩一档,避免把几 MB 原图直接塞给模型;框选出来的图默认按原样保留,除非本身就超了 1920。
安装与启用¶
官方只提供本地目录安装,没有 dsh plugin add github:... 这种命令。两种方式:
方式一:在 DSH 的「插件」页里添加本目录(本地目录安装)。
方式二:由 Agent 调 plugin_manager 的 install_bundle,指向这个目录的绝对路径。
装完要刷新页面。如果是从旧版更新,需要把 DSH 完全退出再打开,Host 半才会加载新代码。
两个前置要求:DSH 桌面版 0.2.1 及以上;系统自带的 Windows PowerShell 5.1 即可,不用装 pwsh。
典型用法¶
装好后,操作对照如下:
| 操作 | 结果 |
|---|---|
| 点「截图」 | 框选一块区域 |
Alt + 点 |
整屏 |
| 拖动 | 框选,实时显示尺寸 |
右键 / Esc |
取消 |
入口只有输入框下那一个按钮。想截某个应用里展开的菜单,需要先用快捷键把菜单调出来,再点截图——因为框选期间是全屏模态。
实现与取舍¶
插件由三个文件各管一段:
| 文件 | 职责 |
|---|---|
client.js |
输入框下面的按钮。取到图后调 conversation.createDrafts() + inputActions.addAttachments(),把 PNG 变成输入框里的待发附件 |
index.js |
Host 半。注册 POST /dsh-screenshot/capture,过 ctx.connection.requestRejection() 的鉴权,再通过 Host 的 subprocess 服务串行跑 PowerShell,回 PNG 字节 |
capture.ps1 |
真正干活:沿进程树找到 DSH 窗口句柄 → 最小化 → 抓虚拟桌面 → 铺可选区遮罩 → 裁切/缩放 → 存 PNG → 不管成败都恢复窗口 |
几个值得注意的设计取舍:
- 先抓整屏再选。选完从那张原图上裁,所以成品不会带上遮罩、边框或尺寸提示,也避免了「窗口还没最小化完就开截」的时序问题。
- 选择器只编译一次。C# 现编译在冷机上要十几秒,编译产物缓存到
%TEMP%\dsh-screenshot\selector-v1.dll,之后每次调用稳定在 1.5 秒上下。 - 鉴权走 DSH 自己的那套。路由没有另开鉴权,直接用
connection.requestRejection(),只有带着本机浏览器会话 cookie 的页面能调,命令行curl过去是 401。 - 图片不落盘。Host 写到临时目录,客户端取走字节后立刻删;除了这一个临时文件,图不会落到别处。
- 起进程走 Host 的
subprocess服务,不直接引 Node 的进程模块:可执行文件由 provider 解析,stdio 和回收也归 provider,插件手里不留裸的进程能力。
已知限制¶
- 只有 Windows。
- 多显示器且各屏缩放比不同时,坐标可能有偏差(目前按系统 DPI 处理)。
- 框选期间全屏模态,展开菜单类内容要先调出来再截。
- 没有全局快捷键,入口只有输入框下那个按钮。
适用场景与注意¶
适合在 Windows 上用 DSH 桌面版、经常需要让模型看屏幕内容的人。它的抓屏能力以当前 DSH 进程权限运行,capture.ps1 会最小化/恢复窗口并调用 PowerShell + GDI+;安装前应通读源码,确认许可证为 MIT,再决定是否引入。
结尾¶
dsh-screenshot 的价值不在于多强,而在于把一个重复的多步操作收成一次点击,同时把窗口生命周期、临时文件和鉴权都处理干净。目录页在 https://www.skillhub.cn/plugins/syhliuyiqing/dsh-screenshot,源码在 https://github.com/syhliuyiqing/dsh-screenshot。