
工业软件行业有一个让人又敬又畏的存在:二十年前用 MFC/Win32 写的、至今仍在产线上扛着关键业务的桌面工业软件。 它们没有 HTTP API,没有 Python SDK,没有命令行接口——只有一堆菜单、工具栏和对话框。
但它们的业务价值巨大。每天有成千上万的工程师打开这些软件,重复着相同的操作——导出 BOM 表、批量转换图纸格式、提取模型属性录入 ERP——这些机械重复的操作正是 AI Agent 最理想的应用场景。
问题是:Agent 怎么「操作」一个只有 GUI 的老软件?
这篇文章从四种操作通道、六类工程坑、三层安全护栏,系统地回答这个问题。
一、四种操作通道:从最优到最不推荐

Agent 不是只有一个办法操作桌面软件。它有四种通道——从精度高到脆弱,形成了完整的武器库。
通道一:COM 对象模型(最优选择)。 很多你以为「没有 API」的传统软件其实有 COM 接口——SolidWorks、AutoCAD、CATIA、Office 套件都是。COM 接口允许外部程序创建 Application 对象,获取 Document,遍历模型树,执行操作——精确到参数级。Agent 只要会生成 Python win32com 或 .NET COM Interop 代码就能用。如果有 COM,优先用它。
通道二:UI Automation / MSAA(通用选择)。 Windows 的无障碍框架 MSAA/UIA 可以枚举窗口中所有控件的树结构——按钮、文本框、列表、菜单项。Agent 通过 UIA 能「读」控件的名称、类型、值、状态,也能「写」——点击、输入、选择。比像素操作可靠得多,但不是所有老控件都实现了 UIA 接口。
通道三:Win32 API 消息(底层兜底)。 SendMessage/PostMessage 直接向窗口发 WM_CLICK、WM_SETTEXT。比 UIA 更底层,覆盖更广——但更危险。发错消息可能导致软件崩溃或进入不一致状态。仅当前两种通道不可用时考虑。
通道四:截图+像素定位(最不推荐)。 上一篇文章已经详细分析过——脆弱、不可靠、跨版本不兼容。仅在前三种通道都不适用时用于非关键操作。
选通道的决策逻辑: 先查 COM 文档 → 试试 UIA 探测控件 → 不行再用 Win32 → 截图是最后选项。每降一级,可靠性降一个数量级。
二、Agent 三层架构

一个完整的桌面操作 Agent 需要三层协作:
意图理解层(LLM)。 将自然语言指令解析为结构化的任务分解。用户说「把这个装配体里所有 M8 螺栓导出到 Excel」→ Agent 理解为 5 个子任务:打开装配体 → 遍历零件树 → 筛选标准件类型=M8螺栓 → 提取属性 → 写入Excel。
通道执行层(多通道切换)。 每个子任务选择最优通道:遍历装配体树用 COM(精度高),打开文件对话框用 UIA(无 COM),写 Excel 用文件通道。Agent 需要在不同通道间无缝切换——这层是系统工程的功力。
验证反馈层(闭环)。 每步操作后检查执行结果:文件生成了吗?属性提取对了吗?数据行数对不对?失败则分析原因、切换通道重试。连续 3 次失败自动升级到人工处理。
三、六个真实工程坑

传统桌面软件有传统软件的脾气——这些坑不提前准备,每个都能卡你好几天:
1. 模态对话框阻塞。 Agent 正操作中,突然弹出一个「是否保存?」确认框。Agent 的脚本里没有处理这个弹窗的逻辑——然后整个流程就卡住了。解决方案:独立线程持续监控意外的顶层弹窗,发现即处理(默认点「取消」或「否」)。
2. 控件 ID 不稳定。 老软件的控件 AutomationId 可能每次启动都变化,同一功能在软件不同版本中控件树结构不同。不能硬编码控件 ID——需要基于控件名称+类型做模糊匹配和层级定位。
3. 软件无响应/假死。 Agent 发了一个操作请求(比如加载大型装配体),软件开始计算——转圈、界面不响应。Agent 不知道要等多久。解决方案:监控窗口的 IsOffscreen/IsEnabled 状态变化 + 进程 CPU 占用率来判断是「正在工作」还是「真死了」。
4. 界面语言本地化差异。 「保存」在中文版是「保存(&S)」,英文版是「&Save」,日文版是「名前を付けて保存(&A)」。Agent 需要根据目标软件的语言版本适配控件名称——或者在连接阶段探测软件语言并加载对应的控件字典。
5. DPI 缩放下的坐标偏移。 高 DPI 屏幕(150%/200%)下,Win32 API 返回的坐标和 UIA 的 BoundingRectangle 可能不一致——取决于软件的 DPI 感知模式。需要在 Agent 初始化时做一次坐标系统校准。
6. 企业安全软件拦截。 Agent 的大量 API 调用和进程操作可能触发安全软件警报——「检测到可疑的自动化行为」。需要提前将 Agent 进程路径加入企业安全软件的白名单。
四、一个端到端案例

场景:从一个老旧 CAD 软件中导出装配体 BOM 到 Excel。
第一步:启动与连接。 Agent 启动目标 CAD 软件 → 通过窗口标题确认启动完成 → 判断 COM 是否可用 → 可用则走 COM 获取 Application 对象 → 不可用则降级到 UIA。
第二步:操作执行。 打开装配体文件(UIA: 文件→打开, 输入路径)→ 遍历零件结构树(COM: 递归获取子零件)→ 提取每个零件的属性(COM: 名称/材料/重量/数量)→ 写入 Excel(Python openpyxl)。
第三步:验证与报告。 Excel 行数 = 零件数?重量列有异常 0 值吗?→ 生成摘要「装配体共 247 个零件,总重 812 kg,导出成功,耗时 38 秒」。
整个流程中 Agent 混合使用了三种通道——COM 遍历结构树(精度高)、UIA 打开文件(无 COM 接口时)、文件通道写 Excel。选择正确的通道是成功的关键。
五、三条安全红线

给了 Agent 操作桌面软件的权限,必须配套安全护栏:
操作白名单。 只允许 Agent 启动白名单中的软件进程;只允许访问指定目录;禁止一切网络通信(除非明确允许);禁止操作系统敏感路径和注册表。
不可逆操作确认。 删除/覆盖/保存前必须弹出人工确认对话框;所有操作前自动创建文件快照;支持一键撤销最近 N 步操作。
完整审计日志。 记录每次操作的完整信息——时间、通道、输入、输出、耗时、成败。失败操作保留完整现场(截图+进程状态),日志不可篡改。定期自动清理防磁盘占满。
结语
传统 Windows 工业软件不是 AI Agent 的禁区——它只是需要更丰富的工具库和更严谨的工程实践。
四个操作通道从 COM 到像素构成了一个降级链路,Agent 根据实际情况自动选择最优通道。六个工程坑都是前人已经踩过、有成熟应对方案的。三条安全红线确保 Agent 的能力不会变成失控的风险。
核心认知:不是「有 API 才能自动化」,而是「有窗口就能想办法」。 COM 是首选但不是唯一选项,UIA 覆盖面广,Win32 是最后的确定性方案——三层叠加,传统桌面软件的自动化盲区其实比想象的小得多。
觉得有用?欢迎点赞、在看、转发给身边维护着老软件又想做 AI 自动化的同行。
夜雨聆风