Как заставить Pywinauto в Python нажимать кнопку на другом языке? - PullRequest
0 голосов
/ 04 января 2019

Я просто не могу заставить Пвинауто работать. По сути, я хочу, чтобы он открыл системные настройки (уже понял) и затем щелкнул «Изменить настройки», но на моем языке (немецком), который будет «Einstellungen ändern». Я пробовал это:

from pywinauto import Desktop, Application, keyboard 
from pywinauto.application import Application 

app = Application().start("control system") 
#so far it works, after that I've tried two options 
#1  
app.window_(title_re="System").window_(title="Einstellungen ändern").click()
#2
app.window_(best_match="System" ).window_(best_match="Einstellungen ändern").click()

Я попробовал оба эти варианта с AutomationId, который я получил от Inspect.exe, вместо «System» или «Einstellungen ändern», и я попробовал ClickInput() вместо click().

Есть идеи?

1 Ответ

0 голосов
/ 04 января 2019

Есть несколько вопросов:

  • Правильный бэкэнд - "uia", который должен быть указан для Application объекта.
  • Процесс запуска запускает подпроцесс, который требует повторного подключения к этому дочернему процессу.

Этот код работает для моего английского Win10:

from pywinauto.application import Application 

app = Application(backend="uia").start("control system")
app = Application(backend="uia").connect(title="System", timeout=20)

app.window(title="System").child_window(title="Change settings").invoke()
# app.window(title="System").child_window(title="Einstellungen ändern").invoke()

.click_input() также должно работать. Backend "uia" определяет метод .click() как псевдоним .invoke() только для control_type="Button", поскольку InvokePattern может иметь различное значение для различных типов элементов управления.


ПРИМЕЧАНИЕ. После нажатия кнопки «Изменить настройки» появившееся окно «Свойства системы» запускается внутри другого процесса, для которого снова требуется метод .connect() и, возможно, для вашего удобства отдельный экземпляр Application.

...