Python - 在 window 最小化或隐藏时使用 pywinauto 控制 window

Python - Control window with pywinauto while the window is minimized or hidden

我想做什么:

我正在尝试使用 pywinauto 在 python 中创建一个脚本,以在后台自动安装 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')

问题在这里:

Wizard['Create Shortcut on Desktop'].wait('enabled').check_by_click()

check_by_click() 使用 click_input() 移动真实鼠标光标并执行真实点击的方法。

改用check()方法。

[编辑] 如果安装程序没有正确处理 BM_SETCHECK,解决方法可能如下所示:

checkbox = Wizard['Create Shortcut on Desktop'].wait('enabled')
if checkbox.get_check_state() != pywinauto.win32defines.BST_CHECKED:
    checkbox.click()

我将在下一个 pywinauto 版本中修复它,分别创建方法 check_by_clickcheck_by_click_input


[编辑 2] 我用我的修复程序尝试了你的脚本,无论有没有鼠标移动,它都能完美(而且非常快)地工作。 Win7 x64,32 位 Python 2.7,pywinauto 0.6.x,运行 作为管理员。

import sys
import os
from pywinauto import Application

app = Application(backend="win32").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.get_check_state() != 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.wait_not('visible')