Python - окно управления с pywinauto, когда окно свернуто или скрыто

Что я пытаюсь сделать:

Я пытаюсь создать скрипт на python с pywinauto для автоматической установки notepad ++ в фоновом режиме (скрытый или свернутый), notepad++ является лишь примером, поскольку я отредактирую его для работы с другим программным обеспечением.

Проблема:

Проблема в том, что я хочу сделать это, пока установщик скрыт или свернут, но если я переместлю мышь, скрипт перестанет работать.

Вопрос:

Как я могу выполнить этот скрипт и заставить его работать, в то время как установщик notepad ++ скрыт или свернут.

Это мой код до сих пор:

import sys, os, pywinauto

pwa_app = pywinauto.application.Application()

app = pywinauto.Application().Start(r'npp.6.8.3.Installer.exe')

Wizard = app['Installer Language']

Wizard.NextButton.Click()

Wizard = app['Notepad++ v6.8.3 Setup']

Wizard.Wait('visible')

Wizard['Welcome to the Notepad++ v6.8.3 Setup'].Wait('ready')
Wizard.NextButton.Click()

Wizard['License Agreement'].Wait('ready')
Wizard['I &Agree'].Click()

Wizard['Choose Install Location'].Wait('ready')
Wizard.Button2.Click()

Wizard['Choose Components'].Wait('ready')
Wizard.Button2.Click()

Wizard['Create Shortcut on Desktop'].Wait('enabled').CheckByClick()
Wizard.Install.Click()

Wizard['Completing the Notepad++ v6.8.3 Setup'].Wait('ready', timeout=30)
Wizard['CheckBox'].Wait('enabled').Click()
Wizard.Finish.Click()
Wizard.WaitNot('visible')

1 ответ

Решение

Проблема здесь:

Wizard['Create Shortcut on Desktop'].Wait('enabled').CheckByClick()

CheckByClick() использования ClickInput() метод, который перемещает реальный курсор мыши и выполняет реалистичный щелчок.

использование Check() метод вместо.

[РЕДАКТИРОВАТЬ] Если установщик не обрабатывает BM_SETCHECK должным образом, обходной путь может выглядеть так:

checkbox = Wizard['Create Shortcut on Desktop'].Wait('enabled')
if checkbox.GetCheckState() != pywinauto.win32defines.BST_CHECKED:
    checkbox.Click()

Я исправлю это в следующем выпуске pywinauto, создав методы CheckByClick а также CheckByClickInput соответственно.


[РЕДАКТИРОВАТЬ 2] Я попробовал ваш сценарий с моим исправлением, и он отлично работает (и очень быстро) с и без движений мыши. Win7 x64, 32-битный Python 2.7, pywinauto 0.5.3, запуск от имени администратора.

import sys, os, pywinauto

app = pywinauto.Application().Start(r'npp.6.8.3.Installer.exe')

Wizard = app['Installer Language']

Wizard.Minimize()
Wizard.NextButton.Click()

Wizard = app['Notepad++ v6.8.3 Setup']

Wizard.Wait('visible')
Wizard.Minimize()

Wizard['Welcome to the Notepad++ v6.8.3 Setup'].Wait('ready')
Wizard.NextButton.Click()

Wizard.Minimize()
Wizard['License Agreement'].Wait('ready')
Wizard['I &Agree'].Click()

Wizard.Minimize()
Wizard['Choose Install Location'].Wait('ready')
Wizard.Button2.Click()

Wizard.Minimize()
Wizard['Choose Components'].Wait('ready')
Wizard.Button2.Click()

Wizard.Minimize()
checkbox = Wizard['Create Shortcut on Desktop'].Wait('enabled')
if checkbox.GetCheckState() != pywinauto.win32defines.BST_CHECKED:
    checkbox.Click()
Wizard.Install.Click()

Wizard['Completing the Notepad++ v6.8.3 Setup'].Wait('ready', timeout=30)
Wizard.Minimize()
Wizard['CheckBox'].Wait('enabled').Click()
Wizard.Finish.Click()
Wizard.WaitNot('visible')
Другие вопросы по тегам