Coding

windows-agent

Try it

全能 Windows 桌面控制:看屏幕/截图/控窗口(移动缩放激活关闭启动)/模拟鼠标键盘/点按钮填框/UI自动化/管理进程。当用户说"看屏幕/看窗口/截图/帮我点/输入文字/控制程序/打开应用/操作窗口/最小化/最大化/移动窗口"时使用。

What it does

全能 Windows 桌面控制:看屏幕/截图/控窗口(移动缩放激活关闭启动)/模拟鼠标键盘/点按钮填框/UI自动化/管理进程。当用户说"看屏幕/看窗口/截图/帮我点/输入文字/控制程序/打开应用/操作窗口/最小化/最大化/移动窗口"时使用。

The skill document

Windows Agent — 全能 Windows 桌面控制

一站式 Windows 桌面自动化:看、点、输、控。所有操作通过 PowerShell 脚本完成,无需节点/Tray 应用。

关键:脚本位置

所有脚本位于本 skill 目录下 scripts/,用 pwsh(PS7)执行:

脚本目录: `{baseDir}/scripts`(即 workspace/skills/windows-agent/scripts)

执行方式(统一):

pwsh -NoProfile -ExecutionPolicy Bypass -File "{baseDir}/scripts/<脚本>.ps1" -Action <动作> [参数]

⚠️ 用 pwsh(不是 powershell,避免 GBK 编码问题)。

⚠️ 使用前先读PREREQUISITES.md(前置条件 & 注意事项)——含各板块必须满足的前提、坐标语义、避坑速查。

安全规则

  1. 关窗口/结束进程前:先确认是否有未保存内容
  2. 发输入前:确保正确窗口已激活(先 focus)
  3. 覆盖剪贴板前:提醒用户
  4. 点击/输入可能造成破坏性操作(删除、提交、发送)→ 先确认

🎯 常用任务指引(用户想做事 → 照此调用,必然正确)

覆盖最常见的自动化需求。每项都是能跑通的完整序列,含避坑。

用户想做什么正确调用序列
看屏幕/了解现状vision.ps1 -Action observe → 用 image 工具看图
点某个应用/按钮window list-windows/uiauto dump 定位 → uiauto find-text 拿物理坐标 → input mouse-clickuiauto click
打开一个应用/此电脑window.ps1 -Action open -Target "名称"(自动走 shell/开始菜单lnk/桌面lnk/UWP(计算器/设置等)/UIA/截图兜底, 不碰坐标)
拖一个东西(文件/内容)uiauto find-text 拿起点坐标 → input mouse-dragbatch "drag..."移动窗口推荐用 window.ps1 move(API, 保留尺寸); mouse-drag 主要拖内容/文件/滑块)
输入/打字(含中文)window focus 目标 → input type-text -Text "...请"(SendInput Unicode 不乱码)
多次操作/批量一次 batch.ps1 -Sequence "move...;click...;drag..."(省64%)
等窗口/加载完成wait.ps1 -Action window -Target "标题"(或 text/control)
读窗口文本read-text.ps1 -Action read -Target "标题"(UWP编辑区除外)
复制/粘贴clipboard.ps1 get 备份 → set → 用完 clear 或恢复
看进程/杀进程process list 查 PID → infokill -ProcId(勿随手杀)

⚡ 核心避坑速查(调用前扫一眼)

正确做法
点偏/点错坐标用 uiauto find-text物理坐标,勿用截图逻辑坐标(偏DPI)
移动窗口尺寸稳定移动窗口推荐 window.ps1 move(API,保留尺寸);mouse-drag 拖标题栏曾观测到 Size 变化(根因未证实,不断言最大化), 移动窗口用 move 更稳
只做单次操作慢单次 input.ps1 即可;多次用 batch.ps1(一次做多个)
找不到窗口/控件uiauto dump/window list-windows 看实际标题, 再 find-text
Electron 应用(OpenClaw Control)UIA 读不到/坐标乱 → vision 截图兜底
UWP 记事本编辑区read-text 读不到内容(平台限制) → 读菜单/标题文本或 vision 截图
process 报 Missing -ProcIdinfo/monitor/wait 需要 -ProcId, 先 list 查 PID
vision 报错-Action observe(不是 screenshot)
clipboard 覆盖用户内容set/clear 前先 get 备份原内容, 用后恢复

