使用 SystemMediaTransportControls 从其他应用程序获取当前播放的歌曲信息

Using SystemMediaTransportControls to get current playing song info from other app

我写了一些程序,应该与另一个播放器一起工作,并检索有关当前播放歌曲的信息。该播放器是使用 UWP 编写的,因此 Windows 知道正在播放的曲目,因此我可以在更改音量时看到它的名称和其他信息:

https://i.imgur.com/nNy16Gs.png

我尝试过的事情:

var systemMediaControls = SystemMediaTransportControls.GetForCurrentView();

来自Get current playing track info from Microsoft Groove Music app

很遗憾,据我所知,它仅适用于本地媒体,从我的应用程序播放。

出于同样的原因,背景媒体播放器也没有帮助。

是否可以从 Windows 获取它?还是直接读取那个播放器的内存,呵呵?

音乐应用显示的屏幕控制条不受系统控制,属于应用本身。

您无法在其他音乐软件中播放音乐,就像您无法从其他应用程序的应用程序文件夹中获取文件一样。

无论如何,如果您只想从 OS 获取当前歌曲,API 是没有的。

此致。

如何显示艺术家和歌曲名称:

如果您不开发 WinRT 应用程序,请获取 Microsoft.Windows.SDK.Contracts 程序包。

(Visual Studio) 在您的 NuGet 包管理器设置中(工具->NuGet 包管理器->包管理器设置)您需要将 'PackageManagement\Default package management format' 设置为 'PackageReference'

如果您这样做了,该包应该会出现在您的参考文献中。如果不是这种情况,您需要卸载软件包及其依赖项,然后重试。

示例代码如下:

using System;
using System.Threading.Tasks;
using Windows.Media.Control;

public static class Program {
    public static async Task Main(string[] args) {
        var gsmtcsm = await GetSystemMediaTransportControlsSessionManager();
        var mediaProperties = await GetMediaProperties(gsmtcsm.GetCurrentSession());

        Console.WriteLine("{0} - {1}", mediaProperties.Artist, mediaProperties.Title);

        Console.WriteLine("Press any key to quit..");
        Console.ReadKey(true);
    }

    private static async Task<GlobalSystemMediaTransportControlsSessionManager> GetSystemMediaTransportControlsSessionManager() =>
        await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();

    private static async Task<GlobalSystemMediaTransportControlsSessionMediaProperties> GetMediaProperties(GlobalSystemMediaTransportControlsSession session) =>
        await session.TryGetMediaPropertiesAsync();
}