Василий уже ответил на вопрос. Я просто хотел собрать все пункты, упомянутые в комментариях и в latest docs). (Ответы в курсивом). Не стесняйтесь заполнять отверстия, оставшиеся в этом базовом туто (осталось несколько вопросов), или исправить.
1/Я не могу подключиться к этому диалоговому
app.window(title_re="Add to Archive", class_name="#32770").print_control_identifiers()
Ответ: это не работает, потому что это другой процесс. Так что это новое приложение (app2). Поэтому вам нужно подключиться к нему (некоторые приложения могут запускать новый процесс для каждого запускаемого окна).
Для некоторых приложений вам также необходимо указать «бэкэнд», по умолчанию это «win32». Если инструмент шпиона (см ниже) можно увидеть «управление» (имя, класс и т.д. каждое поле, кнопку ...) в режиме «ерд», вы должны использовать Application(backend='uia')
Чтобы восстановить связь необходимо сделать снова app2=Application().connect(path='7zG.exe')
, затем выбрать управление
Похоже, что чем больше вы указываете материал для подключения, тем легче он будет подключаться. Вероятно, поэтому Василий использовал путь + название. Я просто хотел показать, что он также работает только с заголовком - в этом случае
2/да, но я знаю, что это новый процесс?
Ответ: Вы можете видеть это в шпионском инструменте (cf 6/и внизу экрана для печати).
3/Я не могу выбрать элемент управления (введите текст в поле) в этом диалоге:
app.window(title_re="Add to Archive", class_name="#32770").Edit.type_keys("hello")
Ответ: это нормально, вам нужно сначала подключиться к диалогу. Сначала подключите к app2 (см выше), то сделать это:
app2.window(title_re="Add to Archive", class_name="#32770").Edit1.type_keys(r"great success!", with_spaces = True)
4/Я пытался найти все доступные диалоги на моем приложении с помощью print(app.windows())
Но он печатает эти (и другие странные вещи):
[<pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004033D68>, <pywinauto.controls.common_controls.ToolTipsWrapper object at 0x0000000004089128>, <pywinauto.controls.hwndwrapper.HwndWrapper object at 0x0000000004089208>, <pywinauto.controls.win32_controls.DialogWrapper object at 0x
00000000040893C8>, <pywinauto.controls.win32_controls.DialogWrapper object at 0x0000000004089390>]
Я не вижу окна «Добавить в архив», почему? Что это за вещи (например, in32_controls.DialogWrapper)?
ответ: «он возвращает действующие обертки для каждого окна». Каждая из этих строк - это местоположение (адрес) памяти объекта. Я не знаю, как использовать их
Вы можете получить текст с помощью print ([w.window_text() for w in app.windows()])
(распечатать, что ['C:\\Users\\Me\\Desktop\\', '', '', 'M', 'Default IME']
Понятия не имею, что делает это средство.)
5/Если я получаю всю информацию, необходимую для доступ к этим диалогом и управлению, действительно ли мне нужно распечатать этот список диалогов или элементов управления?
Не знаю. Я еще не полностью понял необходимость распечатки списка диалогов.Но я понимаю (возможно), что этот список управления предлагает способ сократить код. Например. он дает такие вещи, как AddToArchive
. Вместо сочинительство app2.window(title_re="Add to Archive").
вы могли бы написать app2.AddToArchive.
6/Spy ++ и inspect.exe даже не показывает процесс (плюс вторая тяжелая и багги)
Ответ: лучший инструмент шпионажа кажется чтобы быть одним из AutoHotkey (ниже печатного экрана AU3_Spy.exe). Он показывает имя/класс/процесс и даже имя элемента управления (и другие вещи) в крошечном окне без загрузки CPU. И в отличие от 2 других шпионских инструментов, AutoHotkey дает правильное имя управления
Обратите внимание, что названия управления меняются от одного шпионского инструмента к другому. Наиболее точным представляется тот, который был сделан с autohotkey (все тесты работали до сих пор). И это дает только то, что вам нужно, а другой инструмент шпионажа показать много бесполезных вещей Зависит, что вам нужно (например, процесс и реальные имена элементов управления)
Вы найдете кучу инструмента-шпиона here Acc explorer complete nice Ahk (Он делает то же самое, что и шпион ++, но только лучше).
(Вы можете использовать мои скриншоты)
Дополнительные советы:
Есть ли способ сократить код?
.window(title_re="Add to Archive", class_name="#32770")
эквивалентно .AddtoArchive
. Таким образом, можно было бы написать:
app2.AddtoArchive.type_keys(r"great success!", with_spaces = True)
Idem для других приложений, как Дитто:
dittoApp=Application().connect(path='Ditto.exe')
ditto_dialog=ditto.window(best_match='Ditto')
эквивалентно:
ditto=Application().connect(path='Ditto.exe')
dittoApp.Ditto
Есть ли список действий, я могу играть с? Вы будете делать here много действий, которые вы могли бы выполнить (в списке, кнопке, поле редактирования ...).
Вы можете перечислить все доступные методы объекта с помощью:
print(dir(dlg_spec.wrapper_object()))
например:
print(dir(ditto.ditto.SysListView321.wrapper_object()))
Вам необходимо импортировать модули pywinauto перед их использованием! Модули - это класс, который вам необходимо импортировать (например: pywinauto.application module) Использовать them не забывайте импортировать класс!Ex использовать один из перечисленных метода в findbestmatch module вам нужно: from pywinauto import findbestmatch
Другой пример: вам нужно from pywinauto import keyboard
использовать SendKeys('^a^c')
Но, 7zip может быть вызван из командной строки [] (https: // sevenzip. osdn.jp/chm/cmdline/syntax.htm), почему бы не использовать это? –
@PeterWood это хорошо знать, спасибо! Но я хочу полностью понять pywinauto (это своего рода упражнение, чтобы осваивать его основную функцию) –