初识UI自动化(inspect.exe + uiautomation)

本文介绍了UI自动化中的inspect.exe工具,详细解析了Options和Toolbar,以及如何利用uiautomation库高效查找和操作控件。通过示例说明了searchDepth和Depth的区别,强调了掌握inspect.exe在UI自动化中的重要性。
摘要由CSDN通过智能技术生成

目录

一、前言

二、具体内容

inspect.exe讲解

Options(选项栏)

Toolbar(工具栏) 

uiautomation讲解

三、总结


 

一、前言

        笔者最近也在学习关于uiautomation的相关小项目,不过在做这些自动化之前,需要首先获取你需要操作的元素的相关信息,比如:鼠标点击事件、键盘输入事件,快捷键操作。 目前获取需要操作的元素的相关信息的软件有许多,如UIspy.exe,inspect.exe,Insight.exe等等。下文中以inspect.exe为例。

补充:如果需要Insight.exe,请点这里。

二、具体内容

参考文献:

辅助功能工具 - 检查 - Win32 apps | Microsoft Docs

https://github.com/yinkaisheng/Python-UIAutomation-for-Windows/blob/master/readme_cn.md

 

inspect.exe讲解

检查 "窗口有几个主要部分:

  • 标题栏。 显示" 检查 HWND (窗口句柄) 。
  • 菜单栏。 提供对 检查功能 的访问权限。
  • 工具 栏。 提供对 检查功能 的访问权限。
  • 树视图。 将 UI 元素的层次结构呈现为树视图控件,可用于在元素之间导航。
  • 数据视图。 显示所选 UI 元素的所有公开辅助功能属性。

 

菜单栏中提供的命令也可在工具栏中使用。 下图展示了 Inspect 工具,用于查询记事本中 “编辑” 菜单元素的 UI 自动化属性。

Options(选项栏)

选择此选项后检查 会这样做

始终位于顶部

(Always on Top)

显示在屏幕上的任何其他窗口的顶部。

MSAA 模式

(MSAA Mode)

显示Microsoft Active Accessibility属性信息。

UI 自动化模式

(UI Automation Mode)

显示UI 自动化属性信息。

原始视图

(Raw View)

在" 树"视图中 UI 自动化树或 MSAA 树的原始视图 。

控件视图

(Control View)

在" 树"视图中 UI 自动化树的 控件 视图。 仅在UI 自动化模式下可用。

内容视图

(Content View)

在" 树"视图中 UI 自动化树 的内容 视图。 仅在UI 自动化模式下可用。

活动悬停工具栏

(Active-Hover Toolbar)

在鼠标悬停时激活工具栏按钮,而无需单击鼠标。

出错时发出Epep

(Beep on Error)

在运行或 MSAA 操作期间检测到错误时UI 自动化发出警报。

SPI _ SCREENREADER 标志

(SPl_SCREENREADER flag)

假设存在屏幕阅读器。 此标志指示应用程序应以文本方式(而不是图形方式)提供信息。 不应仅仅因为存在屏幕阅读器而设置此标志。

显示突出显示矩形

(Show Highlight Rectangle)

突出显示具有焦点的元素周围的矩形。

显示 Caret 突出显示

(Show Caret Highlight)

突出显示该点。 仅在 MSAA 模式下可用。

显示信息工具提示

(Show Information Tooltip)

在工具提示中显示属性信息。

观看焦点

(Watch Focus)

 

跟随键盘焦点。 选中后,将安装异步焦点事件挂钩,将光标移到具有焦点的元素的左上方。 这将导致 检查 在大约一秒后刷新其属性。

监视 Caret

(Watch Caret)

 

遵循该点。 仅在 MSAA 模式下可用。

监视光标

(Watch Cursor)

 

在光标后。

监视工具提示

(Watch Tooltips)

 

遵循工具提示。

显示树

(Show Tree)

 

显示" 树" 视图。

Toolbar(工具栏) 

1:Refresh,刷新Tree View(树视图)

2:Copy Text to Clipboard,复制Data View(数据视图)的文本到剪切板

3:Show Settings Dialog,显示Options的Settings

4:剩下的重要按钮在Options中已经讲到,就不再重述了。

 

uiautomation讲解

uiautomation根据你提供的控件属性在控件树中从上往下查找控件。

假设控件树如下:

root(Name='Desktop', Depth=0)
  window1(Depth=1)
    control1-001(Depth=2)
    control1-...(Depth=2)
    ...
    control1-100(Depth=2)
  window2(Name='window2', Depth=1)
    control2-1(Depth=2)
      control2-1-001(Depth=3)
      control2-1-...(Depth=3)
      ...
      control2-1-100(Depth=3)
    control2-2(Depth=2)
    control2-3(Depth=2)
    control2-4(Name='2-4', Depth=2)
      editcontrol(Name='myedit1', Depth=3)
      editcontrol(Name='myedit2', Depth=3)

如果你想找到名字为myedit2的EditControl,并在这个EditControl打字,你可以这样写:

uiautomation.EditControl(searchDepth=3, Name='myedit2').SendKeys('hi')

但是这个代码运行效率并不高,因为控件树中有很多控件,你所查找的EditControl在树的末尾, 从树根部搜索整个控件树需要遍历200多次才能找到这个EditControl, 如果用分层查找并指定查找深度,就可以只查找几次,很快就能找到控件。

代码如下:

window2 = uiautomation.WindowControl(searchDepth=1, Name='window2')#search 2 times
sub = window2.Control(searchDepth=1, Name='2-4')# search 4 times
edit = sub.EditControl(searchDepth=1, Name='myedit2')# search 2 times
edit.SendKeys('hi')

