如何在Python中获取Windows媒体小部件的当前播放数据?
如何在Python中获取Windows媒体小部件的当前播放数据?
看起来你在获取Windows当前播放的媒体信息时遇到了点小麻烦,我来帮你梳理下可行的方案,顺便解决你安装winrt失败的问题~
首先说你碰到的winrt安装问题:你之前尝试的旧版winrtPyPI包已经停止维护并且下架了,所以不管是Python 3.9还是更高版本,都找不到这个包了,这不是你的操作问题,是包本身的问题。
现在给你几个靠谱的替代方案:
方案一:使用新版WinRT绑定(推荐)
现在官方维护的WinRT Python绑定包是winrt-windows,它支持Python 3.8及以上版本,包括3.11+,完全可以替代旧的winrt包。
步骤1:安装正确的包
先把pip升级到最新版本,避免安装时的兼容问题:
python -m pip install --upgrade pip
然后安装winrt-windows:
pip install winrt-windows
步骤2:编写代码获取媒体信息
这个包可以直接调用Windows的GlobalSystemMediaTransportControlsSessionManagerAPI,这正是Windows媒体小部件用来获取播放数据的底层接口。示例代码如下:
from winrt.windows.media.control import GlobalSystemMediaTransportControlsSessionManager as MediaManager import asyncio async def fetch_current_media(): try: # 获取媒体会话管理器 session_manager = await MediaManager.request_async() # 获取当前活跃的播放会话 current_session = session_manager.get_current_session() if not current_session: return "当前没有正在播放的媒体内容" # 获取媒体属性(标题、艺术家等) media_props = await current_session.try_get_media_properties_async() # 获取播放状态(播放/暂停/停止等) playback_status = current_session.get_playback_info().playback_status # 整理成易读的信息 media_info = { "媒体标题": media_props.title, "艺术家": media_props.artist, "专辑": media_props.album_title, "播放状态": str(playback_status).split(".")[-1] # 提取状态的可读名称 } return media_info except Exception as e: return f"获取媒体信息失败:{str(e)}" # 运行异步函数 if __name__ == "__main__": result = asyncio.run(fetch_current_media()) if isinstance(result, dict): for key, value in result.items(): print(f"{key}: {value}") else: print(result)
运行这段代码就能得到当前正在播放的媒体的标题、艺术家、专辑和播放状态了,和你看到的媒体小部件里的信息一致。
方案二:使用第三方工具包(备选)
如果你对WinRT的异步代码不太习惯,也可以试试pycaw——虽然它主要是用来控制音频设备的,但也能间接获取部分媒体播放信息。不过它的媒体信息支持不如WinRT全面,比如某些播放器的信息可能无法正确读取,你可以根据需求选择:
安装:
pip install pycaw
最后再提下排查点
如果安装winrt-windows还是失败,你可以检查:
- 你的Python版本是否在3.8到3.12之间(这个包的支持范围)
- 是否使用的是64位Python(WinRT绑定对32位Python的支持有限)
- 有没有开启虚拟环境,确保安装的包在正确的环境里
你可以先试试方案一,应该能完美解决你的问题,如果还有其他细节问题可以再调整~
备注:内容来源于stack exchange,提问作者malloww
相关产品推荐
相关产品推荐

