我正在尝试使用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()
`
到目前为止,该方法有效。当我试图获得对该新应用程序的控制权时,出现错误。 TypeError: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类而不是从Application()实例调用connect()。 connect()方法缺少作为第一个参数的“自我”引用,当您从实例的指针调用方法时会自动添加该引用。
这意味着这将具有相同的效果:
app2 = pywinauto.application.Application(backend="uia")
pywinauto.application.Application.connect(app2, path="path2")
看到,app2作为第一个(强制性)位置参数传递。通过这种方式pywinauto.application.Application.connect()知道应将应用程序窗口绑定到哪个对象(app2)。如果将其称为app2.connect(),则它已经获取了app2,因此无需传递它。
关于python - 使用pywinauto连接到第二个应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46489468/