【Pywinauto库】1. 3 Inspect.exe 使用详解指南
概述
Inspect.exe 是 Microsoft Windows SDK 中包含的一个强大的辅助功能诊断工具。它基于 UI Automation (UIA) 框架,是识别现代应用程序(如 WPF、WinForms、Qt5、浏览器应用等)控件结构的首选工具,尤其适用于 pywinauto
的 backend="uia"
模式。
获取与启动
安装来源
Inspect.exe 随 Windows SDK 一起安装。推荐安装最新版本的 Windows SDK。
默认安装路径
C:\Program Files (x86)\Windows Kits\10\bin\<sdk_version>\x64\Inspect.exe
例如:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\Inspect.exe
快速启动
- 按
Win
键 - 输入
inspect
- 在搜索结果中选择 Inspect (X64)
主界面与核心功能
Inspect 主界面分为几个关键区域:
- 菜单栏/工具栏: 包含模式切换、高亮、刷新等控制选项。
- 树形视图 (Tree View): 以层次结构显示所有UI元素。
- 属性面板 (Properties Pane): 显示当前选中元素的详细属性。
关键功能详解
1. 模式切换 (Mode Selection) - 最重要的一步
在工具栏的下拉列表中,确保选择 UI Automation
模式。这是正确查看现代应用程序控件属性的关键。
2. 元素选择工具
- 鼠标悬停探测: 将鼠标移动到任何 UI 元素上,Inspect 会自动高亮该元素并在树形视图中定位它。
- 元素点击锁定: 点击工具栏上的 “Target” 图标(或按
Ctrl + Shift + T
),然后点击屏幕上的元素,可将其锁定在属性面板中供详细查看。
3. 导航UI树
在树形视图中:
- 点击
+
号展开节点,查看父元素下的所有子元素。 - 选中树中的任何节点,属性面板会即时更新其信息。
- 按
F5
刷新视图,反映最新的UI状态。
关键属性解读 (用于 pywinauto
)
Inspect 显示的属性远多于 Spy++,以下是自动化脚本中最常用的核心属性:
属性名 (Property Name) | 说明 | pywinauto 中的对应参数 |
---|---|---|
Name | 控件显示给用户的文本内容 | title= |
AutomationId | 最稳定的标识符。开发人员为控件设置的唯一ID,通常不随语言变化。 | auto_id= |
ControlType | 控件的类型(如 Button, Edit, List, MenuItem)。 | control_type= |
ClassName | 底层控件的类名(Win32)。 | class_name= |
LocalizedControlType | 控件类型的本地化描述(如 “按钮”)。 | - |
IsKeyboardFocusable | 控件是否可接收键盘焦点。 | - |
BoundingRectangle | 控件的屏幕坐标和尺寸。 | - |
实战流程:识别一个按钮
假设我们要识别 Windows 计算器中的 “加号” 按钮。
- 打开 Inspect 和 计算器。
- 在 Inspect 的工具栏中,确认模式为
UI Automation
。 - 将鼠标悬停在计算器的
+
按钮上。你会看到它被一个彩色矩形高亮包围。 - 同时,Inspect 的树形视图会自动滚动并选中对应的
Button
节点。 - 查看右侧的属性面板,找到关键信息:
Name: "加" AutomationId: "plusButton" ControlType: UIA_ButtonControlTypeId (50000) ClassName: "Button"
- 这些属性足以让我们在
pywinauto
中唯一地定位此按钮。
与 pywinauto
结合使用
根据 Inspect 查到的信息,编写自动化代码:
from pywinauto import Application# 连接到计算器 (使用UIA后端)
app = Application(backend="uia").connect(path="calculator.exe")# 方法1: 使用最稳定的 AutomationId
app.Calculator.plusButton.click()# 方法2: 使用Name/Title (注意语言环境)
# app.Calculator.child_window(title="加", control_type="Button").click()# 方法3: 组合条件确保精确匹配
calc = app.Calculator
add_button = calc.child_window(auto_id="plusButton", control_type="Button")
add_button.click()
高级技巧与功能
1. 模式对比
尝试在 Inspect 中切换回 MSAA
模式,你会发现对于许多现代控件,获取到的信息远少于 UIA
模式。这印证了为何 UIA
是首选。
2. 查看支持的模式
对于某些控件(如滑块),你可以查看其支持的 控件模式 (Control Patterns),如 RangeValuePattern
、SelectionPattern
等。这揭示了你可以通过编程与之交互的方式(如获取滑块值、选择列表项等)。
3. 事件监听
Inspect 可以监听 UI 自动化事件(如焦点改变、属性变化),这对于理解应用程序的动态行为非常有用,但通常用于高级调试而非基础自动化。
注意事项
- 权限: 有时需要以管理员身份运行 Inspect 才能检测所有应用程序的控件。
- 性能: 对于非常复杂或动态的UI(如网页),Inspect 可能会反应迟缓。耐心等待树形视图更新。
- 缓存: 如果UI内容已更新但Inspect显示旧信息,记得按
F5
刷新。 - 替代工具: Accessibility Insights for Windows 是微软推出的更现代、用户友好的替代工具,基于相同的UIA技术,提供了更好的工作流和测试功能。如果经常使用,建议也尝试一下。
通过掌握 Inspect.exe,你获得了分析和自动化任何现代 Windows 应用程序用户界面的强大能力。