2011-03-11 4 views
5

Media Center (Windows 7과 함께 제공되는 버전) 용 추가 기능을 작성하고 사용자가 미디어 라이브러리에 포함시킨 실제 디렉터리 목록을 검색하려고합니다. 사진, 비디오, 녹화 된 TV, 영화, 음악).Windows Media Center 라이브러리에 포함 된 디렉터리 가져 오기

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# 사용)에서 이러한 디렉토리 목록을 검색하는 것이 좋습니다.

+0

흠은, 하나 개의 질문은 그 미디어 라이브러리는 아마도 재생 목록 있을까? 나는 도서관이나 재생 목록에 익숙하지 않았지만 그들이 똑같을 수도 있다고 상상한다. 또한 [라이브러리 연결] (http://msdn.microsoft.com/en-us/library/dd562425(V= VS.85) .aspx)에서 확인할 수 있습니다. –

+0

@Reza 재생 목록은 Media Player와 Media Center에서 별도의 개념으로 간주됩니다. 쉘 라이브러리가 Media Center 라이브러리에 해당하는지 여부는 명확하지 않습니다. Windows 7에서만 소개 되었기 때문에 Vista Media Center에 여전히 제가 궁금한 점이 있습니다. –

+0

나는 MediaCenter 프로세스에 detour를 첨부하고 어떤 레지스트리 값이나 구성 파일이이 프로세스를 통해 액세스되는지 확인합니다. 그것은 약간의 힌트를 제공 할 수 있습니다. –

답변

3

리플렉터를 사용하여 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); 
+0

와우, 감동했습니다! 나는 그것을 시험에 넣고 내가 어떻게 일어나는지 알려줄거야 : –

+0

고마워! 참고로,'DllImport' 위치를 상대 경로 (Windows가 C 드라이브에 설치되어 있지 않은 경우)로 변경하고 eHome \ WoW에 32 비트 버전의 두 번째 가져 오기를 추가했습니다. 첫 번째로'BadImageFormatException '. –

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을 참조하십시오.

+0

비 대화식으로 처리 할 수 ​​있습니까, 아니면 ListMakerItem을 얻는 것이 사용자를 포함해야합니까? –

관련 문제