内容
# 桌面电脑使用(DCU)
<p align="left">
<img alt="许可证:MIT" src="https://img.shields.io/github/license/dev-willbird1936/Desktop-Computer-Use">
<img alt="最新版本" src="https://img.shields.io/github/v/release/dev-willbird1936/Desktop-Computer-Use">
<img alt="平台:Windows" src="https://img.shields.io/badge/platform-Windows-0078D6">
</p>
**桌面电脑使用(DCU)**,或简称 **DCU**,是一款后台Windows电脑使用MCP服务器。它可以控制桌面应用程序,而无需移动真实的光标、抢占焦点或使目标应用程序将其自身视为焦点。
在代理指令中使用简称 **DCU** 以将其与内置的前台电脑使用工具区分开来:
> 使用DCU在后台控制Windows桌面。
一个绿色的虚拟光标在您正常工作的同时显示DCU的操作。
## 为什么选择DCU
| 功能 | 结果 |
| --- | --- |
| 无焦点控制 | 您的活动应用程序、键盘焦点和真实光标保持可用。 |
| UIA优先操作 | DCU在窗口消息回退之前使用无障碍模式。 |
| 后台截图 | 它可以捕获许多可见或被遮挡的窗口,而无需激活它们。 |
| 可观察的操作 | 操作结果报告检测到的效果,而不仅仅是调度成功。 |
| MCP原生接口 | Claude Code、Codex和其他MCP客户端可以使用相同的工具合约。 |
基准测试套件和当前结果在 [`docs/benchmarks.md`](docs/benchmarks.md) 中有记录。
## 快速入门
从 [最新版本](https://github.com/dev-willbird1936/Desktop-Computer-Use/releases/latest) 下载 `dcu.exe`。它是一个独立的Windows可执行文件,不需要单独的.NET安装。
### Claude Code
```bash
claude mcp add dcu -- "C:\path\to\dcu.exe"
```
### Codex 或其他MCP客户端
```toml
[mcp_servers.dcu]
command = 'C:\path\to\dcu.exe'
```
随时运行诊断:
```powershell
.\dcu.exe --doctor
```
## 工具
| 工具 | 功能 |
| --- | --- |
| `list_apps` | 列出具有可见窗口的正在运行的应用程序。 |
| `get_app_state` | 返回可访问性树快照、标记元素、操作、值和可选的注释截图。 |
| `click` | 使用UIA模式或消息点击并报告观察到的效果。 |
| `type_text` | 通过控制消息或UIA值模式输入文本。 |
| `press_key` | 发送按键或按键组合。 |
| `scroll` | 使用UIA滚动模式,然后是滚轮消息回退。 |
| `drag` | 执行基于消息的拖动,带有插值运动。 |
| `set_value` | 直接设置值或切换状态。 |
| `wait_for` | 在服务器上轮询文本、元素或窗口状态。 |
| `execute_sequence` | 在单个服务器端批次中运行多个步骤。 |
| `hide_cursor` | 隐藏装饰性虚拟光标。 |
| `health_check` | 检查桌面会话、UIA线程和叠加层。 |
## 设置
DCU 读取可执行文件旁边的 `settings.json`,然后回退到 `%APPDATA%\shadow-use\settings.json`。
> **安全:** 默认情况下,信任门禁用。DCU 对您选择的目标执行操作,包括密码字段。
```json
{
"AllowUiaTextFallback": true,
"EnableBoundsGuard": false,
"EnableDesktopCheck": false,
"ShowVirtualCursor": true,
"EnableFocusGuard": true,
"PostActionDelayMs": 150
}
```
| 键 | 默认值 | 含义 |
| --- | --- | --- |
| `AllowUiaTextFallback` | `true` | 允许UIA `SetValue` 作为输入回退。它可以短暂地将某些应用程序置于前台。 |
| `EnableBoundsGuard` | `false` | 在窗口在上一次快照后移动时拒绝坐标输入。 |
| `EnableDesktopCheck` | `false` | 在锁屏或安全桌面上拒绝操作。 |
| `ShowVirtualCursor` | `true` | 在操作期间显示绿色装饰光标。 |
| `EnableFocusGuard` | `true` | 在操作获取后恢复前台窗口和插入点。 |
| `PostActionDelayMs` | `150` | 执行后续快照前的等待时间。 |
运行 `dcu-settings.bat` 以在浏览器中编辑这些设置并保存它们。
## 从源代码构建
需求:
- Windows
- .NET 10 SDK
```powershell
dotnet build src/ShadowUse/ShadowUse.csproj
dotnet run --project src/ShadowUse/ShadowUse.csproj -- --doctor
```
创建独立的发布可执行文件:
```powershell
dotnet publish src/ShadowUse/ShadowUse.csproj -c Release -r win-x64 `
--self-contained true -p:PublishSingleFile=true -o publish
```
## 架构
```text
Program.cs MCP stdio主机;日志输出到stderr
Config/Settings settings.json加载器
Automation/UiaThread 专用STA线程用于UIA COM
Automation/UiaService 快照、元素ID和重新解析
Automation/BackgroundInput UIA模式优先输入,带有消息回退
Capture/ScreenshotService PrintWindow和可见区域捕获
Overlay/VirtualCursorOverlay 装饰光标和点击动画
Safety/Guard 可选边界和桌面防护
```
## 已知限制
- 读取原始输入或 `GetAsyncKeyState` 的游戏和应用程序无法看到发布的消息。
- 修饰符快捷键不总是会触发,因为发布的消息不会更新系统级修饰符状态。Chrome地址栏焦点通过UIA作为已验证的例外情况进行处理。
- 消息点击很少会使应用程序自行激活。
- `PrintWindow` 在某些硬件加速应用程序上失败,然后回退到可见区域捕获。
- UIA文本回退可以短暂地将某些应用程序置于前台。
- 最小化的窗口没有可捕获的后台表面。
- 非提升的DCU进程无法控制提升的目标。
---
<p align="center">
<b>桌面电脑使用(DCU)</b> — 由 <a href="https://github.com/dev-willbird1936">dev-willbird1936</a> 设计和构建。<br>
MIT许可。在重新分发或重新品牌时保留LICENSE和NOTICE文件。
</p>