Skip to content

Releases

v0.2.0 — 区域截图与原生截图 helper

Choose a tag to compare

@leolee9086 leolee9086 released this 15 Sep 15:40

v0.2.0 — 区域截图与原生截图 helper

新增:截图可以只截一部分

computer_screenshot 不再只能整屏或整显示器:

参数 说明
x / y / width / height 捕获区域,单位为虚拟桌面像素,允许负值(副屏可能在原点左侧/上方)
scale 裁剪后缩放倍数,用于放大看清小字

超出虚拟桌面的区域会被裁剪到桌面内,且回报的 source_bounds 始终是实际截取的区域。
这条不变量是局部截图之后坐标操作依然正确的依据:provider 用「source_bounds + 图像尺寸」
的比例关系把截图坐标还原成屏幕坐标(见 src/tool.js 的 mapScreenshotPoint)。

新增:Windows 截图改为自带原生 helper

native/dsh-screen.exe(Rust + Win32 GDI,单文件约 390KB,MIT)。换掉 PowerShell 脚本的理由:

  • 不必再为每次截图付一次 powershell.exe 的启动代价
  • 屏幕几何与像素读取进入强类型代码,消除「脚本层属性取到 null 却继续运算」这类只在运行时暴露的问题
  • 抓屏的 ROP、裁剪与缩放由我们自己掌握

协议与文档见 native/README.md。

修掉的两个 GDI 坑(都写进文档了,免得重犯)

  1. BitBlt 的 ROP 不能带 CAPTUREBLT:部分 GPU/DWM 组合下它会静默产出全黑位图。
    改用纯 SRCCOPY,与参考实现 xland/ScreenCapture 一致。
    代价是极少数分层窗口(个别悬浮窗/输入法候选框)可能不再出现在截图里。
  2. GetDIBits 的 hdc 要传创建该位图的内存 DC,不是 NULL。
    MSDN 说「lpvBits 非空时 hdc 必须为 NULL」,但实测传 NULL 直接返回 0(失败)。

行为变化(需要留意)

  • 找不到原生 helper 时截图会直接报错并提示构建方式,不再静默回退到 PowerShell。
    从源码安装的用户需要先 cd native && cargo build --release。
    不做回退是刻意的:两条实现都要维护、测试覆盖不到,而且用户不知道自己实际在跑哪个 —— 那是伪兼容。
  • runner.run() 现在支持向子进程写入 stdin(原生 helper 用它传请求参数)。

安装

pnpm dsh plugin --profile web add D:\dev\dsh-computer-use

装完需要用 Harness 常规的重启入口重启进程(只刷新浏览器页面不会挂载)。