Repository navigation
Releases
Releases · leolee9086/dsh-computer-use
v0.2.0 — 区域截图与原生截图 helper
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 坑(都写进文档了,免得重犯)
BitBlt的 ROP 不能带CAPTUREBLT:部分 GPU/DWM 组合下它会静默产出全黑位图。
改用纯SRCCOPY,与参考实现 xland/ScreenCapture 一致。
代价是极少数分层窗口(个别悬浮窗/输入法候选框)可能不再出现在截图里。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 常规的重启入口重启进程(只刷新浏览器页面不会挂载)。