PyWinAuto - приложение () несколько окон с одинаковым идентификатором процесса

У меня есть приложение с 5 окнами (1 окно, 4 панели), у которых есть родительский рабочий стол, и они имеют один и тот же идентификатор процесса.

Когда я пытаюсь что-то вроде этого:

for line in pywinauto.findwindows.find_windows(process=proc_id):
    print line  ### this will print all 5 handles of windows
    app = Application().connect(handle=line)   ### this will connect to specific handle
    app.top_window().set_focus()    ### this will set focus ONLY to one window and bring it to forward
    time.sleep(5)

Этот цикл FOR должен продвигать вперед одно окно каждые 5 секунд (1 элемент control_type="Window" и 4 элемента control_type="Pane" ). Но это приведет только к перемещению вперед одного окна и ничего больше, и он получит 5-кратный фокус на нем. Смена окон не производится.

Благодарность


person user3139566    schedule 07.12.2017    source источник


Ответы (1)


Потому что top_window() всегда выбирает первое верхнее окно. Чего еще можно ожидать от этого метода? В любом случае у нас есть планы изменить дизайн или удалить его.

Правильный метод для вашей цели - app.windows():

for w in app.windows():
    print(w.window_text())
    w.set_focus()

Примечание: app.windows() возвращает список оберток, поэтому возможен только список .children() или .descendants() без дополнительных неявных ожиданий и более подробных спецификаций поиска.

person Vasily Ryabov    schedule 08.12.2017