DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

zhenningTech-Cloud /

zhenningTech-Cloud/dsh-wechat-shot

Verified

WeChat-style region screenshot button for the DeepSeek Harness composer (Windows).

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@ffd19272

dsh-wechat-shot

DSH 聊天输入框左侧的微信式区域截图按钮:冻结桌面 → 框选 → 确认后直接作为图片附件进入当前草稿,同时复制到剪贴板。

Windows only. 依赖 Windows PowerShell 5.1、WinForms 和运行时 C# 编译;macOS / Linux 不可用。

覆盖微信截图的核心链路(默认保留当前窗口,剪刀右侧箭头可选“隐藏窗口截图”、拖动时实时显示选框、8 手柄缩放、整块拖动、放大镜、仅“取消/完成”两个大按钮、Enter 确认、Esc/右键取消、Alt+A 唤起、剪刀图标);标注工具已按要求移除。OCR、滚动截长图、贴图置顶等扩展能力未实现。

overlay preview

安装

npm 发布版(推荐):

dsh plugin add dsh-wechat-shot

也可以在 DSH 的「插件」面板里搜索 dsh-wechat-shot。只支持 Windows。

交互

操作 行为
点击输入框左侧剪刀按钮 / Alt+A 保留当前 DSH 窗口,打开全屏冻结遮罩(默认,和微信“保留当前窗口”一致)
点击剪刀右侧箭头 → “隐藏窗口截图” 先隐藏当前 DSH 窗口,再打开冻结遮罩
按住左键拖动 实时显示选框和尺寸(最小 10×10),松开后才出现工具栏
拖动选区内部 移动选区
拖动 8 个手柄 缩放选区(最小 20×20)
工具栏“完成”大按钮 / 双击选区 / Enter / Ctrl+C 确认:写 PNG、复制到剪贴板、回传 Host
工具栏“取消”大按钮 / Esc / 右键 取消,不产生附件
Ctrl+A 全屏选区
方向键 / Shift+方向键 选区移动 1 px / 10 px

确认后客户端把 PNG 变成 File,走 conversation.createDrafts(sessionId, [file]) → inputActions.addAttachments(ids) 落入当前草稿;输入框拒绝时用 releaseDraftAttachments 回滚。

结构

文件 作用
package.json bundle 清单:dsh.bundle.patch + dsh.client(web / immediately / inject ui-conversation)
cordis.patch.yml - insert: 一条 wechat-shot 插件行
index.js Host:注册 POST /api/wechat-shot/capture,执行 assets/capture.ps1,读回 PNG 字节
client.js 浏览器:conversation.input.left 剪刀按钮、Alt+A、右侧“截图选项”菜单(隐藏窗口截图)、fetch、草稿附件、失败回滚与提示
assets/capture.ps1 薄启动器:编译/缓存 Overlay.cs,输出单行 JSON
assets/Overlay.cs WinForms 遮罩:冻结帧、选区几何、放大镜、确认/取消工具条、剪贴板、PNG
locale/{zh,en}.json 插件面板的 meta.title / meta.description
icon.svg 插件图标

路由契约

POST /api/wechat-shot/capture     (requestBody: buffered, 超时 300 s)
  body {"hideWindow":true}            可选;省略/false 表示保留当前窗口
  200 image/png                       确认的选区
  200 {"ok":false,"cancelled":true}   Esc / 右键取消
  405 / 500 {"ok":false,"error":"…","code":"…"}
  • 暂存目录:%TEMP%\dsh-wechat-shot\,保留最新 20 张 PNG。
  • C# 编译缓存:%TEMP%\dsh-wechat-shot-build\overlay-<sha256 前 16 位>.dll;缓存缺失或源码变更时重编。
  • capture.ps1 用 UTF-8 显式读 Overlay.cs,自身保持纯 ASCII;stdout 用 UTF-8 字节写单行 JSON,避免 PowerShell 5.1 重定向的代码页乱码。

安装

要求 Windows 10/11、DSH Desktop(web profile)和 Windows PowerShell 5.1。

从 npm 安装:

dsh plugin --profile desktop add dsh-wechat-shot

本地开发时,在支持 plugin_manager 的会话中:

plugin_manager install_bundle  target = C:\Users\40529\Documents\deepseek-harness\default-workspace\wechat-shot

安装结果以返回的 application / warnings 为准;新 bundle 可以由 HMR 激活。装完刷新页面,输入框左侧应出现剪刀按钮。不要手写 profile 的 package.json / cordis.patch.yml。

