pywinauto:处理多个应用窗口

2 投票
1 回答
2932 浏览
提问于 2025-04-15 22:40

我有一个图形用户界面(GUI)应用程序,它可以在桌面上创建很多相似的窗口。这些窗口的标题都是一样的。我需要列出所有标题相同的对话框,并对每个对话框进行一些测试。

当我调用:

dialog = app['Window Name']

pywinauto会返回一个叫做WindowSpecification的对象,这个对象在通过名称访问控件时非常有用。

但是当我调用:

dialogs = app.windows_(title='Window Name')

pywinauto返回给我的是一系列HwndWrapper实例,这些对我来说就没那么有用了。

我该如何获得一个指定标题的窗口列表,并且这些窗口是WindowSpecification对象呢?

1 个回答

4

你其实不能这样做。WindowSpecification 是一个针对所有符合条件的窗口的单一规范。当你使用 WindowSpecification 的实例时,实际上是在和一个 HwndWrapper 实例打交道,这个实例是 WindowSpecification 为你找到并访问的。

所以我觉得解决办法是使用 app.windows_() 返回的 HwndWrapper(这和通过 WindowSpecification.WrapperObject() 返回的单个 HwndWrapper 类似)。

注意,如果你总是想通过查看窗口中的特定控件来缩小窗口列表,那么使用 app['窗口名称']['唯一控件名称'].Parent() 应该能返回这个窗口。

WindowSpecification 和 HwndWrapper 之间的主要区别在于,WindowSpecification 不一定要存在,而 HwndWrapper 实例则反映了一个特定的底层窗口句柄。这使得 WindowSpecification 能够实现一些代码,等待窗口出现或检查窗口是否存在。

撰写回答