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

Gri*_*hov 3 c# windows system uwp

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

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

我尝试过的事情:

var systemMediaControls = SystemMediaTransportControls.GetForCurrentView();
Run Code Online (Sandbox Code Playgroud)

从 Microsoft Groove Music 应用获取当前播放曲目信息

不幸的是,据我所知,它仅适用于本地媒体,从我的应用程序中播放。

由于同样的原因,后台媒体播放器也无济于事。

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

Luc*_*ini 10

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

如果您不是在开发 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();
}
Run Code Online (Sandbox Code Playgroud)


小智 0

音乐应用程序显示的屏幕控制栏不受系统控制,而是属于应用程序本身。

\n\n

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

\n\n

不管怎样,如果你只是想从操作系统获取当前歌曲,\xe2\x80\x99s 没有这样的 API。

\n\n

此致。

\n