Как получить информацию о треке запущенного в системе

Рейтинг: 3Ответов: 1Опубликовано: 21.07.2023

Мне нужно получить информацию о треке, который запущен в каком-либо внешнем плеере, необходимо получить его название и автора для программы на .Net C#. На скриншоте изображен пример того, что название трека и автор отображаются в системе, но необходимо как-то получить название и автора в программе на C#.

Пример

Ответы

▲ 7Принят

Вы нашли правильный код, его надо лишь правильно применить под конкретную платформу. Для понимания того, что требуется, и почему так, достаточно почитать официальную документацию, где нас интересует два пункта в самом начале:

  • Начиная с .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.

  1. В студии жму два раза по названию моего проекта, открывается редактор .csproj файла, внутренности которого выглядят примерно так:

     <Project Sdk="Microsoft.NET.Sdk">
       <PropertyGroup>
         <OutputType>Exe</OutputType>
         <TargetFramework>net7.0</TargetFramework>
         <RootNamespace>ConsoleApp_net</RootNamespace>
       </PropertyGroup>
     </Project>
    
  2. В этом файле нас интересует значение 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, то я могу указать без проблем более старую версию из указанного списка, работать будет.

  3. Указав целевую платформу, студия начнет восстанавливать все нужные пакеты, а в разделе "Зависимости" появится 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. Удачи!