我试图远程控制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()
以上代码打印出所有窗口信息,包括 "静态 - '位置映射失败。请与您的系统管理员联系。'"
但是我需要抓住那个打印输出来进一步处理它。
答案 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对象,您可以等待打开所需的对话框/控件,或者只检查它是否存在(所有对话/控制都是自定义的)。
您可以使用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()