Determinazione dello stato di sincronizzazione della playlist

[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.

Lettore multimediale Windows 10 o versione successiva usa l'attributo SyncState per contenere informazioni su se un determinato file multimediale digitale è stato copiato in un dispositivo portatile e, in caso di errore, se la copia non è riuscita perché il dispositivo non dispone di memoria sufficiente.

Il codice di esempio seguente crea una funzione che recupera queste informazioni da un file multimediale digitale. La funzione accetta i parametri seguenti:

  • pMedia. Puntatore a un'interfaccia IWMPMedia che rappresenta il file multimediale digitale da controllare.
  • lPsIndex. Indice di partnership del dispositivo corrente.
  • pulOnDevice. Puntatore a una variabile long che riceve il valore che indica se il file multimediale digitale è stato copiato nel dispositivo.
  • pulDidNotFit. Puntatore a una variabile lunga che riceve il valore che indica se l'operazione di copia non è riuscita perché il dispositivo non dispone di memoria sufficiente.

Le informazioni contenute nell'attributo SyncState vengono codificate in modo bit per bit. È possibile vedere come questa funzione viene usata nel codice di esempio in Enumerating the Media Items .You can see how this function is used in the example code in Enumerating the Media Items.

STDMETHODIMP CSyncSettings::GetPartnershipSyncState(IWMPMedia* pMedia, long lPsIndex, ULONG *pulOnDevice, ULONG *pulDidNotFit)
{
    ATLASSERT(pMedia); 
    ATLASSERT(lPsIndex > 0 && 
              lPsIndex < 17);
    ATLASSERT(pulOnDevice);
    ATLASSERT(pulDidNotFit);
  
    CComVariant varSyncStateVal;   
    CComPtr<IWMPMedia> spMedia(pMedia); 
    CComPtr<IWMPMedia3> spMedia3;     
    HRESULT hr = spMedia.QueryInterface(&spMedia3); 
    ULONG ulSyncState = 0; // Stores the ulVal member of varSyncStateVal. 
    ULONG lLSB = 0; // Represents least significant bit: Did the media fail to copy because it would not fit?
    ULONG lMSB = 0; // Represents most significant bit: Is the media on the device?

    // Calculate the bit shift required to isolate the partnership bit 
    // pair from the SyncState attribute.
    const int iRshift = (lPsIndex - 1) * 2;

    if(SUCCEEDED(hr) && spMedia3)
    {       
        hr = spMedia3->getItemInfoByType(CComBSTR("SyncState"), CComBSTR(""), 0, &varSyncStateVal);
    }

    if(SUCCEEDED(hr) && varSyncStateVal.vt == VT_UI4)
    {   
        // Get the value.
        ulSyncState = varSyncStateVal.ulVal;

        // Shift the bit pair to the rightmost position.
        ulSyncState >>= iRshift; 

        // Mask the rightmost bit pair.
        ulSyncState &= 3;

        // Get the LSB         
        lLSB = ulSyncState & ~2; // Sets the 2E1 bit to zero. 

        // Get the MSB
        ulSyncState >>= 1;
        lMSB = ulSyncState;       
    }

    // Return the bits.
    *pulOnDevice = lMSB;
    *pulDidNotFit = lLSB;

    return hr;
}

Interfaccia IWMPMedia

IWMPMedia3::getItemInfoByType

Gestione delle playlist di sincronizzazione

Attributo SyncState