获取当前Windows Media Player实例

3 投票
2 回答
1015 浏览
提问于 2025-04-17 22:32

我正在尝试在我的Python应用程序中集成当前播放的媒体名称和艺术家,但我似乎无法让它正常工作。

我之前在iTunes上做过类似的事情,几乎没有遇到什么问题,但不知道为什么,我无法正确获取Windows Media Player的实例。

wmp = win32com.client.gencache.EnsureDispatch("WMPlayer.OCX")

这段代码让我得到了一个有效的Windows Media Player实例,但当我尝试获取当前播放的媒体时,使用的代码是:

wmp.currentMedia

结果什么都没有返回。而且用这种方式获取音量:

wmp.settings.volume

返回的音量和我实际打开的Windows Media Player的音量不一样。

我是不是漏掉了什么?我也试过使用WMPlayer.OCX.7,但那也不行。

2 个回答

0

也许可以试试用 GetObject(None, "WMPlayer.OCX")) 来代替 EnsureDispatch?我觉得 EnsureDispatch 通常会启动一个新的 .exe 实例。而使用 GetObject 应该可以“连接”到当前的实例,并把它当作一个对象来使用。

1

Windows Media Player可以同时运行多个实例。你现在创建的OCX方式会生成一个独立的播放器实例,而这个实例自然是没有加载任何媒体文件的。

通常要找到“主”实例,可以查看运行对象表,但Windows Media Player并不这样做。相反,你需要使用“远程”模式

这个模式的文档并不是特别详细,不过这里有一个VB.Net的示例,是从一个C#示例翻译过来的。在Windows SDK中,\Multimedia\WMP_11\cpp\RemoteSkin目录下也有C++的示例。

遗憾的是,这些内容在Python中没有。不过希望现有的示例能对你有所帮助。

撰写回答