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

时间:2019-08-20 19:02:24

标签: c# windows uwp system

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

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

我尝试过的事情:

var systemMediaControls = SystemMediaTransportControls.GetForCurrentView();

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

不幸的是,据我所知,它仅适用于本地媒体,可通过我的应用播放。

由于相同的原因,后台媒体播放器也没有帮助。

是否可以从Windows获得它?或者我应该直接读取该播放器的内存,对吗?

2 个答案:

答案 0 :(得分:7)

我参加聚会很晚,但是我找到了一个可能的解决方案。

我使用https://www.nuget.org/packages/Microsoft.Windows.SDK.Contracts包在.NET Framework中使用Windows运行时API。

然后您要做的就是:

using System;
using Windows.Media.Control;

//

var gsmtcsm = GlobalSystemMediaTransportControlsSessionManager.RequestAsync().GetAwaiter().GetResult().GetCurrentSession();
var mediaProperties = gsmtcsm.TryGetMediaPropertiesAsync().GetAwaiter().GetResult();
Console.WriteLine("{0} - {1}", mediaProperties.Artist, mediaProperties.Title);

这将导致打印当前在系统媒体传输控件中的艺术家和歌曲的标题

最好的问候, 路卡

答案 1 :(得分:0)

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

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

无论如何,如果您只想从操作系统中获取最新歌曲,则没有此类API。

最诚挚的问候。