【问题标题】:Getting current windows media player instance获取当前的 windows 媒体播放器实例
【发布时间】:2021-02-18 17:46:24
【问题描述】:

我正在尝试将当前的媒体名称/艺术家集成到我的 python 应用程序中,但我似乎无法让它工作。

我在 iTunes 上做了同样的事情,几乎没有任何问题,但由于某些原因,我无法获得正确的 windows 媒体播放器实例

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

给我一​​个有效的 wmp 实例,但是当我尝试使用当前媒体时

wmp.currentMedia

它什么也不返回,并得到这样的音量:

wmp.settings.volume

返回与我实际打开的 Windows 媒体播放器音量不同的音量。

有什么我不知道的吗?我也尝试过使用 WMPlayer.OCX.7,但这不起作用。

【问题讨论】:

标签: python python-3.x com win32com wmp


【解决方案1】:

Windows Media Player 支持多个可运行实例。以您的方式创建 OCX 会创建播放器的单独实例,当然,它没有加载任何媒体。

查找“主”实例的常用方法是查看运行对象表,但 Windows Media Player 不这样做。相反,您需要使用"remote" mode

这不是很好的文档,但是有一个 VB.Net sample here,从 C# sample here 翻译而来。 Windows SDK 中有 C++ 示例,位于 \Multimedia\WMP_11\cpp\RemoteSkin 目录中。

不幸的是,这些都不在 Python 中。但希望现有的示例能帮到您。

【讨论】:

    【解决方案2】:

    也许尝试使用GetObject(None, "WMPlayer.OCX")) insted 或EnsureDispatch 之类的东西?我认为EnsureDispatch 通常会创建一个单独的 .exe 实例。使用GetObject 应该“锁定”到当前实例并使其作为对象可用。

    【讨论】:

    • 这是一个非常好的提示,不幸的是这会导致Operation not available 错误(-2147221021)。
    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多