自动化 Windows 应用(桌面模式)
Microbe Studio 能驱动两类目标:Android 模拟器实例,以及——在桌面模式下——这台电脑上的 Windows 应用。你已经会的一切都能带过来:同一个流程编辑器、同一套节点、同样的队列和计划。变的是流程作用在什么上,以及一个必须说清的后果:桌面流程移动的是你自己的鼠标和键盘,所以这一页讲"如何保持控制权"的分量,不亚于讲"如何构建"。
用桌面模式不需要模拟器,用模拟器也不需要桌面模式——它们是两个相互独立的工作区。
开启
- 桌面模式通过 License Package 中的 Windows Mode 能力授权。套餐不包含时,应用会明确告知并停留在模拟器模式——到网站查看你的套餐。
- 在应用里:Settings → 运行环境 → 桌面。
切换换掉的是整个工作区,不是一层筛选:仪表盘、流程列表、队列和计划从此只显示桌面自动化的内容。模拟器侧的流程、队列和计划原封不动——随时可以切回去。
你的第一条桌面流程
循环还是自动化课程教的那一个——先动作、后验证——所以只要构建过模拟器流程,你就已经会构建桌面流程。
- 在桌面工作区新建流程。工具箱还是熟悉的那套,多了打开应用、少了 Zoom(窗口没有捏合手势)。
- 用**打开应用**开头,指向你要自动化的程序。窗口已经开着,节点就直接找到它;没开,它就启动程序并等窗口出现——同一条流程冷启动和热启动都能跑。
- 动作与验证与模拟器上完全一致:Click、Find Image、Read Text。模板和区域直接从真实窗口的实时预览里截取。
- Test Flow 从头到尾跑一遍,用的还是同一套测试工具。
- 从桌面仪表盘正式运行——或排进队列、或放上计划。一个桌面、同一时间一条流程:桌面运行是顺序的,这个工作区没有实例编队。
节点作用在什么上
在模拟器上,节点的目标是显然的——实例的屏幕。桌面有许多窗口,所以每个动作或读屏节点都自带答案,在属性面板的 Execution Context 组里:
| 目标 | 含义 |
|---|---|
| 当前焦点窗口(默认) | 节点运行那一刻拥有焦点的窗口 |
| 指定窗口 | 一个按描述匹配的窗口——即使用 户正把焦点放在别处也照样生效 |
| 桌面 | 整个桌面,横跨所有显示器 |
| 显示器 | 一台显示器(或"主显示器,无论是哪台") |
| 区域 | 一个矩形,锚定在窗口、显示器或桌面上 |
选择是按节点的,因为真实的桌面工作就是在应用之间移动:从这个窗口读一个验证码,敲进那个窗口,再到全屏检查一条通知。
指定窗口靠描述,从不按句柄记忆——一段标题片段(不区分大小写)、进程名、可执行文件、窗口类,或你起的别名。只有你填写的条件才参与匹配。选择窗口对话框列出正在运行的窗口,测试匹配按钮告诉你描述当前匹配几个——你要的数字是恰好一个,因为运行时对模糊描述会直接拒绝而不是乱猜:两个 Chrome 窗口不能互换,悄悄操作错的那个会制造出没人能复现的错误。见下文出问题时。
运行期间——保持控制权
桌面运行使用真实的鼠标和键盘,所以产品从不掩饰这件事正在发生:
- 一个小小的浮层显示运行状态。流程正在操控时,浮层完全点击穿透——绝不吞掉点击、也不抢前台。运行暂停或出错时它才接受交互。可在 Settings → Windows 设为始终显示或从不显示;隐藏浮层不改变流程的任何行为。
- 托盘图标同步同一状态,并且运行一暂停必定弹出通知——这一条关不掉,因为真正的风险是运行停了却没人知道。
- **想拿回电脑,直接用它就行。**移动鼠标或敲键盘,运行会在下一个节点边界暂停(默认开启,Settings → Windows)。暂停期间流程里的一切超时和期限全部冻结——不会因为你中途回了封邮件就有什么"到期"了。
- 恢复可以用浮层按钮、托盘菜单或全局热键——Ctrl+Alt+S 暂停、Ctrl+Alt+R 恢复,在任何窗口下都有效。恢复前有 3 秒倒计时才重新开始输入,鼠标永远不会从你手里被夺走。
- 计划触发的运行暂停后不会无限等待,除非你想要那样:超过你配置的分钟数它就干净地停止(设 0 表示一直等)。
窗口、尺寸与画面读取
两个值得了解的机制,它们解释了你将看到的现象:
- **窗口会被恢复成流程绘制时的形状。**模板和点击坐标是相对一个窗口形状的像素;所以动作之前,运行会把目标窗口的状态和尺寸恢复到流程编写时的样子,然后重新测量。应用拒绝该尺寸时,运行连同两个数字一起被拒绝——在错误的坐标上"成功"更糟。把窗口拖到显示缩放不同的显示器会改变其中一切的像素尺寸;这会被如实报告,绝不悄悄"修正"。
- **读取和动作的需求不同。**对多数窗口,画面用一种即使窗口被遮挡也有效的方法读取 。少数应用(游戏及其他硬件加速窗口)只能从屏幕本身读取,要求窗口位于最前——窗口面板会显示每个窗口用的哪种方法,于是"一挡住预览就黑了"是可预测的事实而非谜团。至于输入,任何情况下都会先把目标窗口带到前台。
桌面模式与模拟器,并排看
| 模拟器工作区 | 桌面工作区 | |
|---|---|---|
| 目标 | MuMu 实例,多个并行 | 这台电脑——一个桌面,同一时间一条流程 |
| 工具箱 | 标准集,含 Zoom | 标准集,含打开应用;无 Zoom |
| Key Press | Android 按键(BACK、HOME…) | PC 按键,并且能按住 Ctrl / Alt / Shift / Win 打快捷键 |
| Input Text | 模拟器接受的字符集 | 完整 Unicode,与键盘布局无关 |
| 输入通道 | ADB / 模拟器自己的通道 | Windows 输入 API——直接读取输入设备的应用(某些游戏)可能收不到 |
| 运行时你的鼠标 | 自由——运行发生在模拟器内部 | 正被运行使用——移动一下即可随时暂停 |
桌面运行出问题时
排查顺序不变。这个模式特有的错误码,按你遇到的先后排列:
| 错误码 | 情形 |
|---|---|
APP_LAUNCH_FAILED | 打开应用没能产出它描述的窗口——检查记录的程序路径是否还存在 |
WINDOW_NOT_FOUND | 没有窗口匹配节点的描述——应用没在运行,或描述太窄 |
WINDOW_AMBIGUOUS | 描述匹配了不止一个窗口——收窄它;运行拒绝乱猜 |
TARGET_SURFACE_UNAVAILABLE | 窗口被最小化,或显示器已断开 |
TARGET_CONTEXT_INVALID | 节点的 Execution Context 不完整——打开节点补全 Target 设置 |
五个码连同其余错误码一起列在错误码里。
分享与出售桌面流程
桌面流程的导出、发布与出售和模拟器流程完全一样——见 Flow 知识产权。商店从上传的包本身读出目标类型并给 Windows 目标的流程打上标记,买家付款前始终知道流程属于哪个模式。