Pywinauto - 如何在弹出窗口中读取文本以识别它?

时间:2016-11-04 09:30:25

标签: python python-3.x automation pywinauto

我试图远程控制Windows应用程序,有时会在启动时使用pywinauto显示警告窗口。

下面的代码标识了窗口,因为它没有菜单。

我想阅读弹出文本以查找短语"请联系您的系统管理员。"在弹出窗口中知道它是 对了。

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()

以上代码打印出所有窗口信息,包括     "静态 - '位置映射失败。请与您的系统管理员联系。'"

但是我需要抓住那个打印输出来进一步处理它。

2 个答案:

答案 0 :(得分:1)

作为一个hacky解决方案,我通过了源代码 print_control_identifiers()并找到了循环窗口控件的方法

navwin.print_control_identifiers()

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

答案 1 :(得分:0)

find_windows是自动化的低级入门点。使用WindowSpecification对象,您可以等待打开所需的对话框/控件,或者只检查它是否存在(所有对话/控制都是自定义的)。

请参阅Getting Started Guide

中的详细说明

您可以使用exists()visible()方法(返回布尔值)代替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()