Détermination de l’état de synchronisation des playlists

[La fonctionnalité associée à cette page, Lecteur multimédia Windows SDK, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer. MediaPlayer a été optimisé pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer au lieu de Lecteur multimédia Windows SDK, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Lecteur multimédia Windows 10 ou version ultérieure utilise l’attribut SyncState pour contenir des informations indiquant si un fichier multimédia numérique particulier a été copié sur un appareil portable et, en cas de défaillance, si la copie a échoué, car l’appareil ne disposait pas de suffisamment de mémoire.

L’exemple de code suivant crée une fonction qui récupère ces informations à partir d’un fichier multimédia numérique. La fonction prend les paramètres suivants :

  • pMedia. Pointeur vers une interface IWMPMedia qui représente le fichier multimédia numérique à inspecter.
  • lPsIndex. Index de partenariat de l’appareil actuel.
  • pulOnDevice. Pointeur vers une variable longue qui reçoit la valeur indiquant si le fichier multimédia numérique a été copié sur l’appareil.
  • pulDidNotFit. Pointeur vers une variable longue qui reçoit la valeur indiquant si l’opération de copie a échoué, car l’appareil n’avait pas suffisamment de mémoire.

Les informations contenues dans l’attribut SyncState sont encodées au niveau du bit. Vous pouvez voir comment cette fonction est utilisée dans l’exemple de code dans Énumération des éléments multimédias.

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, interface

IWMPMedia3::getItemInfoByType

Gestion des playlists de synchronisation

Attribut SyncState