Python的 - 与pywinauto控制窗口,而窗口最小化或隐藏 [英] Python - Control window with pywinauto while the window is minimized or hidden
问题描述
我试图做的事:
我试图创造与pywinauto在后台自动安装记事本+ +(隐藏或最小化)的python脚本,记事本++仅仅是因为我将编辑与其他软件合作的例子。
问题:
问题是,我想这样做,而安装程序隐藏或最小化,但如果我移动我的鼠标,该脚本将停止工作。
问:
我怎么能执行这个脚本,并使其发挥作用,而记事本+ +安装程序隐藏或最小化。
这是我的code到目前为止
进口SYS,操作系统,pywinautopwa_app = pywinauto.application.Application()应用= pywinauto.Application()。开始(r'npp.6.8.3.Installer.exe')向导程序= ['安装程序语言']Wizard.NextButton.Click()向导程序= ['记事本+ + v6.8.3设置]Wizard.Wait(可见的)精灵['欢迎使用记事本+ + v6.8.3设置']。等待('准备好')
Wizard.NextButton.Click()精灵['许可协议']。等待('准备好')
精灵['I和同意]点击()。精灵['选择安装位置。等待('准备好')
Wizard.Button2.Click()精灵[选择组件。等待('准备好')
Wizard.Button2.Click()精灵['创建快捷方式在桌面上。等待('激活')。CheckByClick()
Wizard.Install.Click()精灵['完成记事本+ + v6.8.3设置']。等待('准备好',超时= 30)
精灵['复选框']。等待('激活')。点击()
Wizard.Finish.Click()
Wizard.WaitNot(可见的)
该问题是在这里:
向导['创建快捷方式在桌面上。等待('激活')。CheckByClick()
CheckByClick()
使用 ClickInput()
方法移动真正的鼠标光标,并执行一个现实的点击。
使用检查()
方法来代替。
如果安装不处理BM_SETCHECK正确的解决办法可能看起来如此:
复选框=向导['创建快捷方式在桌面上。等待('激活')
!如果checkbox.GetCheckState()= pywinauto.win32defines.BST_CHECKED:
checkbox.Click()
我将通过创建方法解决它在未来pywinauto发布 CheckByClick
和 CheckByClickInput
分别。
我想你的剧本与我的方位,它完美的作品(和非常快)带和不带鼠标的移动。 Win7的X64 32位的Python 2.7,pywinauto 0.5.3,以管理员身份运行。
进口SYS,操作系统,pywinauto应用= pywinauto.Application()。开始(r'npp.6.8.3.Installer.exe')向导程序= ['安装程序语言']Wizard.Minimize()
Wizard.NextButton.Click()向导程序= ['记事本+ + v6.8.3设置]Wizard.Wait(可见的)
Wizard.Minimize()精灵['欢迎使用记事本+ + v6.8.3设置']。等待('准备好')
Wizard.NextButton.Click()Wizard.Minimize()
精灵['许可协议']。等待('准备好')
精灵['I和同意]点击()。Wizard.Minimize()
精灵['选择安装位置。等待('准备好')
Wizard.Button2.Click()Wizard.Minimize()
精灵[选择组件。等待('准备好')
Wizard.Button2.Click()Wizard.Minimize()
复选框=精灵['创建快捷方式在桌面上。等待('激活')
!如果checkbox.GetCheckState()= pywinauto.win32defines.BST_CHECKED:
checkbox.Click()
Wizard.Install.Click()精灵['完成记事本+ + v6.8.3设置']。等待('准备好',超时= 30)
Wizard.Minimize()
精灵['复选框']。等待('激活')。点击()
Wizard.Finish.Click()
Wizard.WaitNot(可见的)
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')
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')
这篇关于Python的 - 与pywinauto控制窗口,而窗口最小化或隐藏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!