Определение состояния синхронизации списка воспроизведения
[Функция, связанная с этой страницей, Медиаплеер 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;
}
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по