依同步處理優先順序排序播放清單
[與此頁面相關聯的功能Windows 媒體播放機 SDK是舊版功能。 它已被 MediaPlayer 取代。 MediaPlayer已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用MediaPlayer,而不是Windows 媒體播放機 SDK。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
下列程式碼會執行一種簡單的播放清單。 您可以在 列舉同步處理播放清單的範例程式碼中看到此函式的使用方式。 函式會採用下列參數:
- pPlaylist。 要排序之Windows 媒體播放機播放清單的指標。 播放清單中的媒體專案必須指向其他播放清單,而不是個別的數位媒體檔案。
- bstrSyncAttribute。 BSTR,包含目前裝置 (「Sync01」、「Sync02」 等同步處理合作關係屬性的名稱,依此類) 。
- plSelected。 接收同步處理播放清單計數的 長 變數指標。
函式會檢查每個媒體專案的同步處理合作關係屬性, (代表 pPlaylist所指定播放清單中的播放清單) 。 如果屬性具有非零值,程式碼會將媒體專案移至播放清單的開頭,並以優先順序插入它。
完成時,函式會傳回同步處理播放清單 (同步處理播放清單) 具有同步合作關係屬性非零值的媒體專案計數。
STDMETHODIMP CSyncSettings::SortPlaylist(IWMPPlaylist *pPlaylist, BSTR bstrSyncAttribute, long *plSelected)
{
HRESULT hr = S_OK;
long lSyncItemCount = 0;
ATLASSERT (pPlaylist);
ATLASSERT (plSelected);
// Local copies of the parameters.
CComPtr<IWMPPlaylist> spPlaylist(pPlaylist);
CComBSTR bstrAttribute(bstrSyncAttribute);
ATLASSERT (bstrAttribute.Length());
// Get the count of playlist media items.
long lCount = 0;
spPlaylist->get_count(&lCount);
// Walk the playlist.
for(long i = 0; i < lCount; i++)
{
CComPtr<IWMPMedia> spMedia;
CComBSTR bstrVal;
long lPriority = 0;
hr = spPlaylist->get_item(i, &spMedia);
if(SUCCEEDED(hr) && spMedia)
{
// Get the sync priority value as a string.
hr = spMedia->getItemInfo(bstrAttribute, &bstrVal);
}
if(SUCCEEDED(hr) && spMedia)
{
// Convert sync priority to a long number.
lPriority = _wtol(bstrVal);
}
// Sort the playlist.
// Only move the current item if it has a
// sync priority value.
if(lPriority > 0)
{
lSyncItemCount++;
// Walk down the list and insert the item
// in ascending order.
for(long j = 0; j < lCount; j++)
{
CComPtr<IWMPMedia> spMediaCompare;
CComBSTR bstrValCompare;
long lPriorityTest = 0;
hr = spPlaylist->get_item(j, &spMediaCompare);
if(SUCCEEDED(hr) && spMediaCompare.p)
{
hr = spMediaCompare->getItemInfo(bstrAttribute, &bstrValCompare);
}
if(SUCCEEDED(hr) && spMediaCompare.p)
{
lPriorityTest = _wtol(bstrValCompare);
if(lPriority <= lPriorityTest ||
0 == lPriorityTest)
{
hr = spPlaylist->moveItem(i, j);
break;
}
}
} // for j
} // if(lPriority > 0)
} // for i
// Return the sync item count.
*plSelected = lSyncItemCount;
return hr;
}
相關主題
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應