我的一个应用程序从众多音乐播放器中检索当前正在播放的歌曲。但是,我在实现 Zune 和 Windows Media Player 时遇到了很大的麻烦。
我在这个主题上做了很多谷歌搜索,不幸的是它只会让我越来越困惑。
我通常会为我的其他应用程序做什么:
- 每 4 秒遍历所有打开的窗口
- 获取所有窗口的标题
- 检查模式的标题(即,
" - Spotify "
) - 如果它在那里,调整输出的标题。
WMP 标题中没有当前播放的歌曲。
Zune 可以,但它每隔几秒钟就会在标题、专辑和艺术家之间轮换一次。尽管有可能,但用我目前的方法来跟踪是非常不可靠的。
Windows媒体播放器
我也尝试过使用 Windows 媒体播放器的 COM 组件。
import win32com.client
wmp = win32com.client.gencache.EnsureDispatch('WMPlayer.OCX')
# some function I don't have here, it retrieves the current playing song
# and other data
最大的问题是它需要您以编程方式启动 WMP,这对用户非常不友好
那么,我发现了什么?此 SO 帖子重定向到 WMP.dll。但据我所知,它与 COM 存在相同的问题,您必须以编程方式启动它。如果没有,我真的很想了解如何在 python 中使用该 dll。
还有另一个不那么 hacky 的解决方案,即为 WMP 编写一个插件,让我的用户下载该插件并从该插件中检索数据。我宁愿不去那里,因为我没有任何 C 语言的经验,也不想为此深入研究插件文档。
祖尼
一种方法是循环通过三个标题状态,确定它当前处于哪个状态并找到另外两个的位置。
IE:前 5 秒标题为:Super_song 后 5 秒标题为:By Power_artist 后 5 秒标题为:Good_album (date)
因此,我可以通过为日期制作正则表达式(始终存在)来确定专辑标题何时出现,然后等待几秒钟找到标题和艺术家。
这显然不是一个很好的解决方案,因为它需要一段时间并且也不是很可靠,(例如,如果歌曲名称包含日期怎么办)
下一个问题是它也不一致,有时标题只是在 Zune 停留几分钟。不知道为什么。
所以,继续下一个方法。
有一个名为ZuneNowPlaying的应用程序。这个“不知何故”从 Zune 获取当前正在播放的歌曲并将其放入注册表中,这不适用于我草率的标题方法,因为它会在歌曲更改的瞬间更改注册表。立即地。
这是我在程序的工作版本中使用的解决方案,但许多用户报告说它根本不起作用,什么也没发生。我检查了程序,它并没有一直可靠地更改注册表。我不知道为什么,我不知道如何解决它。因此,这个解决方案也被-scrapped-。
是不是它使用名称“MsnMsgrUIManager”#000000"> 导致 zune 软件向它发送有关正在播放的歌曲的信息?有没有办法在没有这种黑客攻击的情况下获取这些信息?
这可以在 Zune Now Playing 应用程序的讨论中找到。不幸的是,源不可用,至少我找不到它。有人对此有更多了解吗?
我听说过的第三种方法又是一个 dll。ZuneShell.dll 它被称为。我不记得我在哪里读到它,也无法通过谷歌找到它,因为所有结果都是“ZuneShell.dll 是病毒吗?”。
再一次,我遇到了一个问题,即使我有文档,我也不知道如何使用它,哎呀,如果它甚至是我一直在寻找的东西。
替代方向可能会调查
在浏览这个主题时,我看到人们谈论直接从 GUI 检索数据。我不确定我对它的记忆有多合法,可能甚至有多正确,但如果可能的话,有人可以将我重定向到更多关于此的内容吗?
其他的,真的。