Получить каталоги, включенные в библиотеки Windows Media Center - PullRequest
5 голосов
/ 11 марта 2011

Я пишу надстройку для Media Center (версия, которая поставляется с Windows 7) и хочу получить список физических каталогов, которые пользователь включил в библиотеки мультимедиа (картинки, видео, записанные телепередачи, фильмы, музыка).

Объектная модель Media Center (Microsoft.MediaCenter.*), по-видимому, не имеет каких-либо условий для получения этой информации.

В реестре есть ключ HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Media Center\MediaFolders, однако этивсегда пустые.

Похоже, что полный список каталогов в %userprofile%\AppData\Local\Microsoft\Media Player\wmpfolders.wmdb, но невозможно определить, к какой библиотеке мультимедиа относится каждый каталог, и, поскольку это настройки для Media Player, ихприсутствие может быть просто случайным.

Кто-нибудь знает, как надежно получить список этих каталогов, предпочтительно из сборки надстройки (т. е. используя C #)?

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Я использовал Reflector, чтобы оценить, как это делает ehshell. Для изображений, видео, музыки и записанного телевидения используется импортированный метод из ehuihlp.dll. Для фильмов он просто вытягивает список прямо из HKCR\Software\Microsoft\Windows\CurrentVersion\Media Center\MediaFolders\Movie.

Вот пример того, как использовать импортированный метод:

using System.Runtime.InteropServices;

...

[DllImport(@"c:\Windows\ehome\ehuihlp.dll", CharSet = CharSet.Unicode)]
static extern int EhGetLocationsForLibrary(ref Guid knownFolderGuid, [MarshalAs(UnmanagedType.SafeArray)] out string[] locations);

...

Guid RecordedTVLibrary = new Guid("1a6fdba2-f42d-4358-a798-b74d745926c5");
Guid MusicLibrary = new Guid("2112ab0a-c86a-4ffe-a368-0de96e47012e");
Guid PicturesLibrary = new Guid("a990ae9f-a03b-4e80-94bc-9912d7504104");
Guid VideosLibrary = new Guid("491e922f-5643-4af4-a7eb-4e7a138d8174")

...

string[] locations;
EhGetLocationsForLibrary(ref PicturesLibrary, out locations);
0 голосов
/ 16 марта 2011
private void ListItems(ListMakerItem listMakerItem)
{
    if (listMakerItem.MediaTypes == Microsoft.MediaCenter.ListMaker.MediaTypes.Folder)
    {
        // Recurse into Folders
        ListMakerList lml = listMakerItem.Children;
        foreach (ListMakerItem listMakerChildItem in lml)
        {
            ListItems(listMakerChildItem);
        }
     }
     else
     {
        BuildDirectoryList(listMakerItem.FileName)
     }
}

private void BuildDirectoryList(string fileName)
{
   // Parse fileName and build unique directory list
}

Это косвенный способ, но он позволит вам создать нужный список каталогов.См. http://msdn.microsoft.com/en-us/library/ee525804.aspx для получения дополнительной информации.

...