首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用桌面对象与更改窗口标题的应用程序连接

如何使用桌面对象与更改窗口标题的应用程序连接
EN

Stack Overflow用户
提问于 2022-11-25 20:10:47
回答 1查看 38关注 0票数 1

我刚开始使用pywinauto,但是我已经阅读了所有的文档。我正试图在Windows上自动化Spotify应用程序(即Microsoft选项)。我正在使用UIA后端。我面临的唯一问题是,因为pywinauto的Desktop对象正在寻找一个特定的窗口标题,所以它不允许我自动化,因为Spotify的窗口标题可以根据在任何特定时刻播放的歌曲而改变(窗口标题中没有单词"Spotify“)。

我尝试过获取进程ID,但它似乎没有找到exe名称(Spotify.exe),也没有使用桌面对象(我需要访问child_window等)。我的代码如下。

当应用程序的窗口标题不是常量且不能用来识别应用程序时,有人能帮助建议如何使桌面对象工作吗?因为它是Microsoft Store应用程序,它会产生多个进程,所以只使用Application对象也不是一种选择。

代码语言:javascript
复制
import pywinauto
import subprocess
from pywinauto import Desktop, application
from pywinauto.application import Application

sp = subprocess.call("start shell:AppsFolder\SpotifyAB.SpotifyMusic_zpdnekdrzrea0!Spotify",shell=True)
app = pywinauto.Application(backend='uia').connect(path="Spotify.exe")

#this works only if there is NO song playing on Spotify; if any song is playing, 
#it fails to work since it can't find any app window with the title "Spotify"
#and the name of the window is instead the current song playing
#which I don't know what it is going to be at any given point
dlg = Desktop(backend="uia").Spotify
#does not work
dlg = Desktop(backend="uia").window(process=app.process)

dlg.child_window(title="Your Library", control_type="Hyperlink",found_index=0).wait("exists",30).invoke()

dlg.child_window(title="Orchestra", control_type="Hyperlink",found_index=0).wait("exists",30).invoke()
try:
    dlg.child_window(title="Play Orchestra", control_type="Button").wait("exists",5).invoke()
except:
    pass

    # this also doesn't work most of the time
    dlg.wait("",10).close()
EN

回答 1

Stack Overflow用户

发布于 2022-11-25 20:27:04

从docs 如何指定应用程序的对话框中的“如何实现”页面中,您应该能够使用top_window()方法获得Z阶最高的窗口(尽管文档中说它是

相当未经检验..。它肯定是应用程序的顶级窗口--它可能不是Z级中最高的。

然而,如果应用程序中只有一个窗口,那就不应该成为问题。

代码语言:javascript
复制
dlg = app.top_window()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74577497

复制
相关文章

相似问题

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