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

WinForms/C#开发音乐播放器如何在系统音量弹窗添加条目并支持媒体键控制

Volume popup banner

实现方案

你要的效果依赖Windows自带的系统媒体传输控制(System Media Transport Controls, SMTC) 能力,不需要第三方库,直接用Windows内置API就能实现,具体步骤如下:

前置配置

首先需要让你的WinForms项目支持调用Windows Runtime API:

  • 若使用.NET 5+,直接修改项目文件的TargetFramework节点,指定适配的Windows版本:
    <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
    
  • 若使用.NET Framework,安装NuGet包Microsoft.Windows.SDK.Contracts即可调用相关API。

核心实现步骤

  • 第一步:初始化SMTC实例,启用需要的控制按钮
    using Windows.Media;
    using Windows.Media.Playback;
    
    // 初始化MediaPlayer实例(仅用来绑定SMTC,如果你已经用其他播放库比如NAudio,不需要用这个实例播放音频)
    var dummyMediaPlayer = new MediaPlayer();
    var smtc = dummyMediaPlayer.SystemMediaTransportControls;
    
    // 启用你需要的媒体控制按钮
    smtc.IsPlayEnabled = true;
    smtc.IsPauseEnabled = true;
    smtc.IsNextEnabled = true;
    smtc.IsPreviousEnabled = true;
    
  • 第二步:配置音量弹窗显示的媒体信息
    var displayUpdater = smtc.DisplayUpdater;
    // 指定媒体类型为音乐
    displayUpdater.Type = MediaPlaybackType.Music;
    // 配置歌曲信息,会显示在音量弹窗中
    displayUpdater.MusicProperties.Title = "当前播放歌曲名称";
    displayUpdater.MusicProperties.Artist = "歌手名称";
    displayUpdater.MusicProperties.AlbumTitle = "专辑名称";
    // 可选:设置专辑封面
    // displayUpdater.Thumbnail = RandomAccessStreamReference.CreateFromFile(await StorageFile.GetFileFromPathAsync("本地封面路径"));
    // 提交更新
    displayUpdater.Update();
    
  • 第三步:注册媒体按键事件回调,处理用户操作
    smtc.ButtonPressed += (sender, args) =>
    {
        switch (args.Button)
        {
            case SystemMediaTransportControlsButton.Play:
                // 写入你自己的播放逻辑
                smtc.PlaybackStatus = MediaPlaybackStatus.Playing;
                break;
            case SystemMediaTransportControlsButton.Pause:
                // 写入你自己的暂停逻辑
                smtc.PlaybackStatus = MediaPlaybackStatus.Paused;
                break;
            case SystemMediaTransportControlsButton.Next:
                // 写入切下一曲逻辑,记得同步更新歌曲信息
                break;
            case SystemMediaTransportControlsButton.Previous:
                // 写入切上一曲逻辑,记得同步更新歌曲信息
                break;
        }
    };
    

注意事项

每次切歌后都要调用displayUpdater.Update()更新显示的歌曲信息,同时同步修改smtc.PlaybackStatus的播放/暂停状态,保证音量弹窗显示的状态和实际播放状态一致。配置完成后,哪怕应用最小化,也会在系统音量弹窗中显示自定义条目,同时自动响应键盘/鼠标的媒体按键操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:15:00