PC 桌面操作自动化(通用方法论)
概述
本 skill 把"在用户这台 Windows 电脑上执行 GUI 操作"的完整、已验证方法论固化下来。
核心原则:默认 PC 直接读控,绝不走手机投屏 / adb 无线调试。
已实测否决的路线(不要再试):
- 手机镜像窗口 = 纯视频流,UIA 读不到控件,中文注入被拦,剪贴板不互通。
- adb 无线调试:荣耀配对 handshake 报 protocol fault,弹窗端口有时效(关则失效),本机 emulator 残留占端口 → 全部失败。
本机已验证可行的工具(全部打包在本 skill 目录,跨项目自包含):
- pc_desktop.py —— Windows UI Automation:列窗口 / dump 控件树(名字+类型+坐标+文本)/ 按名点按 / ValuePattern 直接填中文(绕过输入法)。唯一依赖:pip install uiautomation(缺失时脚本会提示)。
- screen_ctl.py —— 纯 ctypes 键鼠控制(零依赖):move/click/dclick/rclick/drag/wheel/key/type/focus/windows/selftest。多屏安全:用 SetCursorPos,不用 SendInput+ABSOLUTE。
- paste_clipboard.py —— 中文最稳输入通道:写剪贴板 + Ctrl+V(零依赖)。
目录结构
<skill安装目录>\
├── SKILL.md
├── pc_desktop.py # UIA 读屏/按名点击/填值
├── screen_ctl.py # ctypes 键鼠控制
└── paste_clipboard.py # 剪贴板+Ctrl+V 中文输入
> 具体 app 场景(如小红书发帖)见对应特化 skill(例:xhs-poster),本 skill 提供通用地基。
运行环境(agent 执行前必读)
Windows + Python 3.8+。依赖分两档:
- screen_ctl.py / paste_clipboard.py:零依赖,任何 Python 直接跑。
- pc_desktop.py:需要 pip install uiautomation(缺失时脚本会退出并提示)。
如需浏览器自动化(Playwright 驱动 Edge)与截图读屏(Pillow),按需安装:
python -m pip install -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com uiautomation pillow playwright
桌面键鼠注入类命令注意:沙箱环境会拦截桌面注入与浏览器内核,执行前需脱离沙箱;管理员/UAC 提权窗口因完整性级别隔离无法被普通权限注入。
标准执行流程(读 → 定位 → 控制 → 验证)
- 读屏(优先零截图):
pc_desktop.py list看有哪些窗口;pc_desktop.py tree "窗口子串"dump 控件树,直接拿到每个控件的「名字/类型/坐标/文本」,不截图。 - 定位:按「窗口子串 + 控件子串」定位;或截图(
screen_ctl.py shotwin <hwnd或标题> out.png保存 PNG)后用 Read 工具看清小字/图像。 - 控制(按场景选):
- 标准 Win32 控件(按钮/输入框):pc_desktop.py click "窗口" "控件"/pc_desktop.py set "窗口" "控件" "文字"(中文原生 OK)。
- 任意屏幕坐标点击:screen_ctl.py click X Y(多屏安全)。
- 中文输入到网页/ stubborn 输入框:paste_clipboard.py "文字"(先点一下让输入框获焦,再跑此脚本 Ctrl+V)。
- 快捷键:screen_ctl.py key ctrl+c/alt+n/enter/esc/tab。
- 拖拽 / 滚轮:screen_ctl.py drag X1 Y1 X2 Y2/wheel N。
- 网页复杂交互(多步、需稳定):用 Playwright 驱动系统 Edge(channel="msedge",免下载内核)。 - 验证:再次读屏 / 截图确认操作生效(例:发帖后回列表看今日日期)。
常用命令速查
# 列窗口
python pc_desktop.py list
python screen_ctl.py windows
# dump 控件树(零截图)
python pc_desktop.py tree "微信"
# 按名点按 / 填值(中文 OK)
python pc_desktop.py click "窗口子串" "控件子串"
python pc_desktop.py set "窗口子串" "控件子串" "要填的文字"
# 坐标点击(多屏安全)
python screen_ctl.py click 1200 400
# 中文粘贴(先点焦点,再跑)
python paste_clipboard.py "这是要输入的中文"
# 快捷键
python screen_ctl.py key ctrl+c
# 截图保存 PNG(再看不清时给 Read 工具读)
python screen_ctl.py shotwin "窗口标题" out.png
# 只读自检(验证输入通道正常,不动真东西)
python screen_ctl.py selftest
关键避坑原则(铁律,已实测)
- 默认 PC 直接读控,绝不走手机投屏 / adb(荣耀配对 fault、弹窗时效、中文被拦、镜像=视频流)。
- 读屏优先 UI Automation 零截图;只有需看清小字/图像时才截图 + Read。
- 中文输入走剪贴板+Ctrl+V(
paste_clipboard.py)或 UIA ValuePattern,绝不靠 SendInput UNICODE 字符注入(被 Chromium 网页输入框拦)。 - 多屏定位/点击一律用 SetCursorPos(screen_ctl 已用),绝不用 SendInput+MOUSEEVENTF_ABSOLUTE(0..65535 基准是主显示器,多屏坐标错乱)。
- 每次点击/操作前重新读屏或截图定位,不依赖陈旧坐标(页面会滚动,坐标会变)。
- 操作前让用户断开荣耀手机互联「屏幕共享」(开着会抢光标/焦点/滚动页面,导致点击错位)。
- 浏览器进程必须
dangerouslyDisableSandbox: true;Playwright 用channel="msedge"走系统 Edge,不要下载内核(本机 C 盘紧张且 exFAT E 盘不支持浏览器锁)。 - 涉及文件对话框/下载:优先系统 Edge + Playwright,或 screen_ctl 定位点击系统对话框。
- 执行点击类操作前先与用户确认(键鼠注入是真实物理动作),桌面需已登录未锁屏;管理员/UAC 提权窗口因完整性级别隔离无法被普通权限注入。
能力边界
- 仅本机 Windows 桌面;不支持远端/无桌面环境。
- 不读加密/隐私内容;短信验证码等由用户自己输入,不进聊天。
- 屏幕读取为按需快照,非实时视频流。