2012-03-21 26 views
16

que estoy tratando de escribir código que lee cada elemento de la biblioteca de Windows Media Player del usuario. Este código funciona para la mayoría de usuarios, pero para algunos usuarios, getAll() devolverá una lista vacía cuando claramente tienen cientos o miles de artículos en su biblioteca de Windows Media Player.WMPLib: player.mediaCollection.getAll.() El conteo es siempre 0

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

Estoy haciendo referencia al espacio de nombres WMPLib mediante la adición de una referencia COM a Wmp.dll. Mi aplicación se envía con Interop.WMPLib.dll. ¿Cómo serían las máquinas de algunos usuarios pueden configurar de tal manera que se ejecuten Windows Media Player con muchas canciones en su biblioteca, pero WMPLib no funciona correctamente? Además, ¿qué soluciones existen para leer de manera confiable la biblioteca del Reproductor de Windows Media del usuario en todos los casos?

+2

Si tiene acceso a una máquina para probar, ¿qué valor obtiene de 'Settings.mediaAccessRights'? –

+0

¿WMPLib no funciona correctamente? ¿Puedo solicitar que publique la falla? – Soundararajan

+0

En las bibliotecas generales de interoperabilidad son específicos de una versión de DLL, y si algo cambia en el archivo DLL COM subyacente, que tendrá que tener la adecuada DLL de interoperabilidad. ¿Sabe si el WMP ... dll es el mismo y compatible en todas las versiones de todas las ventanas? Algunas ventanas como la serie Windows 7 N no se enviarán por defecto con Windows Media Player. También es una buena idea para obtener la configuración de la gente que reporta fallas y tratar de encontrar los hechos de ellos – Soundararajan

Respuesta

1

probar este fragmento y ver si funciona para usted.

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; 
} 

Para obtener más información, consulte este excelente artículo sobre Code Project. http://www.codeproject.com/Articles/36338/Export-Windows-Media-Player-Music-Metadata-to-XML

Cuestiones relacionadas