为什么Pywinauto总是找到许多窗口,即使它只存在一个窗口?

2024-06-17 08:39:09 发布

您现在位置:Python中文网/ 问答频道 /正文

from pywinauto import application

app=application.Application()
app.connect(title_re = "| Zero Hedge", found_index = 0)

app.window_().SetFocus()
app.window_().TypeKeys('{F6}')

我有两个主要问题:

  1. found-index究竟控制了什么?因为每次我改变它的值,结果都不一样。我如何决定它的价值,以确保我得到我想要的,包含“零对冲”的窗口?

  2. 代码有时会在没有found_index的情况下引发WindowAmbiguousError,或者具有许多不同的found_index值。但我很确定我只有一个标签的标题是“零对冲”。为什么它总是检测到很多窗口?我怎样才能修好它?

谢谢你的帮助。:)


Tags: fromimportreappindexapplication对冲title
2条回答

请尝试在connect调用中添加top_level_only=True(可以删除found_index=0)。方法connect在某种意义上只连接到应用程序进程(进程是使用窗口标题找到的,而不是必需的顶层窗口)。但该进程只包含一个顶层窗口(app.window_()默认搜索顶层窗口,而{}则没有)。在

避免歧义的另一个选择:

Application().connect(title='your title', class_name='Chrome_WidgetWin_1')

found_index不是消除歧义的唯一方法。我想说,当其他标准不起作用时,这是最后一个边界。在

编辑:顺便说一句,正如Roel提到的,"a|b"意味着"a"或{}。所以在你的例子中,"| Zero Hedge"意味着"" (empty sting)或{}。有许多隐藏的顶层窗口带有空标题。请小心使用|。在

任何符号的正确regex是.*。点.表示任何符号,而星*表示任何重复次数。在

你的案子应该是这样的:".*Zero Hedge"。在

找到多个窗口是因为使用正则表达式匹配窗口标题,而正则表达式恰好匹配任何字符串。| Zero Hedge表示匹配" Zero Hedge"或空字符串。在

要解决此问题,您需要转义|

app.connect(title_re = r"\| Zero Hedge")

相关问题 更多 >