dsh-computer-use-windows:用 Win32 原语让 Harness 控制 Windows 桌面

前言

在 DeepSeek Harness(DSH)里做工作流时,模型往往需要「看见屏幕、点鼠标、敲键盘、切窗口」——而不是只在终端里跑命令。常见做法会依赖 UI Automation、SendKeys 或各应用的脚本接口,稳定性和覆盖范围因场景而异。下面介绍社区插件 dsh-computer-use-windows(维护者 pdong15dth):通过 12 个 computer_* 工具,把操作落到 Win32 调用上,由本机编译或缓存的原生 helper 进程执行,README 明确说明不使用 UI Automation、也不使用 SendKeys。

这是什么

dsh-computer-use-windows 是 DSH 的 Host 插件包(package.json 版本 1.0.0,许可证 MIT),分类为工作流。它给模型提供对当前 Windows 桌面的真实控制能力:鼠标、键盘、截图、窗口枚举与操控、剪贴板、启动应用/打开路径或 URL。动作层与 README 中的机制对应关系如下。

能力 Win32 机制
鼠标 SendInput(绝对坐标、按键、滚轮)
键盘 SendInput(Unicode、ctrl+shift+t 等组合键)
屏幕 GDI+ CopyFromScreen,按物理像素分辨率
窗口 EnumWindows、SetForegroundWindow、ShowWindow、PostMessage(WM_CLOSE) 等
剪贴板 真实 Win32 剪贴板(STA 工作线程)
启动 Process.Start + UseShellExecute(与 Win+R / 开始菜单同类路径)

插件以当前 DSH 进程所属用户权限运行 helper,不会自行提权;安装前应在 GitHub 阅读源码与 LICENSE,再决定是否启用。

核心功能:12 个工具

README 列出的工具及用途如下(名称保持原文)。

工具 作用
computer_info 虚拟屏幕、显示器、光标、DPI 感知状态、是否提升权限
computer_screenshot 整桌、单显示器或指定区域截图
computer_mouse_move 绝对坐标移动指针
computer_click 左/右/中键,单击或双击,可先移动
computer_drag 按下、插值移动、释放
computer_scroll 在指针处垂直/水平滚轮
computer_type Unicode 输入(\n 为 Enter,\t 为 Tab)
computer_key 快捷键与命名键,如 ctrl+shift+t 或 ["ctrl+a", "delete"]
computer_clipboard 读、写或清空剪贴板
computer_windows 列出顶层窗口(句柄、标题、pid、矩形、状态)
computer_window_control 聚焦、最小化、最大化、还原或关闭窗口
computer_launch 启动应用、打开路径/文档或 URL

截图结果会附带坐标映射(originX、originY、scale):图像像素 (ix, iy) 对应屏幕点 (originX + ix*scale, originY + iy*scale)。所有工具坐标均使用 computer_info 返回的虚拟屏幕空间中的物理像素。

原生 helper 如何就绪

首次调用工具时,Host 插件会用 Windows 自带的 .NET Framework 编译器编译 helper/ComputerHelper.cs,输出缓存到:

%LOCALAPPDATA%\dsh-computer-use\dsh-computer-helper.exe

编译命令在 README 中写为使用 %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\csc.exe;源码变更时按 SHA-256 戳记重建。若 csc.exe 不可用,会回退到 helper/serve.ps1(Add-Type + 相同 JSON 行协议),启动较慢。可通过环境变量覆盖:

变量 效果
DSH_COMPUTER_USE_HELPER 使用指定已编译 helper .exe
DSH_COMPUTER_USE_CSC 使用指定的 csc.exe 编译

helper 为 /target:winexe,Host 以 windowsHide: true 启动,避免控制台闪窗。

安装与启用

插件是纯 Host 包:无构建步骤、无 npm 依赖;ESM 与原生 helper 在首次使用时编译。

从本地目录安装

在 Harness 会话中执行(路径改为你 clone 或解压后的绝对路径;资料要求通过 bundle 安装,勿自行拼接未在文档出现的 CLI 命令):

plugin_manager { action: "install_bundle", target: "<absolute path to this directory>" }

安装会把该目录链入 profile,并插入 cordis.patch.yml 中的 computer-use-windows 行。

从插件市场索引发现

仓库发布 format-1 市场索引,可在 Harness Plugins → Discover 中发现并安装。索引 URL:

https://raw.githubusercontent.com/pdong15dth/dsh-computer-use-windows/main/market/index.json

将其加入 @deepseek-ai/dsh-plugin-market 的 indexes 列表(例如在 profile 的 cordis.patch.yml 中),Discover 页会列出 dsh-computer-use-windows。代理侧 plugin_market 的 list_indexes / list_plugins / list_versions 给出的安装目标为 commit 固定形式,例如:

git+https://github.com/pdong15dth/dsh-computer-use-windows.git#<40-hex-commit>

社区目录页:https://www.skillhub.cn/plugins/pdong15dth/dsh-computer-use-windows(独立站点,与 DeepSeek / 幻方无官方从属关系)。

典型用法思路

README 的 Verification 节记录了在 Windows 11 build 26100、双 1920×1080、per-monitor-v2 上的实测流程,可作为复现顺序参考:

  1. 安装 bundle 后确认 plugin_manager 报告 application: applied。
  2. 调用 computer_info 确认显示器与 DPI 状态。
  3. 用 computer_screenshot 获取带 origin/scale 的图像块。
  4. 用 computer_windows 与 computer_window_control 聚焦、最小化、还原或关闭目标窗口。
  5. 用 computer_launch 启动 Notepad 等应用。
  6. 在确认前台窗口正确(computer_windows 中目标窗口带 [focused])后,使用 computer_type / computer_key 输入;README 强调焦点是全局状态,人机共用桌面时两次调用之间焦点可能变化。
  7. 读写剪贴板用 computer_clipboard;ctrl+c 成功会覆盖用户剪贴板。

坐标类操作(computer_click、computer_drag、computer_scroll)在 helper 层有测试覆盖;插件层验证时若桌面仍被人使用,可能为避免误点而跳过,使用前宜保证桌面相对空闲。

适用场景与注意

适合:需要在 DSH 工作流里做真实桌面自动化——例如打开应用、填表、截图取证、窗口管理——且接受 Win32 输入注入语义的场景。

务必知晓的限制(来自 README Safety / Known limits):

  • 输入注入到当前焦点窗口;模型可点击、输入、关闭窗口,启用前应审查会话权限并保存无关工作。
  • 非提升权限的 helper 无法向提升权限窗口注入输入;无法触及 UAC 安全桌面。
  • 部分全屏游戏与反作弊窗口可能忽略合成输入。
  • DRM 保护内容截图可能为黑屏。
  • 成功 ctrl+c 会覆盖用户剪贴板。

DSH 生态理念是「一切皆插件」;本插件 GitHub 星标数为 1(以目录线索为准),适合自行审阅 helper/ComputerHelper.cs 与 PROTOCOL.md 后再用于生产环境。

结尾

dsh-computer-use-windows 把桌面控制收敛到 12 个 computer_* 工具与 Win32 helper,避免 UI Automation 与 SendKeys 路径,并给出截图坐标映射与市场索引安装方式。进一步了解实现与验证细节见仓库 README 与 helper 报告。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