Python的 - 与pywinauto控制窗口,而窗口最小化或隐藏 [英] Python - Control window with pywinauto while the window is minimized or hidden

查看:9753
本文介绍了Python的 - 与pywinauto控制窗口,而窗口最小化或隐藏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做的事:

我试图创造与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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