2017-09-29 30 views
1

私はいくつかのアプリケーションをopperateするためにPythonを使用しようとしています。 現在、最初のアプリケーションを開き、ツールバーを使用して別のアプリケーションを開くことができます。pywinautoを使用して2番目のアプリケーションに接続

import pywinauto 
import os 
os.startfile("Path") 
app = pywinauto.application.Application(backend="uia") 
app.connect(path="path") 
app.top_window().descendants(control_type="MenuBar") 
app_menu = app.top_window().descendants(control_type="MenuBar")[1] 
app_menu.items() 
appmenu = app.top_window().descendants(control_type="MenuBar")[1] 
mi = appmenu.items()[3] 
mi.set_focus() 
mi2 = app.top_window().descendants(control_type="MenuItem")[1] 
mi2.set_focus() 
mi2.select() 

「 」これまでのところこれが動作します。この新しいアプリケーションを制御しようとしているときにエラーが発生します。例外TypeError:私は、この第二アプリケーションに接続するにはどうすればよい

app2 = pywinauto.application.Application(backend="uia") 
app2= pywinauto.application.Application.connect(path="path2") 

:私は第二のアプリケーションへの接続に使用する「自己」 コード:接続()は1つの必要な位置引数が不足して?

答えて

3

あなたはバグがあります

app2 = pywinauto.application.Application(backend="uia") 
app2= pywinauto.application.Application.connect(path="path2") 

は次のようになります。

app2 = pywinauto.application.Application(backend="uia") 
# Don't forget to start the 'path2' first or use app2.start() instead. 
# Or, well, the first Application()'s automation should start it. 
# Regardless, you would perhaps have to wait some time before app starts and then connect() will work. 
# So put some time.sleep() here or setup a pywinauto's timeout. 
app2.connect(path="path2") 

あなたが最初のアプリケーションのためにそれをやっただけのように。

TypeErrorは、Application()インスタンスからではなく、直接Applicationクラスからconnect()を呼び出しているために発生します。 connect()メソッドは、インスタンスのポインタからメソッドを呼び出すと自動的に追加される最初の引数として 'self'参照がありませんでした。

app2 = pywinauto.application.Application(backend="uia") 
pywinauto.application.Application.connect(app2, path="path2") 

参照APP2は最初(必須)位置引数として渡される。

これは、これは、同じ効果を有するであろうことを意味します。このようにpywinauto.application.Application.connect()は、アプリケーションのウィンドウをバインドするオブジェクト(app2)を認識します。 app2.connect()として呼び出すと、すでにapp2が取得されているため、渡す必要はありません。

関連する問題