使用 pywinauto 连接到第二个应用程序

Connecting to a second Application using pywinauto

我正在尝试使用 python 来操作多个应用程序。 目前我可以打开第一个应用程序并使用工具栏打开另一个应用程序。

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

` 到目前为止这有效。当我试图获得对这个新应用程序的控制权时,我遇到了一个错误。类型错误:connect() 缺少 1 个必需的位置参数:'self' 我用来连接到第二个应用程序的代码:

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

我如何连接到第二个应用程序?

你有一个错误:

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 class 调用 connect(),而不是从 Application() 实例调用。 connect() 方法缺少 'self' 引用作为第一个参数,当您从实例的指针调用方法时会自动添加该引用。

这意味着这会产生相同的效果:

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

看,app2 作为第一个(强制性)位置参数传递。这样 pywinauto.application.Application.connect() 就知道应该将应用程序的 window 绑定到哪个对象 (app2)。如果您将其称为 app2.connect() 它已经获得了 app2,因此无需传递它。