Sortieren von Wiedergabelisten nach Synchronisierungspriorität
[Das dieser Seite zugeordnete Feature Windows Medienwiedergabe SDK ist ein Legacyfeature. Es wurde von MediaPlayer ersetzt. MediaPlayer wurde für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, nach Möglichkeit für neuen Code MediaPlayer anstelle von Windows Medienwiedergabe SDK zu verwenden. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Der folgende Code führt eine einfache Art von Wiedergabelisten aus. Wie diese Funktion verwendet wird, sehen Sie im Beispielcode unter Enumerating Synchronization Playlists. Die Funktion akzeptiert die folgenden Parameter:
- pPlaylist. Der Zeiger auf die zu sortierende Windows Medienwiedergabe Wiedergabeliste. Die Medienelemente in der Wiedergabeliste müssen auf andere Wiedergabelisten verweisen, nicht auf einzelne digitale Mediendateien.
- bstrSyncAttribute. Ein BSTR, der den Namen des Synchronisierungspartnerschaftsattributs für das aktuelle Gerät ("Sync01", "Sync02" usw.) enthält.
- plSelected. Zeiger auf eine lange Variable, die die Anzahl der Synchronisierungswiedergabelisten empfängt.
Die Funktion überprüft das Attribut der Synchronisierungspartnerschaft für jedes Medienelement (das eine Wiedergabeliste darstellt) in der von pPlaylist angegebenen Wiedergabeliste. Wenn das Attribut über einen wert ungleichen Wert verfügt, verschiebt der Code das Medienelement an den Anfang der Wiedergabeliste und fügt es in der Prioritätsreihenfolge ein.
Nach Abschluss gibt die Funktion die Anzahl der Medienelemente (Synchronisierungswiedergabelisten) zurück, die einen Nonzero-Wert für das Attribut "Synchronisierungspartnerschaft" aufweisen.
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;
}
Zugehörige Themen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für