首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用pywinauto打开两个不同的应用程序。第一个应用程序打开并运行。第二个应用程序‘start()’和'connects()‘,但没有打开窗口

使用pywinauto打开两个不同的应用程序。第一个应用程序打开并运行。第二个应用程序‘start()’和'connects()‘,但没有打开窗口
EN

Stack Overflow用户
提问于 2022-01-19 18:53:01
回答 1查看 690关注 0票数 1

首先,谢谢你抽出时间回顾我的问题。这是我第一次尝试问一个问题,所以如果我遗漏了必要的细节或含糊不清,请原谅我。

我的测试脚本: python2.7 pywinauto: 0.6.8

在使用pywinauto从我的测试脚本中打开两个第三方应用程序时,我已经能够成功地执行第一个应用程序,但是当我试图打开第二个应用程序时,start()和connect()似乎有效,但是第二个应用程序没有打开它的窗口。

第一个应用程序:

代码语言:javascript
运行
复制
    self.app = Application(backend="uia", allow_magic_lookup=True)
   
    if not self.app.is_process_running():
       self.app.start(self.te_exe_path)

    self.app.connect(path=self.te_exe_path)
    self.window = self.app.top_window()

这个很好用。然后我可以使用:

代码语言:javascript
运行
复制
    windowlist = self.app.windows() to find the window names

    control_IDs = self.window.print_control_identifiers()

浏览应用程序的控件ID。

当我试图对第二个应用程序使用相同的调用时,start()和connect()调用看起来很好,但是第二个应用程序的窗口没有显示。

代码语言:javascript
运行
复制
    self.sec_app = Application(backend="uia", allow_magic_lookup=True)

    if not self.sec_app.is_process_running():
        self.sec_app.start(self.sec_exe_path, timeout=15)

    self.sec_app.connect(path=self.sec_exe_path)
    self.sec_window = self.sec_app.top_window()

top_window()调用返回一条错误消息,类似于:“没有找到该应用程序的Windows”,我想这并不奇怪,因为应用程序没有显示它的窗口。

在connect()之后添加了几个调用:

代码语言:javascript
运行
复制
  self.sec_app.window()

  returns:  <pywinauto.application.WindowSpecification object at 0x12C4CC70>

如果我打电话:

代码语言:javascript
运行
复制
  self.sec_app.active()
  returns: RuntimeError: No Windows of that application are active

这也不奇怪,因为第二个应用程序没有打开它的第一个窗口。

我可以手动启动这两个应用程序,没有问题。对于我可能做错了什么,或者第二个应用程序可能有什么问题,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-25 17:29:05

因为connect(path="...")无法区分具有相同可执行名称的不同进程。您需要通过标题或title_re进行连接:

代码语言:javascript
运行
复制
 self.sec_app.connect(title="Second Window Title", timeout=10)

如果两个标题都是相同的,那么让我们尝试添加found_index=0,但我不确定它是否有效(需要反复检查)。

另一种方法是使用类Desktop而不是Application

代码语言:javascript
运行
复制
from pywinauto import Desktop

Desktop(backend="uia").window(title="Second Window Title", found_index=0).wait('visible', timeout=10)

当然,found_index可以是1,2,3等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70776249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档