使用 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();
}
我写了一些程序,应该与另一个播放器一起工作,并检索有关当前播放歌曲的信息。该播放器是使用 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();
}