当前位置: 首页 > news >正文

如何使己有的应用程序自动化 - 条件结构

要使应用程序具有自动化能力,是否一定需要应用程序具有对象化和类的结构层次?
例如Excel,Word应用程序,它们都要对象层次结构,可以用VBA,Python来实现自动化。

核心疑问:应用程序要具备自动化能力,是否一定需要它本身具有对象化和类的结构层次?以Excel/Word为例,认为它们有对象层次结构,所以VBA/Python能自动化。想知道这是否是必要条件。

需要从自动化实现的原理出发,解释对象层次结构不是必要条件,而是特定自动化方式的特征。自动化可以通过多种机制实现:对象模型/API、UI自动化、图像识别、消息钩子等。然后以Excel/Word为例,说明其对象模型是如何支持自动化的,同时对比没有暴露对象模型的程序(如老旧桌面软件)是如何通过其他方式实现自动化的。

结合案例,深入解析工作原理、机制、组织结构。可以从“自动化是如何与控制程序交互”的角度分层阐述。

你的这个问题触及了应用程序自动化机制的一个核心区分点。

简短回答是:不需要。一个应用程序不必具有对象化或类的结构层次,也能被自动化。

Excel、Word 有清晰的“Application → Workbook → Worksheet → Range”对象层次,这只是一种最优雅、最稳定的自动化路径。但自动化还有“野路子”——通过对用户界面的模拟操作

下面我把这两种机制彻底拆开,用对照的方式让你看清“有层次结构”和“没有层次结构”时,自动化是如何工作的。


第一类:有对象层次结构的程序(以 Excel 为例)

这就是你提到的 Excel、Word 模式。专业术语叫“通过 API 或 COM 接口暴露对象模型”

1. 工作原理:开“后门”的对话机制

这种自动化,本质上是程序 A(你的代码)与程序 B(Excel)在内存中进行“结构性对话”

  • Excel 做了什么:它在启动时,会向 Windows 操作系统注册一个接口(COM 接口)。这个接口相当于 Excel 的“内部语音助手”。
  • 你的代码做了什么:你的 VBA 或 Python 代码通过连接这个接口,对 Excel 发出精确的结构化指令
你的 Python 代码说: "Workbooks[1].Sheets[1].Cells[1,1].Value = 100" Excel 内部编译器理解: "我知道 Workbook 对象是哪个内存地址,我知道 Sheet1 在 XML 里的索引,修改那个格子的数据流。" Excel 返回: "Done."
2. 为什么必须有层次结构?

在这种模式下,对象层次是语法规则,也是内存寻址地图

  • Application是入口(大本营)。
  • Workbook是文件容器。
  • Worksheet是数据页。
  • Range是具体的坐标。

没有这个层次,你的代码就无法描述“在这个文件里的这个表里的这个格子”。这种自动化极其健壮,因为它不依赖屏幕显示、不依赖鼠标光标位置。


第二类:没有对象层次结构的程序(以某老旧财务软件为例)

假设一款 2005 年开发的财务软件,开发者没有预留任何编程接口,也没有 COM 对象。它只是一个.exe文件,双击打开,用鼠标点。

它难道就不能自动化了吗?——能,用 RPA(机器人流程自动化)。

1. 工作原理:模拟人类的眼睛和手

由于无法与程序内部对话,自动化脚本只能通过操作系统层面去操控程序。

  • 眼睛(图像识别):脚本截取屏幕图片,通过 OpenCV 算法在屏幕上搜索“确认按钮.png”的位置坐标。
  • 手(鼠标/键盘钩子):脚本调用 Windows API,告诉系统:“在坐标 (X=350, Y=420) 处模拟一次鼠标左键按下”。
2. 对象层次在哪里?——不在程序里,在脚本自己建的“逻辑树”里

这种自动化没有原生层次结构,但程序员为了让代码不混乱,会人工建立一个虚拟的层次结构

# 这是一个没有对象模型的程序,但我们用代码“强行”造出对象感class老旧财务软件:def__init__(self):self.主窗口=窗口定位器(title="财务系统 v1.0")self.菜单栏=图像定位器("images/菜单栏.png")self.凭证录入区=坐标定位器(x=100,y=200)def录入凭证(self,金额):self.主窗口.激活()# 模拟点击标题栏鼠标移动到(self.凭证录入区.x,self.凭证录入区.y).点击()键盘输入(str(金额))键盘按('Tab')

结论:
程序本身是混沌的一坨像素,但自动化脚本通过**截图、坐标、窗口句柄(Handle)**这三个要素,在外部强行拼凑出了一个“类层次结构”。


第三类:深层机制对比表(一图看懂核心差异)

