🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

屏幕截图 lsnnn123/dsh-screenshot-win

DeepSeek Harness
lsnnn12326 天前有提交已提供中文文档扫描:含敏感能力

框选或整屏截图,直接插入对话并保存到工作区

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add lsnnn123/dsh-screenshot-win
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · vision
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 7 处,展示前 7 条)
  • 执行外部命令来自配置/变量
    lib/index.js:122
    execFile(
  • 写入本地文件
    lib/index.js:354
    await mkdir(path.dirname(out), { recursive: true }).catch(() => {});
  • 读取本地文件
    lib/index.js:387
    const data = await readFile(savedPath);
  • 写入本地文件
    lib/index.js:552
    await mkdir(dir, { recursive: true });
  • 读取本地文件
    lib/index.js:580
    const data = await readFile(savedPath);
  • 发起网络请求
    client/client.js:411
    const response = await fetch(routeUrl(CAPTURE_ROUTE), {
  • 发起网络请求
    client/client.js:439
    const response = await fetch(routeUrl(WINDOWS_ROUTE), { cache: "no-store" });
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 框选区域截图
  • 指定窗口截图
  • 整屏截图

DSH 屏幕截图插件(Windows):聊天输入框的相机按钮 + Agent 可调用的 screenshot 工具,支持框选区域、指定窗口、整屏;截图直接进入对话,并保存到工作区。

README

由 DeepSeek 最新模型翻译生成
dsh-screenshot-win 给 DeepSeek Harness 用的屏幕截图插件(Windows)。它同时提供两半: - GUI 按钮 —— 输入框左侧工具栏上的相机图标,点开后可选「框选区域 / 整个屏幕 / 指定某个窗口」。截图会作为一张普通的图片附件插入当前会话的输入框(你可以直接发送),同时 PNG 落盘到会话工作区。 - Agent 工具 —— 名为 screenshot 的工具,模型可以自己截图,图片作为工具结果直接进入对话(模型能看到),文件同样落盘。 两半调用的是同一套宿主逻辑(同一个 /dsh-screenshot-win/capture 路由 → 同一批 PowerShell 采集脚本),不存在两套实现。 这是一个标准的 DSH bundle 插件:package.json 里声明 dsh.bundle.patch 与 dsh.client,可以像市场里的插件一样安装、在「插件」页面里启用/关闭/卸载,也可以直接发布到 npm 并提交到插件市场。
展开完整文档(README 剩余 1 节)
dsh-screenshot-win

给 DeepSeek Harness 用的屏幕截图插件(Windows)。它同时提供两半:

- GUI 按钮 —— 输入框左侧工具栏上的相机图标,点开后可选「框选区域 / 整个屏幕 / 指定某个窗口」。截图会作为一张普通的图片附件插入当前会话的输入框(你可以直接发送),同时 PNG 落盘到会话工作区。
- Agent 工具 —— 名为 screenshot 的工具,模型可以自己截图,图片作为工具结果直接进入对话(模型能看到),文件同样落盘。

两半调用的是同一套宿主逻辑(同一个 /dsh-screenshot-win/capture 路由 → 同一批 PowerShell 采集脚本),不存在两套实现。

这是一个标准的 DSH bundle 插件:package.json 里声明 dsh.bundle.patch 与 dsh.client,可以像市场里的插件一样安装、在「插件」页面里启用/关闭/卸载,也可以直接发布到 npm 并提交到插件市场。

界面截图

两张实机截图(都是用本插件自己截的):

输入框工具行的相机按钮与中文截图状态提示

整屏截图的结果(插件把图存到工作区,并在输入框提示状态)

插件市场(如 dsh-market 的详情页)会读取仓库根目录的 screenshots.json(列出 1–8 张图,路径相对该文件)来展示这些截图。

目录结构

| 路径 | 作用 |
| lib/index.js | 宿主(Node)半:配置、screenshot 工具注册、HTTP 路由、与 ctx.attachments 对接 |
| client/client.js | 浏览器半:conversation.input.left 相机按钮 + tool.call.toolview 图片行 |
| cordis.patch.yml | bundle 补丁层:把自己这一行插进 profile |
| locale/zh.json、locale/en.json | 市场元数据(meta.title / meta.description) |
| scripts/WinApi.ps1 | P/Invoke 与 GDI 封装(PrintWindow、DPI、显示器、窗口枚举、缩放、存图) |
| scripts/capture-region.ps1 | 框选覆盖层(冻结画面、框选或点选窗口、Esc 取消、超时自动取消) |
| scripts/capture-screen.ps1 | 整屏 / 指定显示器 / 指定矩形 |
| scripts/capture-window.ps1 | 指定窗口(PrintWindow,可回退到屏幕拷贝) |
| scripts/list-windows.ps1 | 可截取窗口列表(JSON) |
| test/selftest.mjs | 工具参数/输出 schema 与渲染内容自检 |
| test/e2e.mjs | 三种采集模式的端到端自检 |
| test/client-sim.mjs | 浏览器半的宿主侧模拟(模块注册、按钮流程、插图、语言、失败分支) |
| tools/asar.mjs | 只读读取 app.asar(安装环境排查用) |
| tools/check-patch.mjs | 用真实的 dsh-app-boot / dsh-plugin-manager 预演 bundle 解析与 patch 合成 |
| screenshots.json、assets/ | 市场详情页展示的界面截图(1–8 张,路径相对 screenshots.json) |
| LICENSE | MIT |

配置

在 profile 或用户级 cordis.patch.yml 的插件行里配置:

- insert:
- id: dsh-screenshot-win
name: dsh-screenshot-win
config:
saveDir: screenshots # 相对会话工作区 maxWidth: 1600 # 超过则等比缩小(0 表示不缩放) format: png # png | jpeg quality: 88 # jpeg 质量 timeoutMs: 300000 # 单次采集脚本超时 regionTimeoutSec: 180 # 框选覆盖层的自动取消时间 tool: true # 是否注册 screenshot 工具 routes: true # 是否挂载浏览器半用的 HTTP 路由

安装

方式 A:插件管理器 / 插件市场(标准做法)

plugin_manager action=install_bundle target="E:\GAME\Kingdom Rush6\dsh-screenshot-plugin"

装好后在 DSH 的「插件」页面里会出现这一项:卡片上的开关就是启用/关闭,进入详情页右侧的垃圾桶是卸载(卸载会把它从 profile 的 dependencies 里摘掉)。这两件事都由插件管理器改 profile 清单完成,不需要手工编辑。

方式 B:手工把它接成 profile bundle(本机当前采用)

本机 desktop profile 的 pnpm 安装被 profile 既有的供应链策略拦住(ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,涉及 @openviking/dsh-memory-plugin@0.5.19,与本插件无关),且 CLI 拒绝操作 Electron 托管的 profile(profile "desktop" is managed exclusively by the Electron application)。
所以本机用与插件管理器同样的数据结构手工接上,三步:

1. 目录联接:C:\Users\lsnnn\.dsh\profiles\desktop\node_modules\dsh-screenshot-win → 本目录;
2. C:\Users\lsnnn\.dsh\profiles\desktop\package.json:在 dependencies 里加 "dsh-screenshot-win": "link:E:/GAME/Kingdom Rush6/dsh-screenshot-plugin",在 dsh.profile.bundles 里加 "dsh-screenshot-win"(bundle 出现在这个数组里才等于「已启用」);
3. 用户级补丁 C:\Users\lsnnn\.dsh\cordis.patch.yml 保持为空([])——插件这一行由本 bundle 自带的 cordis.patch.yml 负责插入,两处都插会挂载两次。

自检:

node tools\check-patch.mjs

它会用真实的 dsh-plugin-manager/dsh-app-boot 断言:清单里有依赖、bundles 里已选中、包能被解析出 dsh.bundle.patch、补丁层里只有一处插入该行、合成后的 170 行里该行只出现一次。

关闭 / 卸载在方式 B 下等价于:从 dsh.profile.bundles 移除(关闭)或再从 dependencies 移除并删掉联接(卸载)。
等 profile 能正常安装后,删掉这三处、改用方式 A 即可。

宿主半的 JavaScript 只在启动时导入一次,改动 lib/index.js 需要重启应用;浏览器半每次加载页面都会从磁盘重新读取,改动 client/client.js 只要刷新页面。

使用

工具参数(screenshot):

| 参数 | 说明 |
| mode | region(默认,屏幕上框选)/ screen(整屏)/ window(指定窗口) |
| out | 输出文件;默认 <会话工作区>/screenshots/shot-<时间戳>.png |
| hwnd / window / process / active | 指定窗口(句柄 / 标题正则 / 进程名 / 当前前台窗口) |
| focus | 截图前先前置该窗口 |
| screen_fallback | PrintWindow 失败时回退到屏幕拷贝 |
| monitor / x / y / width / height | 整屏模式的显示器与矩形范围 |
| scale / max_width / format / quality | 缩放与编码 |
| list_windows | 只列出可截取窗口(结果通过错误信息返回,方便模型阅读) |
| timeout_sec / no_window_pick | 框选模式超时 / 禁用「点选窗口」 |

窗口采集用 PrintWindow + PW_RENDERFULLCONTENT,因此被遮挡的窗口(含 Electron 窗口)也能正确截取;对少数 GPU 直绘窗口失败时会自动回退到屏幕拷贝(screen_fallback)。

界面语言跟着 DSH 走:ctx.locale.active 是 zh* 显示中文,其它显示英文;拿不到 locale 服务时按浏览器语言判断。

仓库与发布

包名(也是仓库名)是 dsh-screenshot-win。原本想用的 dsh-screenshot 在 npm 上已被别人占用(0.0.1); dsh-screenshot-win 经镜像查询确认未被占用(https://registry.npmmirror.com/dsh-screenshot-win → 404)。

仓库已发布:<https://github.com/lsnnn123/dsh-screenshot-win>(public,默认分支 main,已打 dsh-plugin topic)。
别人这样安装:

plugin_manager action=install_bundle target="github:lsnnn123/dsh-screenshot-win"

本机怎么往上推

这台机器上 git push 到 GitHub 不可用,两个原因叠在一起:

- ~/.gitconfig 里有 url.https://gh.ddlc.top/https://github.com/.insteadOf = https://github.com/,把 GitHub 重写到镜像,镜像返回 429;
- 绕过镜像直连时,schannel 报 CRYPT_E_NO_REVOCATION_CHECK,换 OpenSSL 报 unable to get local issuer certificate(证书环境有中间人代理)。

而 PowerShell 的 Invoke-RestMethod -SkipCertificateCheck 访问 api.github.com 是通的,所以改用 Git Data API 发布:

pwsh -File tools\publish-github.ps1 # 把本地 HEAD 同步到 GitHub(只传变化过的文件) pwsh -File tools\publish-github.ps1 -WhatIf # 只看差异

凭据按 -Token → $env:GITHUB_TOKEN → Windows 凭据管理器里 GitHub - https://api.github.com/lsnnn123 的顺序取,token 不会打印。
(将来若要恢复 git 正常工作:git config --global --unset url.https://gh.ddlc.top/https://github.com/.insteadOf,并给 git 配好能通过代理的 CA。)

npm 发布(可选)

不被市场收录所必需;要发就这样:

npm publish --access public --registry=https://registry.npmjs.org/

发布前确认:

- package.json 的 private 必须不存在(本包已移除);
- files 覆盖 lib、client、scripts、locale、cordis.patch.yml、README.md、LICENSE——少了 scripts,装出来的包会在采集时报找不到脚本;
- main / exports["."] 指向的文件必须真的存在(插件管理器安装时要求入口产物就位);
- author / repository / homepage 与 LICENSE 的版权署名目前留空(若要发 npm,repository 需指回本仓库)。

「插件」页面卡片直接显示 package.json 的 description(本包为中文);市场条目文案读 locale/zh.json、locale/en.json 的 meta.title / meta.description。

上传到插件市场

⚠️ dsh-market/dsh-market 是市场应用本身,不是插件目录(它自己的 README 明确写了「请不要往本仓库提插件条目」)。
市场的插件列表来自精选目录 awesome-dsh-plugin/awesome-dsh-plugin,站点是 <https://awesome-dsh-plugin.com>;市场每次打开都实时抓 awesome-dsh-plugin.com/plugins.json。

上架 = 给精选目录提一个 PR,只加一个文件:data/plugins/lsnnn123__dsh-screenshot-win.yml (本仓库 market/ 下已经放好了这个文件,照抄即可)。description.en 必填,含 : 必须加引号;分类用 tools。

收录条件(CI 自动查):

| 条件 | 本仓库 |
| package.json 声明 dsh.bundle(最常见的被拒原因是只写 dsh.client) | ✅ ./cordis.patch.yml |
| 仓库有真实可用代码 | ✅ |
| 仓库创建满 1 天 | 2026-10-09 创建 → 次日之后才能提 |
| 打了 dsh-plugin topic | ✅ |
| npm 包 | 可选,没有也能收录(install 走 github:owner/repo) |
| screenshots.json | 可选,有的话市场详情页会展示截图 |

社区里已有别的截图插件(paicat1/dsh-screenshot、wangzhanchao883/dsh-screenshot-capture、 deepseekbluefish/dsh-screenshot-plugin、ntesicn/dsh-screenshot-xn),名字与功能侧重都不同,不冲突。

验证

node test\selftest.mjs # 工具 schema
node test\e2e.mjs # 三种采集模式(会真的截一张图)
node test\client-sim.mjs # 浏览器半的宿主侧模拟
node tools\check-patch.mjs # bundle 接线与补丁合成

运行中还可以直接查询宿主半:

Invoke-WebRequest http://127.0.0.1:19387/dsh-screenshot-win/status

返回插件版本、默认保存目录,以及浏览器半的状态(client.bundle 是否已登记、client.advertised 是否已进入页面启动名单)。

已知限制

- 仅 Windows(依赖 GDI / PrintWindow 与 PowerShell 7)。
- 框选模式需要真人拖拽;纯自动化环境可传 -TimeoutSec 观察取消路径。
- 浏览器半的槽位注册只能刷新页面后在真实 GUI 中确认(本插件无法控制浏览器)。
- 浏览器半若在页面加载时拿不到 locale 服务,会先按浏览器语言显示,并在下一次渲染时自动换成 DSH 的语言。
预览分享卡片长什么样 ↓lsnnn123/dsh-screenshot-win
分享 · DeepSeek Harness Hub
lsnnn123/dsh-screenshot-win

框选或整屏截图,直接插入对话并保存到工作区

这是你的仓库?认领条目

回到顶部