如何使用Win32 API获取Windows系统媒体播放状态
Win32程序获取全局媒体播放状态方案
你不需要将现有Win32项目整体迁移到UWP平台即可实现需求:Windows Runtime(WinRT)接口并非UWP专属,传统桌面程序可以直接调用相关API获取全局媒体控制的播放状态。

实现核心逻辑
你需要用到 GlobalSystemMediaTransportControlsSessionManager 系列WinRT接口,该接口是系统左上角媒体控制UI的数据源,完全匹配你要获取的播放状态信息,最低支持Windows 10 1809及以上系统版本。
具体实现步骤(以C++/WinRT为例)
- 项目引入C++/WinRT支持,添加头文件引用:
#include <winrt/Windows.Media.Control.h> using namespace winrt::Windows::Media::Control;
- 异步请求获取全局会话管理器实例
auto manager = co_await GlobalSystemMediaTransportControlsSessionManager::RequestAsync();
- 枚举当前所有活跃媒体会话,或直接获取当前焦点会话判断状态
// 也可直接获取当前正在播放的焦点会话 auto currentSession = manager.GetCurrentSession(); if (currentSession) { auto playbackInfo = currentSession.GetPlaybackInfo(); auto status = playbackInfo.PlaybackStatus(); // 枚举值判断播放状态: // PlaybackStatus::Playing 为播放状态 // PlaybackStatus::Paused 为暂停状态 // PlaybackStatus::Stopped 为停止状态 }
其他适配说明
- 如果是C#开发的WinForm/WPF等Win32程序,只需安装对应版本的
Microsoft.Windows.SDK.ContractsNuGet包,即可直接调用上述接口,无需任何UWP适配操作。 - 上述接口仅支持Windows 10 1809及以上系统,如果你需要适配更低版本系统,可通过Hook媒体按键、监听应用程序播放事件的方式实现,但兼容性相对较差。
内容的提问来源于stack exchange,提问作者Yormi
相关产品推荐
相关产品推荐

