同期優先度によるプレイリストの並べ替え
[このページWindows メディア プレーヤー SDK に関連付けられている機能は、レガシ機能です。 MediaPlayer に置き換わりました。 MediaPlayer は、Windows 10とWindows 11用に最適化されています。 可能な場合は、新しいコードで SDK ではなく MediaPlayerWindows メディア プレーヤー使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
次のコードは、簡単な種類のプレイリストを実行します。 この関数の使用方法については、「 同期プレイリストの列挙」のコード例を参照してください。 関数は、次のパラメーターを受け取ります。
- pPlaylist。 並べ替えるWindows メディア プレーヤープレイリストへのポインター。 プレイリスト内のメディア項目は、個々のデジタルメディアファイルではなく、他のプレイリストを指す必要があります。
- bstrSyncAttribute。 現在のデバイスの同期パートナーシップ属性の名前を含む BSTR ("Sync01"、"Sync02"など)。
- plSelected。 同期プレイリストの数を受け取る long 変数へのポインター。
関数は、 pPlaylist で指定されたプレイリスト内の各メディア項目 (プレイリストを表す) の同期パートナーシップ属性を検査します。 属性に 0 以外の値がある場合、コードはメディア項目をプレイリストの先頭に移動し、優先順位で挿入します。
完了すると、関数は、同期パートナーシップ属性の 0 以外の値を持つメディア項目 (同期プレイリスト) の数を返します。
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 の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示