对比维度有对象层次结构(Excel / VBA)无对象层次结构(老软件 / RPA)
通信层级应用层内部(COM / API 调用)操作系统 GUI 层(GDI / Win32 消息)
定位方式通过逻辑地址Sheet1.Range("A1")通过物理坐标(X=200, Y=150)或截图匹配
容错率极高。Excel 最小化在后台、屏幕分辨率改变,代码依然正常跑。极低。电脑弹出个 QQ 新闻窗挡住了按钮,或者显示器分辨率变了,脚本立刻崩溃。
依赖条件必须安装该程序(且开放接口)不需要程序源码/接口,只要是个能在 Windows 上运行的 .exe 就行

第四类:一个极端的“无层次”自动化案例

为了让你彻底理解“没有层次也能自动化”,想象一个极端场景:

场景:有一台老式机床的配套软件,界面极其诡异,没有标题栏文字,所有按钮都是画出来的图片,无法通过技术手段抓取文字。

如何自动化按下“开始加工”按钮?

  1. 条件要求:必须有一张精确的开始按钮.bmp截图文件。
  2. 实现机制
    • 脚本每隔 1 秒截一次屏幕。
    • 调用cv2.matchTemplate()在截图中扫描,寻找相似度 > 95% 的区域。
    • 找到坐标 (425, 688)。
    • 调用pyautogui.click(425, 688)
  3. 组织结构:完全没有 Excel 那种“Workbook->Sheet”的树状结构,只有像素矩阵比对

最终解析:Excel 的对象层次本质是什么?

回到你的疑惑。Excel、Word 之所以有那种漂亮的、像树根一样的对象层次结构,是因为它们遵循了 COM(组件对象模型)规范

它的组织结构如下:

操作系统注册表 └── CLSID {00024500-0000-0000-C000-000000000046} (这是 Excel 的唯一身份标识) └── Type Library (类型库,记录了 Excel 有哪些类、方法、属性) └── 你的 Python/VBA 代码读取这个库,自动生成对象提示。

通俗总结:

  • 有对象层次= 程序自带一本详细的说明书,你的脚本是按说明书按图索骥,稳如泰山。
  • 无对象层次= 程序是一间黑屋子,你的脚本是蒙着眼摸墙走路,靠撞墙来感知方向。

因此,“对象化和类的结构层次”是实现自动化的“高速公路”,但不是唯一的“土路”。它决定了自动化开发的成本、稳定性和速度,但不决定可能性

http://www.jsqmd.com/news/673668/

相关文章:

  • XXMI启动器终极指南:一站式管理多款二次元游戏模组的完整解决方案
  • 新消费最残酷的真相:大多数品牌从一开始就没机会
  • FreeControl多语言支持实现:从中文到英文的国际化方案
  • 看懂HPH构造:储氢容器和高压均质机
  • YOLOv5至YOLOv12升级:番茄成熟度识别系统的设计与实现(完整代码+界面+数据集项目)
  • AwesomeTTS 语音合成Anki插件安装与使用教程
  • 保姆级教程:在华为eNSP上配置QoS限速,手把手教你用ACL和CAR控制带宽
  • Windows Server 2019上部署RustDesk自建服务器,我踩过的那些坑(Node.js、PM2、防火墙配置全记录)
  • 从‘MATLAB’到‘℃’:手把手解密Matlab char函数的Unicode与ASCII转换实战
  • STM32F405实战:用CubeMX和HAL库搞定无刷电机霍尔传感器(附SimpleFOC移植避坑点)
  • 从地球物理到量子力学:球坐标下拉普拉斯方程为何是这些领域的“通用语言”?
  • Spring Integration 2.2.0.RC3 是 Spring Integration 2.x 系列的一个**发布候选版本(Release Candidate)
  • 车牌识别中的图像后处理:除了神经网络,FPGA上的传统算法(投影分割+模板匹配)还能怎么玩?
  • Lumafly:3步完成空洞骑士模组管理,告别繁琐配置的智能解决方案
  • 智能会议管理系统EasyDSS如何开启智能会议协作新时代
  • 业务代表模式
  • Proxmox VE 8 入门上手系列(四) 存储与备份-保护你的数据
  • R 4.5文本挖掘升级后,92%用户忽略的5个性能陷阱及3步修复法:从分词崩溃到实时流处理
  • YOLOv5-SI: 基于多尺度训练与测试的尺度不变性增强算法
  • VBA和Python 如何使己有的Office应用程序自动化
  • 人工智能(十一)- 什么是 Skills
  • Gitee CodePecker SCA:重新定义企业级软件供应链安全防护
  • Base64 Decode and Encode - Online
  • 如何构建层次化任务体系:Tasks子任务管理的终极指南
  • 5G NR协议实战:手把手教你理解DCI大小对齐的5个关键步骤(附避坑指南)
  • 终极魔兽争霸III地图编辑器HiveWE:快速创建精美地图的完整指南
  • Cesium 3D可视化实战:给你的地理围栏加上‘跑马灯’特效(基于MaterialProperty自定义材质)
  • Windows的cmd运行编译器(cmd运行c/c++、python等)
  • 搞定RAG高级RAG技巧:从Query改写到Prompt构建,看这篇就够了!
  • SVG圆形详解