You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Win32 API获取Windows系统媒体播放状态

Win32程序获取全局媒体播放状态方案

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

对应媒体控制UI界面截图

实现核心逻辑

你需要用到 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.Contracts NuGet包,即可直接调用上述接口,无需任何UWP适配操作。
  • 上述接口仅支持Windows 10 1809及以上系统,如果你需要适配更低版本系统,可通过Hook媒体按键、监听应用程序播放事件的方式实现,但兼容性相对较差。

内容的提问来源于stack exchange,提问作者Yormi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:06:01