Pywinauto - 如何阅读弹出窗口中的文本 window 来识别它?

Pywinauto - How to read the text within a pop up window to identify it?

我正在尝试远程控制 windows 应用程序,该应用程序有时会在使用 pywinauto 启动时显示警告 window。

下面的代码识别 window 因为它没有菜单。

我想阅读弹出文本以在弹出窗口 window 中查找短语 "Please contact your system administrator." 以了解它是 对了

mywindows = pywinauto.findwindows.find_windows(title_re=".*MyProgramTitle")

# proof that two windows are found
print(len(mywindows))

for handle in mywindows:
    print('\nhandle {}'.format(handle))

    app = Application().connect(handle=handle)
    navwin = app.window(handle=handle )

    if not navwin.menu_items():
        # no menu - I bet it's a pop up
        print('{} is the window I\'m looking for'.format(handle))
        navwin.print_control_identifiers()

以上代码打印出所有windows信息,包括 "Static - 'Location mapping failed. Please contact your system administrator.'"

但我需要捕获该打印输出以进一步处理它。

作为一个 hacky 解决方案,我查看了源代码 print_control_identifiers() 并发现这种循环遍历 window

控件的方法
navwin.print_control_identifiers()

for x in navwin.descendants():
    print (x.window_text())
    print (x.class_name())

find_windows 是非常低级的自动化入口点。使用 WindowSpecification 对象,您可以等待打开所需 dialog/control 或仅检查它是否存在(所有这些都具有自定义超时)。

Getting Started Guide 中查看更详细的解释。

您可以使用 exists()visible() 方法(return 布尔值)而不是 wait('exists')wait('visible'),如果失败会引发异常。

你的情况可能是这样的:

static = app.DialogName.child_window(title_re='.*Please contact your system administrator.',
                                     class_name_re='Static')
if static.exists(timeout=20): # if it opens no later than 20 sec.
    app.DialogName.OK.click()