pywinauto 为什么找不到安装程序的 Setup 窗口?
数据小许
结论
枚举结果显示,pywinauto 已发现窗口:标题为 Install INtime,类名为 #32770,进程 ID 为 15572。查找代码传入的类名是 32770,缺少开头的 #;注释中的标题 INtime 7 SDK Setup 也与实际标题不符。应使用枚举得到的属性查找窗口,并确认连接的是创建该窗口的进程。
按实际窗口属性查找
如果安装窗口属于进程 15572,可以使用 win32 backend 按标题和类名精确匹配:
from pywinauto import Application
pid = 15572
app = Application(backend="win32").connect(process=pid)
dlg = app.window(title="Install INtime", class_name="#32770")
dlg.wait("visible", timeout=30)
如果运行时获取 PID,应确认 proc.pid 的值与枚举结果中的 15572 一致。若窗口由安装器启动的子进程创建,连接父进程会找不到窗口;此时应连接创建窗口的进程。
也可以从桌面范围查找,避免连接到错误的应用进程:
from pywinauto import Desktop
pid = 15572
dlg = Desktop(backend="win32").window(
title="Install INtime",
class_name="#32770",
process=pid,
)
dlg.wait("visible", timeout=30)
核对 backend 与权限
枚举示例使用 Desktop(backend="uia"),而 Application 默认使用 win32 backend。两种 backend 的窗口树和控件识别方式可能不同。建议使用同一个 backend 进行枚举和查找。类名应填写枚举结果中的完整值 #32770。
如果 PID、标题和类名都正确,但仍无法操作窗口,可以检查自动化脚本和安装程序是否以相同权限级别运行。安装程序若以管理员权限运行,普通权限启动的脚本可能无法正常访问它的窗口。
示例代码的查找条件只有 class_name,没有按注释中的标题匹配。先使用实际标题、类名和 PID 缩小查找范围,确认匹配到窗口后,再按需调整等待逻辑。
备注:内容仅供参考。
