Share via


Determinar el estado de sincronización de listas de reproducción

[La característica asociada a esta página, Reproductor multimedia de Windows SDK, es una característica heredada. Se ha reemplazado por MediaPlayer. MediaPlayer se ha optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer en lugar de Reproductor multimedia de Windows SDK, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Reproductor multimedia de Windows 10 o posterior usa el atributo SyncState para contener información sobre si se ha copiado un archivo multimedia digital determinado en un dispositivo portátil y, en caso de error, si se ha producido un error en la copia porque el dispositivo no tenía suficiente memoria.

El código de ejemplo siguiente crea una función que recupera esta información de un archivo multimedia digital. La función toma los parámetros siguientes:

  • pMedia. Puntero a una interfaz IWMPMedia que representa el archivo multimedia digital que se va a inspeccionar.
  • lPsIndex. Índice de asociación del dispositivo actual.
  • pulOnDevice. Puntero a una variable larga que recibe el valor que indica si el archivo multimedia digital se ha copiado en el dispositivo.
  • pulDidNotFit. Puntero a una variable larga que recibe el valor que indica si se produjo un error en la operación de copia porque el dispositivo no tenía suficiente memoria.

La información contenida en el atributo SyncState se codifica de forma bit a bit. Puede ver cómo se usa esta función en el código de ejemplo en Enumerar los elementos multimedia.

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

IWMPMedia (interfaz)

IWMPMedia3::getItemInfoByType

Administración de listas de reproducción de sincronización

Atributo SyncState