我有一个简单的应用程序枚举Windows Media Player播放列表。它只是获取每个播放列表的名称并将其打印到控制台:
class Program
{
static void Main(string[] args)
{
var mediaPlayer = new WindowsMediaPlayer { uiMode = "invisible" };
var allPlaylists = mediaPlayer.playlistCollection.getAll();
Console.WriteLine("Found {0} wmp playlists");
for (int i = 0; i < allPlaylists.count; i++)
{
try
{
IWMPPlaylist wmpPlaylist = allPlaylists.Item(i); //Exception here!
Console.WriteLine("Playlist with index {0} has name '{1}'", i, wmpPlaylist.name);
}
catch (Exception e)
{
Console.WriteLine("Failed to get playlist with index {0} with error '{1}'", i, e.Message);
}
}
Console.ReadLine();
}
}
在Windows 8上运行正常但在尝试从IWMPPlaylistArray集合中获取播放列表项时在Windows8.1上抛出异常:
发现了System.IO.DirectoryNotFoundException 的HResult = -2147024893 消息=系统找不到指定的路径。 (HRESULT异常:0x80070003) 来源= WMP_POC 堆栈跟踪: 在WMPLib.IWMPPlaylistArray.Item(Int32 lIndex) 在WMP_POC.Program.Main(String [] args)中 InnerException:
即使在Windows 8.1上,它也适用于用户创建的播放列表,但对于预定义的播放列表,如“所有音乐”,“所有视频”,都会发生异常。
请帮忙!
答案 0 :(得分:2)
我已经进行了更深入的调查,我发现“所有音乐”播放列表应该位于“C:\ Users [用户名] \ AppData \ Local \ Microsoft \ Media Player \ Sync播放列表\ en-US \ 00057566”在Windows 8.1上根本不存在,而在Windows 8上它存在。这似乎是问题的根本原因。
正如我在Windows 8.1中已经提到的,问题仅存在于预定义的播放列表中,并且在一天结束时我发现了以下解决方法,这似乎适用于Windows 8.1。如果您想获得“所有音乐”播放列表,只需使用以下代码:
IWMPPlaylist allMusicPlaylist = mediaPlayer.mediaCollection.getByAttribute("MediaType", "Audio");
根据the table on the msdn更改“MediaType”属性,您可以获得“所有视频”,“所有图片”等预定义的播放列表。