WMPLib:player.mediaCollection.getAll().count 总是为 0

16

我试图编写一段代码,用于读取用户的Windows Media Player库中的每个项目。这段代码对大多数用户有效,但对于某些用户,getAll()会返回一个空列表,尽管他们的Windows Media Player库中明显有数百或数千个项目。

var player = new WindowsMediaPlayer();
var collection = player.mediaCollection;
var list = collection.getAll();
int total = list.count;

我通过添加对wmp.dll的COM引用来引用WMPLib命名空间。我的应用程序随附有Interop.WMPLib.dll。有些用户的计算机如何配置,以便他们运行具有许多歌曲的Windows Media Player,但WMPLib无法正确运行?此外,在所有情况下都存在哪些解决方法可以可靠地读取用户的Windows Media Player库?


2
如果您恰好有一个可以测试的机器,您将从Settings.mediaAccessRights中获得什么值? - Joshua Drake
WMPLib无法正常工作?请问您能否提供失败的详细信息吗? - Soundararajan
通常,Interop库是特定于DLL版本的,如果基础COM dll中有任何更改,则必须具有相应的Interop DLL。您是否知道WMP... dll在所有Windows版本中是否相同且兼容。某些Windows(如Windows 7 N系列)默认不会随附Windows Media Player。此外,从报告故障的人那里获取配置并尝试从他们那里找到事实是一个好主意。 - Soundararajan
2
与@JoshuaDrake的答案类似,媒体集合是否属于运行代码的同一帐户?此外,在问题机器中的其中一个上使用提升的权限运行代码可能是值得尝试的 - 这是UAC的问题吗? - Simon MᶜKenzie
1个回答

1

尝试使用这个代码片段,看看它是否适用于您。

public List<MusicEntry> GetMusicLibrary()
{ 
  List<MusicEntry> entries; 
  IWMPPlaylist mediaList = null; 
  IWMPMedia mediaItem; 

  try
  { 
    // get the full audio media list 
    mediaList = media.getByAttribute("MediaType", "Audio"); 
    entries = new List<MusicEntry>(mediaList.count); 

    for (int i = 0; i < mediaList.count; i++) 
    {
      mediaItem = mediaList.get_Item(i);

      // create the new entry and populate its properties
      entry = new MusicEntry() 
      { 
        Title = GetTitle(mediaItem), 
        Album = GetAlbum(mediaItem), 
        Artist = GetArtist(mediaItem), 
        TrackNumber = GetTrackNumber(mediaItem), 
        Rating = GetRating(mediaItem), 
        FileType = GetFileType(mediaItem) 
      }; 

      entries.Add(entry); 
    } 
  } 
  finally 
  { 
    // make sure we clean up as this is COM 
    if (mediaList != null) 
    {
      mediaList.clear(); 
    } 
  } 

  return entries;
}

如需更多信息,请参考Code Project上的这篇优秀文章。 http://www.codeproject.com/Articles/36338/Export-Windows-Media-Player-Music-Metadata-to-XML


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接