メディア アイテムの列挙
[このページWindows メディア プレーヤー SDK に関連付けられている機能は、レガシ機能です。 MediaPlayer に置き換わりました。 MediaPlayer は、Windows 10とWindows 11用に最適化されています。 可能な場合は、新しいコードで SDK ではなく MediaPlayerWindows メディア プレーヤー使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
次のコードは、個々のプレイリストに含まれるメディア項目を表示します。 このコードは、ユーザーが IDC_PLVIEW によって識別される ListView コントロール内のプレイリストをクリックしたときに実行されます。
STDMETHODIMP CSyncSettings::ShowMedia(long lIndex)
{
ATLASSERT(m_pMainDlg != NULL);
ATLASSERT(m_spPlaylist.p);
HRESULT hr = S_OK;
long lCount = 0; // Count of items in the playlist.
LVITEM lvI;
ZeroMemory(&lvI, sizeof(LVITEM));
lvI.mask = LVIF_TEXT;
CComPtr<IWMPMedia> spPlaylist; // Playlist the user selected.
CComBSTR bstrSourceURL; // The URL of a digital media file.
CComPtr<IWMPPlaylist> spNewPlaylist; // Temporary playlist that contains media items.
ULONG ulOnDevice = 0;
ULONG ulDidNotFit = 0;
HCURSOR hCursor = LoadCursor(NULL, IDC_WAIT);
HCURSOR hCursorOld = SetCursor(hCursor);
ListView_DeleteAllItems(m_hMediaView);
// Retrieve the playlist the user selected.
hr = m_spPlaylist->get_item(lIndex, &spPlaylist);
if(SUCCEEDED(hr) && spPlaylist)
{
// Retrieve the source URL (the path).
hr = spPlaylist->get_sourceURL(&bstrSourceURL);
}
if(SUCCEEDED(hr) && bstrSourceURL.Length())
{
CComPtr<IWMPCore3> spCore3;
m_spPlayer.QueryInterface(&spCore3);
// Create a temporary IWMPPlaylist object from the IWMPMedia
// playlist object.
hr = spCore3->newPlaylist(CComBSTR("Temp"), bstrSourceURL, &spNewPlaylist);
}
if(SUCCEEDED(hr) && spNewPlaylist)
{
hr = spNewPlaylist->get_count(&lCount);
}
// Walk the playlist.
if(SUCCEEDED(hr) && lCount > 0)
{
for(long i = 0; i < lCount; i++)
{
CComPtr<IWMPMedia> spMedia;
CComBSTR bstrMediaName;
CComBSTR bstrOnDevice = "???";
CComBSTR bstrFit = "???";
hr = spNewPlaylist->get_item(i, &spMedia);
if(SUCCEEDED(hr) && spMedia)
{
// Get the name.
hr = spMedia->get_name(&bstrMediaName);
}
if(SUCCEEDED(hr) && bstrMediaName.Length())
{
// Show the media name.
lvI.iItem = ListView_GetItemCount(m_hMediaView);
lvI.iSubItem = 0;
lvI.pszText = COLE2T(bstrMediaName);
ListView_InsertItem(m_hMediaView, &lvI);
// Retrieve the synchronization state information for
// the digital media file.
hr = GetPartnershipSyncState(spMedia, m_lCurrentPSIndex, &ulOnDevice, &ulDidNotFit);
}
if(SUCCEEDED(hr))
{
// Test whether the media is on the device.
if(ulOnDevice == 1)
{
bstrOnDevice = "Yes";
bstrFit = "Yes";
}
else
{
bstrOnDevice = "No";
// 1 means media did not fit,
// 0 means other reason for failure.
bstrFit = ulDidNotFit ? "No" : "Yes";
}
}
ListView_SetItemText(m_hMediaView, lvI.iItem, 1, COLE2T(bstrOnDevice));
ListView_SetItemText(m_hMediaView, lvI.iItem, 2, COLE2T(bstrFit));
}
}
if(SUCCEEDED(hr) && lCount == 0)
{
// Empty playlist.
lvI.iItem = ListView_GetItemCount(m_hMediaView);
lvI.iSubItem = 0;
lvI.pszText = COLE2T(CComBSTR("No items to display."));
ListView_InsertItem(m_hMediaView, &lvI);
}
SetCursor(hCursorOld);
return hr;
}
GetPartnershipSyncState 関数の実装については、「 プレイリスト同期状態の決定」を参照してください。
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示