先在root的第一层子控件中查找window2,需要查找2次。 再在window2的第一层子控件中查找control2-4,需要查找4次。 最后在control2-4的第一层子控件中查找myedit2,需要查找2次。 总共需要查找8次就能找到控件。

此外,在控件的__init__函数中,有下列参数可以使用:
        searchFromControl = None, 从哪个控件开始查找,如果为None,从根节点Desktop开始查找
        searchDepth = 0xFFFFFFFF, 搜索深度
        searchInterval = SEARCH_INTERVAL, 搜索间隔
        foundIndex = 1 ,搜索到的满足搜索条件的控件索引,索引从1开始
        Name 控件名字
        SubName 控件部分名字
        RegexName 使用re.match匹配符合正则表达式的名字,Name,SubName,RegexName只能使用一个,不能同时使用
        ClassName 类名字
        AutomationId 控件AutomationId
        ControlType 控件类型
        Depth 控件相对于searchFromControl的精确深度
        Compare 自定义比较函数function(control: Control, depth: int)->bool

重点如下: 

searchDepth和Depth的区别是:

searchDepth: int, max search depth from searchFromControl.

searchDepth在指定的深度范围内(包括1~searchDepth层中的所有子孙控件)搜索第一个满足搜索条件的控件

Depth: int, only search controls in relative depth from searchFromControl, ignore controls in depth(0~Depth-1),if set, searchDepth will be set to Depth too.

Depth只在Depth所在的深度(如果Depth>1,排除1~searchDepth-1层中的所有子孙控件)搜索第一个满足搜索条件的控件

 

三、总结

         在学习ui自动化的时候,inspect.exe的学习与使用可以大大减少你找你要操作的元素位置的时间。

        笔者最近也在学uiautomation的相关知识,要学习后续内容,以上知识的掌握必不可少,笔者也只是将参考文献中重要内容进行提取展示。之后笔者会更新一些关于uiautomation的小案例,敬请期待!

 

### 回答1: inspect.exe 是一个系统自带的 Windows 资源检查工具,它的主要作用是帮助用户分析和诊断 Windows 系统的状态、性能和配置信息。 在 Windows 操作系统中,inspect.exe 可以通过命令行或者在资源管理器中直接运行的方式来启动。它提供了一个简洁的图形界面,用户可以在其中选择需要检查的内容。通过 inspect.exe,用户可以查看和分析系统的基本信息,如操作系统版本、内存和处理器的技术规格。它还可以检查系统组件的状态,包括网络适配器、硬盘驱动器、打印机等。同时,inspect.exe 还可以帮助识别系统中存在的问题和潜在的冲突,比如驱动程序是否正常、网络连接是否可用等。 inspect.exe 在进行系统分析时提供了一些有用的功能,比如查看系统的事件日志、性能监视器和任务管理器等。通过这些功能,用户可以观察和分析系统的运行情况,以便更好地优化系统的性能和稳定性。 总而言之,inspect.exe 是一款由微软开发的系统检查工具,通过它可以方便地分析和诊断 Windows 系统的状态和配置信息,帮助用户解决系统问题,提高系统的性能和稳定性。 ### 回答2: inspect.exe是Windows操作系统中的一个系统工具,用于检查和诊断应用程序以及操作系统的问题。它通常用于开发人员、系统管理员和技术支持人员来定位和修复问题。 要下载inspect.exe,您可以按照以下步骤进行操作: 1. 打开您的Web浏览器,例如Google Chrome或Microsoft Edge。 2. 在浏览器的搜索栏中键入“inspect.exe下载”。 3. 单击搜索结果中与下载inspect.exe相关的链接。 4. 在下载页面上,您可能会看到不同版本的inspect.exe可用。根据您的操作系统版本和系统需求选择合适的版本。 5. 单击下载按钮,浏览器会开始下载inspect.exe文件。 6. 下载完成后,找到该文件所保存的位置。通常,它会保存在浏览器的默认下载文件夹中。 7. 双击inspect.exe文件,运行安装程序。 8. 在安装过程中,按照向导指示完成安装。 9. 安装完成后,您可以在系统的应用程序列表中找到inspect.exe,或者在开始菜单中进行搜索。 请注意,inspect.exe是Windows操作系统的一部分,因此在大多数情况下,您无需手动下载它。如果您遇到了需要使用inspect.exe进行调试和故障排除的情况,可以尝试在Windows操作系统的安装介质中查找该工具。 ### 回答3: inspect.exe是一款常用的系统工具,用于检查和分析Windows操作系统中运行的进程和服务。它可以帮助用户识别和解决系统运行过程中出现的问题。inspect.exe可以提供有关进程的详细信息,如进程的ID、父进程、线程数、启动参数等。它还可以显示系统中运行的服务及其状态,帮助用户识别故障服务,并提供停止和重启服务的功能。 inspect.exe也可以帮助用户检查系统资源使用情况,例如CPU利用率、内存使用情况和磁盘空间占用等。它可以提供实时监视和统计数据,帮助用户找到资源瓶颈,并采取相应的措施优化系统性能。 此外,inspect.exe还提供了一些有用的功能,如重新启动和关闭计算机、查看和修改注册表项等。它具有用户友好的界面和简单易用的操作方式,即使对于没有专业知识的用户来说,也能方便地使用。 总的来说,inspect.exe是一款实用的系统工具,可用于检查和分析Windows操作系统中的进程、服务及系统资源使用情况。它帮助用户识别和解决系统问题,并提供优化系统性能的功能。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

knighthood2001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值