卸载:plugin_manager remove_bundle,target 为包名 dsh-wechat-shot 或安装标识。

验证

已实测:

  • Add-Type 编译通过;capture.ps1 -SelfTest → {"ok":true,"checks":22,"fails":[]},含工具栏只剩两个按钮、按钮尺寸与 Bake 缩放坐标断言。
  • capture.ps1 -Preview 生成 900×560 场景图,目检 8 手柄、两个大号“取消/完成”圆钮与提示字号(见 docs/preview.png)。
  • GUI 按钮已渲染为剪刀图标,UI Automation 节点为 框选截图(dsws-btn);Invoke 后真实启动 capture.ps1 遮罩。
  • “隐藏窗口截图”选项与默认路径分开验证(走真实客户端/路由,插件重载后):默认点剪刀,Host 子进程参数为 -HidePid -1,遮罩打开时 DSH 顶层窗口 IsWindowVisible=true;点右侧“截图选项”→“隐藏窗口截图”,子进程参数为 -HidePid <Host PID>,遮罩打开时 DSH IsWindowVisible=false;取消后恢复可见并聚焦。capture.ps1 -HidePid -1 与 -HidePid <pid> 也分别直跑验证过;0 保留为“隐藏当前前台窗口”的兜底。
  • 拖动过程中实时显示绿色选框和尺寸角标,不显示手柄/工具栏;松开后才出现 8 手柄和工具栏(遮罩快照目检)。
  • 工具条界面按系统 DPI 放大(本机 200%,按钮 96×96 物理像素、图标 34 px 半径),提示文字从 14 px 提到 30 px 物理像素;真实鼠标点“完成”得到 400×300 且 copied:true,点“取消”得到 cancelled:true。
  • 真实鼠标驱动(SetCursorPos + mouse_event,DPI-aware):物理 (300,200)→(700,500) 拖选,Esc → cancelled;再拖 400×300 后按 Enter → PNG 400×300、copied:true,内容与同一坐标的参考裁剪一致(鼠标悬停高亮会带来极小差异)。
  • 注意:不要用 PostMessage(WM_MOUSEMOVE) 验证坐标——注入点会被 WinForms 按 DPI 虚拟化,看起来像“半尺寸/漂移”,与真实鼠标行为不同(已踩过)。
  • 确认后 PNG 已实际进入当前草稿(UIA 可见缩略图);测试附件随后全部移除。
  • node --check index.js client.js、package.json/locale JSON 解析、cordis.patch.yml 经 js-yaml 真解析、capture.ps1 纯 ASCII 无 BOM。
  • Host 用 execFile(..., { windowsHide: true }) 隐藏控制台;不能给 powershell.exe 传 -WindowStyle Hidden,否则遮罩窗也被隐藏(已实测)。Host 仅在 {"hideWindow":true} 时把自身 process.pid 作为 -HidePid 传给启动器,默认传 -1;0 时启动器回退到“隐藏当前前台窗口”。Host 逻辑改动可通过禁用/再启用插件让 Host 重新加载(本次已这样验证),无需重启整个 DSH。

未实测/限制:

  • 多显示器负坐标下的跨屏选择只做了部分实测;本机 200% DPI 已适配:form/冻结图/选区统一使用物理像素,真实鼠标坐标本身就是物理像素,不再乘 DPI 因子(乘了才会把 400×300 选框变成 800×600)。
  • Alt+A 是页面内快捷键(按钮挂载且可见时生效),不是操作系统级全局热键。
  • 同一时刻只应有一个遮罩;Host 端未做并发互斥。
  • 没有标注工具(按要求只保留确认/取消)、OCR、滚动截长图、贴图置顶。

静态检查

在工作区根目录:

node _probe\ss\check-bundle.mjs
node _probe\ss\check-yaml.mjs
powershell.exe -NoProfile -NonInteractive -STA -File wechat-shot\assets\capture.ps1 -SelfTest

-Preview <png> 可无交互渲染预览图。

归属

遮罩交互参考了两个 MIT 插件:dsh-screenshot-plugin(deepseekbluefish)的几何/手柄实现思路和 dsh-quick-screenshot(JackEngineer)的草稿附件链路;本包代码为重新实现,未逐行复制。

—/ 5

No ratings yet

Verified DSH bundle

Commit ffd19272e092

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout