Определение состояния синхронизации списка воспроизведения

[Функция, связанная с этой страницей, Медиаплеер Windows SDK, является устаревшей функцией. Он был заменен MediaPlayer. MediaPlayer оптимизирован для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует по возможности использовать MediaPlayer вместо пакета SDK для Медиаплеер Windows. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Медиаплеер Windows 10 или более поздней версии использует атрибут SyncState для хранения сведений о том, был ли скопирован определенный файл цифрового мультимедиа на переносимое устройство, а в случае сбоя — произошел сбой копирования из-за нехватки памяти на устройстве.

В следующем примере кода создается функция, которая извлекает эти сведения из файла цифрового мультимедиа. Функция принимает следующие параметры:

  • pMedia. Указатель на интерфейс IWMPMedia , представляющий файл цифрового мультимедиа для проверки.
  • lPsIndex. Индекс партнерства текущего устройства.
  • pulOnDevice. Указатель на переменную типа long , которая получает значение, указывающее, был ли скопирован цифровой файл мультимедиа на устройство.
  • pulDidNotFit. Указатель на переменную типа long , которая получает значение, указывающее, произошел ли сбой операции копирования из-за нехватки памяти на устройстве.

Сведения, содержащиеся в атрибуте SyncState , кодируются побитовой кодировкой. Вы можете увидеть, как эта функция используется в примере кода в разделе Перечисление элементов мультимедиа.

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

IWMPMedia3::getItemInfoByType

Управление списками воспроизведения синхронизации

Атрибут SyncState