1

我有一个简单的应用程序枚举 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 Message=系统找不到指定的路径。(来自 HRESULT 的异常:0x80070003)Source=WMP_POC StackTrace:在 WMPLib.IWMPPlaylistArray.Item(Int32 lIndex) 在 WMP_POC.Program.Main(String[] args) 在 InnerException:

即使在 Windows 8.1 上,它也适用于用户创建的播放列表,但对于像“所有音乐”、“所有视频”这样的预定义播放列表,则会发生异常。

请帮忙!

4

1 回答 1

2

我进行了更深入的调查,发现应该驻留在“C:\Users[username]\AppData\Local\Microsoft\Media Player\Sync Playlists\en-US\00057566”中的“所有音乐”播放列表根本不存在在 Windows 8.1 上,而在 Windows 8 上它存在。这似乎是问题的根本原因。

正如我在 Windows 8.1 上已经提到的,该问题仅存在于预定义的播放列表中,最终我发现以下解决方法似乎适用于 Windows 8.1。如果您想获得“所有音乐”播放列表,只需使用以下代码:

IWMPPlaylist allMusicPlaylist = mediaPlayer.mediaCollection.getByAttribute("MediaType", "Audio"); 

通过根据msdn 上的表格更改“MediaType”属性,您可以获得“所有视频”、“所有图片”等预定义的播放列表。

于 2013-10-31T16:35:49.483 回答