板块总览

板块脚本能力
① 视觉看屏vision.ps1截图 → 自动视觉模型看图,返回画面描述("看屏幕"首选)
② 窗口管理window.ps1列/激活/移动/缩放/最小化/最大化/还原/关闭/启动/分屏/置顶
③ 输入模拟input.ps1鼠标点击/移动/滚动/按下释放(down/up)、键盘输入/按键/组合键
④ 屏幕截图screen.ps1全屏/窗口/区域截图,存成图片文件
⑤ UI自动化uiauto.ps1UIAutomation 读控件树/定位(含按文本)/点击/填文本框/滚动窗口内容
⑥ 进程管理process.ps1列表/信息/启动/结束/监控
⑦ 输入拖拽input.ps1 -Action mouse-drag从 A 拖到 B(拖文件/滑块/窗口)
⑧ 智能等待wait.ps1等待窗口/文本/控件出现(自动化节奏关键)
⑨ 读窗口文本read-text.ps1UIA 提取窗口真实文本(比 OCR 快准)
⑩ 剪贴板clipboard.ps1读/写/清空剪贴板(set-get-clear)
⑪ 批量输入batch.ps1多次鼠标/键盘操作一次做(省64%),命令 move/click/drag/type/keys/scroll/delay

推荐流程(完整闭环,沿此走即正确)

  1. 看屏幕vision.ps1 -Action observe(先知道屏幕现状;OpenClaw Control 等 Electron 窗口 UIA 读不到 → 用 vision 截图兜底)
  2. 定位 → 窗口用 window.ps1 -Action list-windows;控件/坐标用 uiauto.ps1 -Action dump/find-text(返回物理坐标千万别用截图逻辑坐标
  3. 操作 → 单次用 input.ps1(点击/按键/拖拽);多次操作用 batch.ps1(一次做多个,省64%)
  4. 等加载wait.ps1 等窗口/文本/控件出现
  5. 验证 → 再 vision.ps1 截屏确认结果
  6. 避坑:坐标一律用 uiauto 物理坐标;process 的 info/monitor/wait 需 -ProcId;clipboard set/clear 前先 get 备份;UWP 记事本编辑区 read-text 读不到(用菜单/标题文本)

① 视觉看屏 vision.ps1

截图并用视觉模型描述画面。"看屏幕"第一入口。

# 截图+视觉描述(最常用)
pwsh ...\vision.ps1 -Action observe

# 只看某窗口
pwsh ...\vision.ps1 -Action observe-window -Target "Notepad"

# 只看某区域 (x,y,w,h)
pwsh ...\vision.ps1 -Action observe -RegionX 100 -RegionY 100 -RegionWidth 800 -RegionHeight 600

说明:observe 会截屏 → 调用视觉模型(你配置的视觉模型)→ 返回"画面里有什么"的文字描述,供我理解当前屏幕状态后决定下一步操作。

⚠️ 最小化窗口的截法(重要)

最小化窗口截不到完整内容(Windows CopyFromScreen 只能截屏幕可见区域,最小化窗口只剩任务栏缩略条,如 237x39 小图)。 遇到最小化窗口要先还原可见 → 截图 → 再复原(恢复最小化),全程不新开应用:

# ① 还原窗口(临时变可见)
pwsh ...\window.ps1 -Action restore -Target "Edge"
# ② 截图(此时可见, 截到完整页面)
pwsh ...\vision.ps1 -Action observe-window -Target "Edge"
# ③ 复原(恢复最小化)
pwsh ...\window.ps1 -Action minimize -Target "Edge"

原则:测/用 observe-window 优先用屏幕上已可见的现有窗口当目标,绝不为截图新开应用;目标是最小化窗口时按上面 restore→截→minimize 处理,用完恢复原状态不留残留。

② 窗口管理 window.ps1

# 列出所有可见窗口(PID/状态/位置/大小/标题)
pwsh ...\-windows

# 激活/前置某窗口(可按标题模糊匹配或 PID)
pwsh ...\window.ps1 -Action focus -Target "Notepad"
pwsh ...\window.ps1 -Action focus -ProcId 1234

# 启动应用
pwsh ...\window.ps1 -Action launch -Target "notepad"
pwsh ...\window.ps1 -Action launch -Path "E:\app\app.exe" -Arguments "arg"

# 智能打开(按名字,不靠猜坐标,六级确定性链路)
pwsh ...\window.ps1 -Action open -Target "网易发烧游戏"
#   ①a shell 系统项 → explorer shell:... 直开(此电脑/控制面板/回收站等,零鼠标零坐标)
#   ①b 开始菜单 .lnk → 用户+公共开始菜单扫描直启
#   ①  桌面 .lnk → 桌面快捷方式直启
#   ②  桌面图标 UIA → 枚举桌面图标物理坐标双击(UIA 不稳, 重试3次)
#   ②b 任务栏图标 UIA → 枚举任务栏按钮物理坐标单击激活(UIA 不稳, 重试3次)
#   ③  截图兜底 → 输出截图路径供视觉定位后点击
pwsh ...\window.ps1 -Action open -Target "此电脑"   # 走 ①a shell 直开,不碰坐标
pwsh ...\window.ps1 -Action open -Target "微信"     # 走 .lnk 直启

# 读当前鼠标物理坐标(配合精准点击)
pwsh ...\input.ps1 -Action get-pos

# 移动/调整大小
pwsh ...\window.ps1 -Action move -Target "Notepad" -X 100 -Y 100
pwsh ...\window.ps1 -Action resize -Target "Notepad" -Width 800 -Height 600

# 最小化/最大化/还原/关闭
pwsh ...\window.ps1 -Action minimize -Target "Notepad"
pwsh ...\window.ps1 -Action maximize -Target "Notepad"
pwsh ...\window.ps1 -Action restore -Target "Notepad"
pwsh ...\window.ps1 -Action close -Target "Notepad"

# 按位置分屏
pwsh ...\window.ps1 -Action snap -Target "Notepad" -Position left

# 窗口置顶 / 取消置顶 (默认 toggle 切换)
pwsh ...\window.ps1 -Action topmost -Target "Notepad"
#   置顶:    -State on
#   取消置顶: -State off
#   切换(默认)

# Win 键组合 (input.ps1, keybd_event 真 Win 键, 不再是假 Ctrl+Esc)
pwsh ...\input.ps1 -Action send-keys -Keys "Win+D"   # 显示桌面
pwsh ...\input.ps1 -Action send-keys -Keys "Win+R"   # 运行
pwsh ...\input.ps1 -Action send-keys -Keys "Win+Shift+S"  # 截图 (暂仅单键, 组合另议)

③ 输入模拟 input.ps1

# 输入文字(需先激活目标窗口)
pwsh ...\input.ps1 -Action type-text -Text "hello world"

# 发送按键/组合键
pwsh ...\input.ps1 -Action send-keys -Keys "ctrl+c"     # 复制
pwsh ...\input.ps1 -Action send-keys -Keys "enter"
pwsh ...\input.ps1 -Action send-keys -Keys "alt+tab"

# 鼠标点击/移动/滚动
pwsh ...\input.ps1 -Action mouse-click -X 500 -Y 300 -Button left
pwsh ...\input.ps1 -Action mouse-click -X 500 -Y 300 -DoubleClick
pwsh ...\input.ps1 -Action mouse-move -X 500 -Y 300
pwsh ...\input.ps1 -Action mouse-scroll -Clicks -3
pwsh ...\input.ps1 -Action mouse-down -Button left     # 按住(配合 mouse-up 做精确拖拽)
pwsh ...\input.ps1 -Action mouse-up -Button left       # 松开
pwsh ...\input.ps1 -Action get-pos                      # 读当前鼠标物理坐标(x,y)

④ 屏幕截图 screen.ps1

# 全屏截图
pwsh ...\screen.ps1 -Action capture -OutputPath "E:\OpenClawData\shots\s.png"

# 窗口截图
pwsh ...\screen.ps1 -Action capture-window -Target "Notepad" -OutputPath "..."

# 区域截图
pwsh ...\screen.ps1 -Action capture-region -X 0 -Y 0 -Width 800 -Height 600 -OutputPath "..."

> ⚠️ **尺寸语义**:截图输出为【逻辑坐标】(本机 1707x1067)。鼠标/坐标点击用【物理坐标 2560x1600】——
> 用截图坐标喂 input.ps1 会偏 DPI 系数。目标坐标一律用 `uiauto.ps1 find-text/click-text` 返回的物理坐标。

⑤ UI自动化 uiauto.ps1(UIAutomation)

# 读取前台窗口的控件树(名称/类型/坐标/是否可用)
pwsh ...\uiauto.ps1 -Action dump

# 按名称找控件并返回坐标
pwsh ...\uiauto.ps1 -Action find -Name "确定"

# 点击指定名称的按钮
pwsh ...\uiauto.ps1 -Action click -Name "确定"

# 向文本框填入文字
pwsh ...\uiauto.ps1 -Action set-text -Name "用户名" -Text "abc"

# 按 AutomationId 操作
pwsh ...\uiauto.ps1 -Action click -AutomationId "btnSave"

# 聚焦目标窗口后再操作
pwsh ...\uiauto.ps1 -Action click -Name "确定" -Target "Notepad"

# 滚动窗口/列表/长页内容 (ScrollPattern, 原生)
#   Direction: up/down/left/right;Amount: page(整页)/line(一行)/top/bottom/max
pwsh ...\uiauto.ps1 -Action scroll -Target "文件管理器" -Direction down -Amount page
pwsh ...\uiauto.ps1 -Action scroll -Target "Notepad" -Direction down -Amount line

# 调用控件默认动作(如按钮点击/勾选)
pwsh ...\uiauto.ps1 -Action invoke -Name "确定" -Target "Notepad"

# 按文本内容定位元素中心坐标(返回 center=(x,y), 配合 input 精准点击)
pwsh ...\uiauto.ps1 -Action find-text -Target "Notepad" -Text "搜索"

# 按文本内容直接点击(InvokePattern或坐标中心, SendInput精准)
pwsh ...\uiauto.ps1 -Action click-text -Target "Notepad" -Text "文件"

⑥ 进程管理 process.ps1

pwsh ...\process.ps1 -Action list [-Name filter] [-SortBy memory] [-Top 10]
pwsh ...\process.ps1 -Action info -ProcId 1234
pwsh ...\process.ps1 -Action start -Path "app.exe" [-Arguments "..."]
pwsh ...\process.ps1 -Action kill -ProcId 1234 [-Force]
pwsh ...\process.ps1 -Action monitor -ProcId 1234 -Duration 10
pwsh ...\process.ps1 -Action wait -ProcId 1234        # 等待进程退出(阻塞)

> ⚠️ **info / monitor / wait 需 `-ProcId`**(不支持 -Name)。不知道 PID 时先用 `list` 查到再调用。

⑦ 输入拖拽 input.ps1 -Action mouse-drag

# 从 (X,Y) 拖到 (X2,Y2)(拖文件/滑块/移动窗口)
pwsh ...\input.ps1 -Action mouse-drag -X 100 -Y 100 -X2 400 -Y2 300

⑧ 智能等待 wait.ps1

# 等窗口出现(最长 30s)
pwsh ...\wait.ps1 -Action window -Target "记事本"

# 等某文本出现(限窗口)
pwsh ...\wait.ps1 -Action text -Text "完成" -Window "安装程序"

# 等控件出现
pwsh ...\wait.ps1 -Action control -Target "确定" -Window "对话框" [-Timeout 60]

⑨ 读窗口文本 read-text.ps1

# 读某窗口全部真实文本(UIA 提取,比 OCR 快准)
pwsh ...\read-text.ps1 -Action read -Target "Notepad"
# 不指定 Target 则读当前前台窗口
pwsh ...\read-text.ps1 -Action read

⑩ 剪贴板 clipboard.ps1

# 读剪贴板内容
pwsh ...\clipboard.ps1 -Action get

# 写入文本到剪贴板
pwsh ...\clipboard.ps1 -Action set -Text "要复制的内容"

# 清空剪贴板
pwsh ...\clipboard.ps1 -Action clear

⑪ 批量输入 batch.ps1(高效: 一次启动+编译做多个操作)

相比多次调用 input.ps1(每次 ~850ms 启动+编译), 批量做 N 个鼠标/键盘操作只付一次成本。 多次鼠标操作/拖拽首选此方式——实测 4 操作快 64%, 单次 drag 236ms(vs 850ms)。

# 内联序列(分号或换行分隔)
pwsh ...\batch.ps1 -Sequence "move 632 980; click 632 980; drag 632 980 632 1442"

# 或用命令文件(每行一条)
pwsh ...\batch.ps1 -SequenceFile "E:\ops.txt"

命令(每行一条, 空格分隔参数):

命令参数说明
move 移动鼠标(物理坐标)
click [left|right|middle] [dbl]点击
drag 拖拽(自适应段数, 快)
type<文本>输入文字/中文(SendInput Unicode)
keys<组合键>按键(Ctrl+S/Alt+F4/Enter...)
scroll``滚动(正=上,负=下)
delay<毫秒>等待

⚠️ 坐标一律用 uiauto find-text 物理坐标(同 input.ps1)。

排错

  • 脚本没反应:确认用 pwsh 且路径正确
  • 窗口找不到:先 -windows 看确切标题
  • 点不到控件:先 uiauto.ps1 -Action dump 读控件树拿坐标,或截图 vision 确认
  • 中文乱码:脚本用 UTF-8,执行用 pwsh
  • 视觉模型不动:确认你配置的视觉模型可用

Related skills

Control a Windows desktop over a local HTTP API: capture screenshots on demand and send mouse and keyboard actions.

by 施清荃23 installs

Execute cross-platform desktop tasks through a packaged desktop automation skill that guides the main agent to observe the screen, focus apps and windows, ca...

25 installs

Interact with the desktop GUI — take screenshots, list/raise windows, click with grid targeting, type text, press key combos. Use when you need to see the sc...

1 installs

当用户想要**Windows自动化**、**自动打开CMD**、**在指定目录执行命令**、**运行bat脚本**、**GitHub自动下载最新版**、**一键下载仓库源码**、**桌面GUI自动化**、**pyautogui任务**、**全屏可视化提示**、**鼠标单击强制停止**、**输入法自动切换**、**项目初始化**、**批量部署**、**安全可靠的Windows Agent** 等需求时自动触发。 这是一个完整的高容错 Windows 桌面自动化技能,集成全屏半透明 Overlay 实时提示、鼠标左键一键强制终止、Windows API 智能英文输入法切换、CMD 自动打开与执行

16 installs

Configure, repair, and validate agentmemory integration for Codex App on Windows. Use when Codex needs to set up agentmemory hooks, fix Windows PowerShell ho...

17 installs