5

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#を使用して)これらのディレクトリのリストを確実に取得する方法を知っている人はいますか?

4

2 に答える 2

3

私はReflectorを使用して、ehshellがこれをどのように行うかをピークにしました。写真、ビデオ、音楽、および録画済みTVの場合、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);
于 2011-03-16T21:36:55.030 に答える
0
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を参照してください。

于 2011-03-16T17:24:36.827 に答える