Condividi tramite


Ordinamento delle playlist in base alla priorità di sincronizzazione

[La funzionalità associata a questa pagina, Lettore multimediale Windows SDK, è una funzionalità legacy. È stato sostituito da MediaPlayer. MediaPlayer è stato ottimizzato per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer invece di Lettore multimediale Windows SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il codice seguente esegue una semplice sequenza di playlist. È possibile vedere come questa funzione viene usata nel codice di esempio in Enumerazione delle playlist di sincronizzazione. La funzione accetta i parametri seguenti:

  • pPlaylist. Puntatore alla playlist Lettore multimediale Windows da ordinare. Gli elementi multimediali nella playlist devono puntare ad altre playlist, non a singoli file multimediali digitali.
  • bstrSyncAttribute. BSTR contenente il nome dell'attributo di partnership di sincronizzazione per il dispositivo corrente ("Sync01", "Sync02" e così via).
  • plSelected. Puntatore a una variabile lunga che riceve il conteggio delle playlist di sincronizzazione.

La funzione esamina l'attributo della relazione di sincronizzazione per ogni elemento multimediale (che rappresenta una playlist) nella playlist specificata da pPlaylist. Se l'attributo ha un valore diverso da zero, il codice sposta l'elemento multimediale all'inizio della playlist e lo inserisce in ordine di priorità.

Al termine, la funzione restituisce il numero di elementi multimediali (playlist di sincronizzazione) con un valore diverso da zero per l'attributo della relazione di sincronizzazione.

STDMETHODIMP CSyncSettings::SortPlaylist(IWMPPlaylist *pPlaylist, BSTR bstrSyncAttribute, long *plSelected)
{
    HRESULT hr = S_OK;
    long lSyncItemCount = 0;

    ATLASSERT (pPlaylist);
    ATLASSERT (plSelected);

    // Local copies of the parameters.
    CComPtr<IWMPPlaylist> spPlaylist(pPlaylist);
    CComBSTR bstrAttribute(bstrSyncAttribute);

    ATLASSERT (bstrAttribute.Length());

    // Get the count of playlist media items.
    long lCount = 0;
    spPlaylist->get_count(&lCount);

    // Walk the playlist.
    for(long i = 0; i < lCount; i++)
    {
        CComPtr<IWMPMedia> spMedia;                 
        CComBSTR bstrVal;            
        long lPriority = 0;
        
        hr = spPlaylist->get_item(i, &spMedia);

        if(SUCCEEDED(hr) && spMedia)
        {      
            // Get the sync priority value as a string.
            hr = spMedia->getItemInfo(bstrAttribute, &bstrVal);
        }

        if(SUCCEEDED(hr) && spMedia)
        {
            // Convert sync priority to a long number.
            lPriority = _wtol(bstrVal);
        }

        // Sort the playlist.
        // Only move the current item if it has a
        // sync priority value.
        if(lPriority > 0)
        {
            lSyncItemCount++;

            // Walk down the list and insert the item
            // in ascending order.
            for(long j = 0; j < lCount; j++)
            {
                CComPtr<IWMPMedia> spMediaCompare;
                CComBSTR bstrValCompare;
                long lPriorityTest = 0;

                hr = spPlaylist->get_item(j, &spMediaCompare);

                if(SUCCEEDED(hr) && spMediaCompare.p)
                {
                    hr = spMediaCompare->getItemInfo(bstrAttribute, &bstrValCompare);
                }
                if(SUCCEEDED(hr) && spMediaCompare.p)
                {
                    lPriorityTest = _wtol(bstrValCompare);
                    
                    if(lPriority <= lPriorityTest || 
                        0 == lPriorityTest)
                    {
                        hr = spPlaylist->moveItem(i, j);
                        break;                            
                    }                        
                } 
            } // for j                       
        } // if(lPriority > 0)          
    } // for i  
  
    // Return the sync item count.
    *plSelected = lSyncItemCount;

    return hr;
}

IWMPMedia::getItemInfo

IWMPPlaylist::get_item

IWMPPlaylist::moveItem

Gestione delle playlist di sincronizzazione

Attributi di sincronizzazione