🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Windows UI 自动化代理 cnyc6n/uia-agent

DeepSeek Harness
cnyc6n36 天前有提交已提供中文文档扫描:无法判定

用命令行操控 Windows 桌面窗口与控件

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add cnyc6n/uia-agent
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · vision
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 36 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 包内无可扫 JS
  • · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 命令行操控桌面窗口
  • 枚举与查找控件
  • 点击输入滚动拖拽

README

由 DeepSeek 最新模型翻译生成
uia_agent — Windows UI Automation 代理(单 exe) 对 Windows 桌面窗口做:枚举、快照、查找、点击、设值、滚动、拖动、滑动、截屏、窗口状态控制(置顶/最大化/最小化/恢复/关闭)。 - 单文件 exe,C++17 / MSVC / CMake+Ninja 构建,静态 CRT(无 VC++ 运行库依赖,本机 0.44 MB :Debug>") 并带 /utf-8、Release /O2。依赖系统库:Uiautomationcore Ole32 User32 OleAut32 Windowscodecs Gdi32 Uuid(UIAutomationCore / Windowscodecs 为 COM 运行时动态加载,不进静态导入表,属正常)。
展开完整文档(README 剩余 1 节)
uia_agent — Windows UI Automation 代理(单 exe)

对 Windows 桌面窗口做:枚举、快照、查找、点击、设值、滚动、拖动、滑动、截屏、窗口状态控制(置顶/最大化/最小化/恢复/关闭)。

- 单文件 exe,C++17 / MSVC / CMake+Ninja 构建,静态 CRT(无 VC++ 运行库依赖,本机 0.44 MB :Debug>")

并带 /utf-8、Release /O2。依赖系统库:Uiautomationcore Ole32 User32 OleAut32 Windowscodecs Gdi32 Uuid(UIAutomationCore / Windowscodecs 为 COM 运行时动态加载,不进静态导入表,属正常)。

命令列表

| 命令 | 说明 |
| list | 按 Z-order(最前→最后)枚举可见顶层窗口,过滤 #32768/Tooltip/SysShadow/MSCTFIME UI/IME 类名前缀 |
| snapshot --hwnd [--depth ] | 单窗口 UIA 控制视图树快照,默认 depth=8,max_nodes=5000 |
| snapshot_all [--depth ] | 对每个可见顶层窗口快照;双后端:UIA 节点数 ≤ 1 时降级 Win32 枚举;最小化/不可见/拍不到加对应 state |
| find --hwnd --q | 按条件查节点。条件:name/automation_id/class_name 子串匹配,control_type 全等(均大小写不敏感) |
| click --hwnd --q [--mode semantic\|mouse] | 语义:优先 InvokePattern,失败退化 SendInput 移点;--mode mouse 强制坐标点击 |
| click --x --y | 屏幕物理坐标点击 |
| set_text --hwnd --q --text | 优先 ValuePattern::SetValue,失败退化 点击+Ctrl+A+键入(KEYEVENTF_UNICODE,支持中文) |
| get_text --hwnd --q | ValuePattern 读值 |
| scroll --hwnd [--q ] [--amount ] | 有 ScrollPattern 走 pattern;否则 rect 中心滚轮(amount>0 下滚, | 发送键盘组合键:ctrl+c / alt+tab / shift+f10 / win+e(25+ 命名按键) |
| clipboard --set / clipboard | 写剪贴板文本,或读取(CF_UNICODETEXT) |
| wait_for --hwnd --q [--timeout_ms] [--interval_ms] | 轮询直到匹配控件出现(默认 5000ms 超时 / 300ms 间隔) |
| foreach --cmd [--args ] | 对每个可见顶层窗口执行子命令(snapshot/close/find/...) |
| drag --x1 --y1 --x2 --y2 [--duration ] | SendInput 按下→分步移动→抬起,默认 300ms |
| swipe --hwnd [--q ] --direction up\|down\|left\|right [--distance ] | 控件矩形内滑动 |
| screenshot --hwnd [--out ] [--base64] | PrintWindow 抓图,PNG 由 WIC 编码;--out 写文件,否则输出 base64 |
| minimize --hwnd | SW_MINIMIZE |
| maximize --hwnd | SW_MAXIMIZE |
| restore --hwnd | SW_RESTORE |
| topmost --hwnd [--off] | SetWindowPos 置顶(缺省 on,--off 取消) |
| close --hwnd | 发送 WM_CLOSE(应用可拦截/提示保存,比强杀友好) |

通用:--help;--timeout (UIA 调用超时,默认 5000ms)。

示例输出 json // list(裸数组,唯一非 ok 包装的输出)
[{"hwnd":527984,"title":"计算器","class_name":"ApplicationFrameWindow","pid":22712},
{"hwnd":1378628,"title":"test_doc.txt - 记事本","class_name":"Notepad","pid":5964}]

// find
{"count":1,"hwnd":1378628,"nodes":[{"name":"文本编辑器","control_type":"Edit",
"automation_id":"15","class_name":"Edit",
"rect":{"left":719,"top":406,"right":1560,"bottom":885,"cx":841,"cy":479},
"children":[]}],"ok":true,"walked":23}

// set_text / get_text
{"method":"value_pattern","ok":true,"text":"hello"}
{"ok":true,"text":"hello"}

// click(语义 invoke 成功) {"hwnd":1116574,"method":"invoke_pattern","mode":"semantic","ok":true}

// screenshot --out
{"h":966,"ok":true,"path":"...notepad.png","w":1576}

// 窗口状态(含关闭) {"hwnd":1116574,"ok":true,"state":"topmost"} {"hwnd":1116574,"ok":true,"state":"minimized"} {"hwnd":1116574,"ok":true,"state":"closing"} // close: 已发送 WM_CLOSE

// 失败 {"ok":false,"err":"not_found"} {"ok":false,"err":"timeout"} {"ok":false,"err":"minimized"} {"ok":false,"err":"invalid_window"} // close 目标窗口不存在

关键实现说明

- DPI:启动最先 SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2),失败退化 SetProcessDPIAware();所有 rect / 位图 / 鼠标坐标统一物理像素。
- screenshot 严格路径:尺寸取 GetWindowRect 宽高;CreateDIBSection 按 w×h 建 32 位 BGRA、biHeight=-h(自上而下);PrintWindow 写 DIB → WIC(GUID_WICPixelFormat32bppBGRA)编码 PNG;PrintWindow FALSE 或抽样 3×3 网格全 0(全黑/全透明)→ capture_failed;IsIconic → minimized;w/h≤0 → bad_window_rect。GDI 对象(HDC/HBITMAP)经 RAII 成对释放。
- 超时:UIA 遍历在独立 worker 线程(内部 CoInitializeEx),主线程条件变量定时等待,超时置 cancel 并输出 {"ok":false,"err":"timeout"},进程随即退出。
- BoundingRectangle 语义自适应:实测 Win32 控件返回 [left,top,right,bottom],而 UWP/XAML provider(如计算器)返回 [left,top,width,height]。解码时若 right(depth=4,23 节点:菜单/编辑框/状态栏/滚动条齐全) | ✅ |
| 3 | find --q {"control_type":"Edit"} 命中编辑框,rect 正确 | ✅ |
| 4 | set_text --q {"control_type":"Edit"} --text hello(value_pattern) | ✅ |
| 5 | get_text 读回 "hello" | ✅ |
| 6 | 计算器 click --q {"automation_id":"num7Button"} (invoke_pattern),显示器变"显示为 7"、再点成 77 | ✅ |
| 7 | click --x 1222 --y 1035 坐标点击(显示从 77 变 7,755,证明命中) | ✅ |
| 8 | screenshot --out notepad.png → PNG 1576×966 严格等于 GetWindowRect 宽高,图像查看/视觉识别标题栏+菜单+"hello"正确 | ✅ |
| 9 | screenshot --base64 → 还原后 PNG 签名 89 50 4E 47...、尺寸一致 | ✅ |
| 10 | Edge(Chromium 内核)snapshot 取到外壳(Window + 4 节点),snapshot_all 无 unsupported | ✅ |
| 附加 | scroll/drag/swipe、minimize/maximize/restore/topmost(--off) 全部实测生效(IsIconic/IsZoomed/WS_EX_TOPMOST 断言) | ✅ |
| 附加 | 超时兜底 --timeout 10 → {"err":"timeout"};最小化截图 → {"err":"minimized"} | ✅ |

构建回归脚本 build.ps1、测试脚本 tests\run_tests.ps1 已在仓库内。
预览分享卡片长什么样 ↓cnyc6n/uia-agent
分享 · DeepSeek Harness Hub
cnyc6n/uia-agent

用命令行操控 Windows 桌面窗口与控件

这是你的仓库?认领条目

回到顶部