【问题标题】:Select window by title with pywinauto使用 pywinauto 按标题选择窗口
【发布时间】:2020-07-22 16:02:07
【问题描述】:

使用 pywinauto,当它出现时,我试图关闭软件中的弹出窗口,因为它是有条件的。

def get_window():
    app = pywinauto.application.Application(backend="uia")
    app.connect(path='gofer.exe')
    #app.Properties.print_control_identifiers()
    trade = app.window(best_match='Warning:')
    # trade.wrapper_object().close
    print(trade)
    if trade == 'Warning:':
        print("You see the Window")
        # press enter key to displace
        # start next action
    else:
        print("Naw, No window bro")
        # Log to file 
        pass

print(trade)的输出是:

<pywinauto.application.WindowSpecification object at 0x0000019B8296DBA8>

所以我知道它至少可以工作,但不会去我想要的地方。警告是一个弹出的窗口,根据 spy++,标题为“警告”。

但是,我无法打印窗口数据...虽然窗口是一个弹出窗口,但如果这有所不同,它就不是一个 toast 弹出窗口。这是一个dlg窗口。

属性打印一个仅引用主程序并提示对话窗口的字典,但从不指定属性。即使在搜索主程序标题时,我也无法正常工作。

【问题讨论】:

    标签: python python-3.x winforms pywinauto


    【解决方案1】:

    这就是我用来识别弹出窗口的方法。本质上,您想创建一个 Dialog (dlg) 代表作为弹出窗口的父窗口的窗口:

    app = pywinauto.application.Application(backend="uia")
    app.connect(path='gofer.exe')
    
    # Using regular expression to create a dialog of the gofer.exe app
    # I am assuming the title will match "*Gofer*" eg: "Gofer the Application"
    dlg = app.window(title_re=".*Gofer.*")
    
    # Now I am going to identify the title of the popup window:
    dlg.print_ctrl_ids()
    
    # If you did the last step correctly, the output will look something like:
    #Control Identifiers:
    #Dialog - 'Gofer The Application'    (L688, T518, R1065, B1006)
    #[u'Dialog', u'Gofer Dialog']
    #child_window(title="Warning: ", control_type="Window")
       #|
       #| Image - ''    (L717, T589, R749, B622)
       #| [u'', u'0', u'Image1', u'Image0', 'Image', u'1']
       #| child_window(auto_id="13057", control_type="Image")
       #|
       #| Image - ''    (L717, T630, R1035, B632)
       #| ['Image2', u'2']
       #| child_window(auto_id="13095", control_type="Image")
       #|
    
    
    # Now using the same title and control type for the popup that we identified
    # We check to see if it exists as follows:
    
    if dlg.child_window(title="Warning:", control_type="Window").exists():
        print("Bro, you got a pop-up bro...")
    
    else:
        print("No popup Bro...")
    

    【讨论】:

    • 谢谢@AllenMoh,我认为这会奏效!!干杯!
    • 再次感谢您对这个问题的帮助!您是否介意帮助我找到一个资源来学习或提供如何访问 control_id 列表中的元素的细分?
    • 再次感谢您对这个问题的帮助!您是否介意帮助我找到一个资源来学习或提供如何访问 control_id 列表中的元素的细分?我的应用程序使用 title=*.gofer.* 然后“子窗口”有一个不同的名称,我已经更改了目标窗口的名称,但我还有 2 个其他弹出窗口似乎是从同一个 dlg 生成的。 . 我试图学习以内部数据为目标,1 个窗口有放射线,另一个只有一个确定按钮。 Docs 似乎有点混乱......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多