2012-03-21 17 views
16

Tôi đang cố viết mã đọc từng mục từ thư viện Windows Media Player của người dùng. Mã này hoạt động cho phần lớn người dùng, nhưng đối với một số người dùng, getAll() sẽ trả lại danh sách trống khi họ rõ ràng có hàng trăm hoặc hàng nghìn mục trong thư viện Windows Media Player của họ.WMPLib: player.mediaCollection.getAll(). Đếm luôn là 0

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

Tôi đang tham khảo các namespace WMPLib bằng cách thêm một tài liệu tham khảo COM để wmp.dll. Ứng dụng của tôi giao với Interop.WMPLib.dll. Làm thế nào một số máy của người dùng được cấu hình theo cách mà họ chạy Windows Media Player với nhiều bài hát trong thư viện của họ, nhưng WMPLib không hoạt động chính xác? Hơn nữa, những giải pháp nào tồn tại để đọc một cách đáng tin cậy thư viện Windows Media Player của người dùng trong mọi trường hợp?

+2

Nếu bạn tình cờ có quyền truy cập vào máy để kiểm tra, bạn nhận được giá trị nào từ 'Settings.mediaAccessRights'? –

+0

WMPLib không hoạt động chính xác ?, Tôi có thể yêu cầu bạn đăng lỗi không? – Soundararajan

+0

Trong thư viện Interop chung là cụ thể cho một phiên bản của DLL, và nếu một cái gì đó thay đổi trong dll COM cơ bản, bạn sẽ phải có Interop DLL thích hợp. Bạn có biết nếu WMP ... dll là như nhau và tương thích trên các phiên bản của tất cả các cửa sổ. Một số cửa sổ như WIndows 7 N series sẽ không theo mặc định gửi bằng windows media player. Ngoài ra, bạn nên lấy cấu hình từ những người báo cáo thất bại và cố gắng tìm sự thật từ họ – Soundararajan

Trả lời

1

Hãy thử đoạn mã này và xem nó có phù hợp với bạn không.

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

Để biết thêm thông tin, hãy tham khảo bài viết tuyệt vời này về Dự án mã. http://www.codeproject.com/Articles/36338/Export-Windows-Media-Player-Music-Metadata-to-XML