Вы нашли правильный код, его надо лишь правильно применить под конкретную платформу. Для понимания того, что требуется, и почему так, достаточно почитать официальную документацию, где нас интересует два пункта в самом начале:
- Начиная с .NET 6 вы можете указать моникер целевой платформы (TFM) в файл проекта для получения доступа к API-интерфейсам WinRT. Этот вариант поддерживается в проектах, предназначенных для Windows 10 версии 1809 или более поздней.
- Для более ранних версий .NET можно установить пакет NuGet Microsoft.Windows.SDK.Contracts, чтобы добавить все необходимые ссылки в проект. Этот параметр поддерживается в проектах, предназначенных для Windows 10 версии 1803 или более поздней.
Другими словами, если ваш проект .NET6
и выше, то в нем уже есть все необходимое для получения нужной информации, вам надо лишь указать правильно целевую платформу, под которую пишется ваш проект. Если ваш проект ниже .NET6
, то вам нужно дополнительно установить пакет Microsoft.Windows.SDK.Contracts
из NuGet.
С пакетом все просто, а вот с целевой платформой могут наверно возникнуть проблемы, из-за чего я покажу пример на консольном приложении .NET7.
В студии жму два раза по названию моего проекта, открывается редактор .csproj
файла, внутренности которого выглядят примерно так:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<RootNamespace>ConsoleApp_net</RootNamespace>
</PropertyGroup>
</Project>
В этом файле нас интересует значение TargetFramework
, нам надо явно указать платформу. В документации есть нужные примеры:
- net6.0-windows10.0.17763.0 — если приложение предназначено для Windows 10, версия 1809.
- net6.0-windows10.0.18362.0 — если приложение предназначено для Windows 10, версия 1903.
- net6.0-windows10.0.19041.0 — если приложение предназначено для Windows 10, версия 2004.
- net6.0-windows10.0.22000.0 — если приложение предназначено для Windows 11.
У меня .NET7, и приложение под Windows 11, значит я указываю net7.0-windows10.0.22000.0
, если мне нужна была поддержка старой версии Windows, то я могу указать без проблем более старую версию из указанного списка, работать будет.
Указав целевую платформу, студия начнет восстанавливать все нужные пакеты, а в разделе "Зависимости" появится Microsoft.Windows.SDK.NET.Ref
, который и будет отвечать на нужный функционал. Все, мы готовы писать код.
Код из вопроса именно то, что вам и нужно, я его немного сокращу, получу такое:
var mediaTramsportManager = await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();
var mediaSession = mediaTramsportManager.GetCurrentSession();
var mediaProperties = await mediaSession.TryGetMediaPropertiesAsync();
Console.WriteLine("{0} - {1}", mediaProperties.Artist, mediaProperties.Title);
То есть, мы получаем нужную медиа сессию, из которой выдергиваем нужную нам информацию (автора, название, альбом, и даже обложку), а также, имея сессию, мы можем управлять медиа элементом (переключать треки, останавливать/возобновлять воспроизведение, и многое другое).
Вот и все, что нужно знать для получения подобной информации. Повторю, если проект старый (ниже .NET6), то нужно установить NuGet пакет Microsoft.Windows.SDK.Contracts
. Удачи!