同期優先度によるプレイリストの並べ替え

[このページ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;
}

IWMPMedia::getItemInfo

IWMPPlaylist::get_item

IWMPPlaylist::moveItem

同期プレイリストの管理

属性の同期