Python - Control window with pywinauto while the window is minimized or hidden
Question: **What I'm trying to do:**

I'm trying to create a script in python with pywinauto to automatically
install notepad++ in the background (hidden or minimized), notepad++ is just
an example since I will edit it to work with other software.

**Problem:**

The problem is that I want to do it while the installer is hidden or
minimized, but if I move my mouse the script will stop working.

**Question:**

How can I execute this script and make it work, while the notepad++ installer
is hidden or minimized.

**This is my code so far** :

    
    
    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')
    


Answer: The problem is here:

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

`CheckByClick()` uses `ClickInput()` method that moves real mouse cursor and
performs a realistic click.

Use `Check()` method instead.

[EDIT] If the installer doesn't handle BM_SETCHECK properly the workaround may
look so:

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

I will fix it in the next pywinauto release by creating methods `CheckByClick`
and `CheckByClickInput` respectively.

* * *

[EDIT 2] I tried your script with my fix and it works perfectly (and very
fast) with and without mouse moves. Win7 x64, 32-bit Python 2.7, pywinauto
0.5.3, run as administrator.

    
    
    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')
    

