我的一个应用程序可以从多个音乐播放器中检索当前播放的歌曲。然而,我在实现Zune和Windows Media Player时遇到了很大的麻烦。
我已经在这个主题上做了很多谷歌搜索,不幸的是,它只让我越来越困惑。
对于我的其他应用程序,我通常会做以下操作:
1. 每4秒迭代所有打开的窗口 2. 获取所有窗口的标题 3. 检查标题是否符合某种模式(例如,“-Spotify”) 4. 如果有,调整标题以进行输出
WMP的标题中没有当前播放的歌曲。
Zune有,但它每隔几秒钟就在标题,专辑和艺术家之间旋转。这对于我的当前方法来说非常不可靠,尽管可能是可行的。
Windows Media Player 我还尝试使用Windows Media Player的COM组件。
这个问题的主要问题在于它需要你以编程方式启动WMP,这将极大地不友好。
那么,我找到了什么?此SO帖子重定向到WMP.dll。但据我所知,它与COM具有相同的问题,必须以编程方式启动它。如果没有,我真的很想知道如何在Python中使用该dll。
还有另一个稍微不太hacky的解决方案,即为WMP编写插件,让我的用户下载该插件并从该插件检索数据。我不想去那里,因为我没有任何C语言的经验,也不想为此深入研究插件文档。
走Zune方法是循环遍历三种标题状态,确定当前处于哪种状态,并找到其他两种状态的位置。
例如: 前5秒钟的标题是:Super_song 接下来的5秒钟的标题是:By Power_artist 接下来的5秒钟的标题是:Good_album(日期)
所以,我可以通过制作一个日期的正则表达式来确定专辑标题,然后等待几秒钟找到标题和艺术家,但这显然不是一个好的解决方案,因为它需要一段时间,并且也不是非常可靠(例如,如果歌曲名称包含日期怎么办)。下一个问题是它也不一致,有时标题会长时间保持为Zune。不知道为什么。因此,继续下一个方法。有一个叫做ZuneNowPlaying的应用程序。这个应用程序“某种方式”从Zune获取当前播放的歌曲并将其放入注册表中,但这个东西不能与我的粗糙的标题方法一起使用,因为它在歌曲更改时立即更改注册表。这是我在程序的工作版本中使用的解决方案,但许多用户报告说它根本不起作用,什么都没有发生。我检查了程序,它并不总是可靠地更改注册表。我不知道为什么,也不知道如何修复它。因此,这个解决方案也被-取消-了。
“MsnMsgrUIManager”#000000”这个名称是否导致zune软件向其发送正在播放的歌曲信息?有没有一种方法可以在不进行此类黑客攻击的情况下获取此信息?
这是在讨论Zune Now Playing应用程序时发现的。不幸的是,源代码不可用,至少我找不到。有人对此有更多了解吗?
第三种方法是再次使用dll。它被称为ZuneShell.dll。我不记得在哪里读到过它,也无法通过谷歌找到它,因为所有结果都是“ZuneShell.dll是病毒吗?”。
再次遇到的问题是,即使我有文档,我也不知道如何使用它,甚至不知道它是否是我一直在寻找的东西。
可能要考虑的其他方向
在浏览有关此主题的内容时,我看到人们谈论直接从GUI中检索数据。我不确定它是否合法、可能或者我的记忆是否正确,但如果可能的话,有人能否将我重定向到更多相关内容?
还有其他任何事情。
我已经在这个主题上做了很多谷歌搜索,不幸的是,它只让我越来越困惑。
对于我的其他应用程序,我通常会做以下操作:
1. 每4秒迭代所有打开的窗口 2. 获取所有窗口的标题 3. 检查标题是否符合某种模式(例如,“-Spotify”) 4. 如果有,调整标题以进行输出
WMP的标题中没有当前播放的歌曲。
Zune有,但它每隔几秒钟就在标题,专辑和艺术家之间旋转。这对于我的当前方法来说非常不可靠,尽管可能是可行的。
Windows Media Player 我还尝试使用Windows Media Player的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语言的经验,也不想为此深入研究插件文档。
走Zune方法是循环遍历三种标题状态,确定当前处于哪种状态,并找到其他两种状态的位置。
例如: 前5秒钟的标题是:Super_song 接下来的5秒钟的标题是:By Power_artist 接下来的5秒钟的标题是:Good_album(日期)
所以,我可以通过制作一个日期的正则表达式来确定专辑标题,然后等待几秒钟找到标题和艺术家,但这显然不是一个好的解决方案,因为它需要一段时间,并且也不是非常可靠(例如,如果歌曲名称包含日期怎么办)。下一个问题是它也不一致,有时标题会长时间保持为Zune。不知道为什么。因此,继续下一个方法。有一个叫做ZuneNowPlaying的应用程序。这个应用程序“某种方式”从Zune获取当前播放的歌曲并将其放入注册表中,但这个东西不能与我的粗糙的标题方法一起使用,因为它在歌曲更改时立即更改注册表。这是我在程序的工作版本中使用的解决方案,但许多用户报告说它根本不起作用,什么都没有发生。我检查了程序,它并不总是可靠地更改注册表。我不知道为什么,也不知道如何修复它。因此,这个解决方案也被-取消-了。
“MsnMsgrUIManager”#000000”这个名称是否导致zune软件向其发送正在播放的歌曲信息?有没有一种方法可以在不进行此类黑客攻击的情况下获取此信息?
这是在讨论Zune Now Playing应用程序时发现的。不幸的是,源代码不可用,至少我找不到。有人对此有更多了解吗?
第三种方法是再次使用dll。它被称为ZuneShell.dll。我不记得在哪里读到过它,也无法通过谷歌找到它,因为所有结果都是“ZuneShell.dll是病毒吗?”。
再次遇到的问题是,即使我有文档,我也不知道如何使用它,甚至不知道它是否是我一直在寻找的东西。
可能要考虑的其他方向
在浏览有关此主题的内容时,我看到人们谈论直接从GUI中检索数据。我不确定它是否合法、可能或者我的记忆是否正确,但如果可能的话,有人能否将我重定向到更多相关内容?
还有其他任何事情。