computer-use 插件的API 和使用方法

现在我已经完整了解了 computer-use 插件的全部 API 和使用方法。以下是详细的使用示例说明:


Computer Use 插件使用指南

Computer Use 插件可以通过 @oai/sky 库自动化控制 Windows 应用程序的 UI,支持截图、点击、输入、滚动、拖拽等操作,即使窗口被遮挡也能工作。


初始化

每次使用前需要先初始化 sky 对象:

if (!globalThis.sky) {
  const { sky } = await import("@oai/sky");
  globalThis.sky = sky;
}

示例 1:列出所有已打开的应用和窗口

globalThis.apps = await sky.list_apps();
nodeRepl.write(JSON.stringify(apps, null, 2));

示例 2:选择目标窗口并激活

// 假设从 list_apps 结果中找到记事本
globalThis.targetApp = apps.find((app) => app.id === "notepad.exe");
globalThis.targetWindow = await sky.get_window({
  id: targetApp.windows[0].id,
  app: targetApp.windows[0].app,
});
await sky.activate_window({ window: targetWindow });

示例 3:获取窗口状态(截图 + 无障碍树)

globalThis.state = await sky.get_window_state({
  window: targetWindow,
  include_screenshot: true,
  include_text: true,
});
globalThis.targetWindow = state.window;
// 查看无障碍树中的元素索引
nodeRepl.write(String(state.accessibility?.tree || ""));

示例 4:点击元素(通过无障碍树索引)

// element_index 来自上一步无障碍树中看到的索引号
await sky.click({ window: targetWindow, element_index: 12 });

示例 4b:点击坐标

// 基于窗口相对坐标点击
await sky.click({ window: targetWindow, x: 200, y: 150 });

示例 5:输入文本

await sky.type_text({ window: targetWindow, text: "Hello, World!" });

示例 6:按键 / 快捷键

// 按回车
await sky.press_key({ window: targetWindow, key: "Return" });

// Ctrl+A 全选
await sky.press_key({ window: targetWindow, key: "Control_L+a" });

// Ctrl+C 复制
await sky.press_key({ window: targetWindow, key: "Control_L+c" });

// Ctrl+V 粘贴
await sky.press_key({ window: targetWindow, key: "Control_L+v" });

示例 7:滚动

// 在窗口内 (x:400, y:300) 位置向下滚动 600 像素
await sky.scroll({
  window: targetWindow,
  x: 400,
  y: 300,
  scrollX: 0,
  scrollY: 600,
});

示例 8:拖拽

// 从 (100, 200) 拖拽到 (300, 400)
await sky.drag({
  window: targetWindow,
  from_x: 100,
  from_y: 200,
  to_x: 300,
  to_y: 400,
});

示例 9:设置输入框的值

// 替换某个可编辑元素的值(element_index 来自无障碍树)
await sky.set_value({ window: targetWindow, element_index: 5, value: "新内容" });

示例 10:执行辅助操作(如展开/折叠)

await sky.perform_secondary_action({
  window: targetWindow,
  element_index: 8,
  action: "Expand",  // 可选: Raise, Scroll Up, Scroll Down, Expand, Collapse 等
});

示例 11:启动一个应用

// 通过 app id 启动
await sky.launch_app({ app: "notepad.exe" });

// 或通过完整 exe 路径启动
await sky.launch_app({ app: "C:\\Program Files\\MyApp\\app.exe" });

核心工作流模式(观察 → 操作 → 刷新)

这是最推荐的使用模式,每次操作后都要重新获取窗口状态:

// 第 1 步:观察
globalThis.state = await sky.get_window_state({
  window: targetWindow,
  include_screenshot: true,
  include_text: true,
});
nodeRepl.write(String(state.accessibility?.tree));

// 第 2 步:执行一个操作
await sky.click({ window: targetWindow, element_index: 12 });

// 第 3 步:刷新状态(必须!索引和坐标在状态变化后失效)
globalThis.state = await sky.get_window_state({
  window: targetWindow,
  include_screenshot: true,
  include_text: true,
});
nodeRepl.write(String(state.accessibility?.tree));

重要注意事项


Revision #1
Created 7 August 2026 05:47:44 by Admin
Updated 7 August 2026 05:48:04 by Admin