2015-09-29 7 views
5

パイソン - pywinautoとコントロールウィンドウのウィンドウが最小化または隠されている間、私は何をしようとしている

を私は(バックグラウンドで自動的に++メモ帳をインストールするpywinautoとpythonでスクリプトを作成しようとしています隠された、または最小化された)、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') 

答えて

6

問題はここにある:

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

CheckByClick()は、実際のマウスカーソルを移動し、現実的なクリックを行いClickInput()方法を使用しています。

代わりにCheck()メソッドを使用してください。

[EDIT]インストーラがBM_SETCHECKを処理しない場合、適切な回避策はそう見えることがあります。

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

私はそれぞれ方法CheckByClickCheckByClickInputを作成することにより、次のpywinautoリリースでそれを修正します。


[EDIT 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') 
+0

私はマウスを動かすとスクリプトを実行すると停止し、いずれのボタンもクリックしません。そして私がマウスを動かさないと、「Choose Location Location(インストール場所を選択する)」で止まるでしょう。移動すると、マウスを動かすと停止します。 –

+0

私は、マウスを動かさずにウィンドウにマウスを置くと、スクリプトが機能しなくなることが分かりますが、ウィンドウにマウスを置かないと動作しませんので、ウィンドウを隠す方法はまだ分かりません。あなたは私を助けてくれますか? –

+1

これは 'Wizard.Minimize()'と一緒に動作します。私は更新されたスクリプトで答えを編集しました。あなたがまだそこにいたら、stdout/stderrを提供してください。 –

関連する問題