检索翻录状态
[与此页面关联的功能(Windows 媒体播放器 SDK)是旧版功能。 它已被 MediaPlayer 取代。 MediaPlayer 已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer 而不是 Windows 媒体播放器 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
可以通过定期调用 IWMPCdromRip::get_ripProgress 来监视翻录操作的进度。 此方法检索整个翻录操作的进度值。 检索的值是一个数字,表示从 0 到 100 的翻录完成百分比。
进度值表示整个翻录过程的已完成百分比。 若要确定特定轨道的进度,请使用 IWMPMedia::getItemInfo 和“RipProgress”作为属性名称。 若要确定当前正在翻录的轨道的索引,请使用“CurrentRipTrackIndex”作为属性名称调用 IWMPPlaylist::getItemInfo 。
可以通过定期调用 IWMPCdromRip::get_ripState 来监视翻录操作的状态。 此方法检索一个 WMPRipState 枚举值,该值指示操作是正在进行还是已停止。 还可以通过处理 IWMPEvents3::CdromRipStateChange 事件来监视翻录操作的状态。 (请参阅 处理 C++ 中的事件) 请小心将事件) 提供的 IWMPCdromRip 指针 (与表示翻录操作的指针进行比较,以确保事件是由操作引发的。
以下示例代码演示如何使用这些函数检索翻录操作的状态。
为代码示例定义了以下对话框控件。
控制 ID | 说明 |
---|---|
IDC_CURRENT_TRACK | 表示当前正在翻录的曲目索引的静态文本。 |
IDC_TRACK_PROGRESS_TEXT | 静态文本,表示当前以百分比形式翻录的曲目进度。 |
IDC_PROGRESS_TRACK | 进度栏的范围为 0 到 100,表示当前以百分比形式撕裂的曲目进度。 |
IDC_OVERALL_PROGRESS_TEXT | 以百分比表示总翻录过程的进度的静态文本。 |
IDC_PROGRESS_OVERALL | 进度栏的范围为 0 到 100,以百分比表示总翻录过程的进度。 |
IDC_RIP_STATE | 显示当前正在执行的操作的静态文本 (“翻录”、“已停止”或“未知”) |
HRESULT CMainDlg::UpdateStatus (void)
{
// bstrItemName and bstrVal are used for getItemInfo.
CComBSTR bstrItemName;
CComBSTR bstrVal;
// Get the current track index.
HRESULT hr = bstrItemName.Append("CurrentRipTrackIndex");
if (SUCCEEDED(hr))
{
hr = m_spPlaylist->getItemInfo(bstrItemName, &bstrVal);
}
// Update the dialog text with the track number.
if (SUCCEEDED(hr))
{
SetDlgItemTextW(IDC_CURRENT_TRACK, bstrVal.m_str);
}
// Get an IWMPMedia interface from the Playlist.
CComPtr<IWMPMedia> spMedia;
if (SUCCEEDED(hr))
{
long lIndex = _wtol(bstrVal.m_str);
hr = m_spPlaylist->get_item(lIndex, &spMedia);
}
// Update the current track progress bar and progress text.
if (SUCCEEDED(hr))
{
bstrItemName.Empty();
hr = bstrItemName.Append("RipProgress");
}
if (SUCCEEDED(hr))
{
hr = spMedia->getItemInfo(bstrItemName, &bstrVal);
}
if (SUCCEEDED(hr))
{
// Update the text corresponding to the percentage.
SetDlgItemTextW(IDC_TRACK_PROGRESS_TEXT, bstrVal.m_str);
// Obtain a numerical value from the progress string.
long lTrackPosition = _wtol(bstrVal.m_str);
// Update the progress bar showing the percentage.
SendMessage(GetDlgItem(IDC_PROGRESS_TRACK),
PBM_SETPOS, lTrackPosition, 0);
}
// Update the total progress bar and progress text.
long lTotalPosition = 0;
if (SUCCEEDED(hr))
{
hr = m_spCdromRip->get_ripProgress(&lTotalPosition);
}
if (SUCCEEDED(hr))
{
// Update the text corresponding to the percentage.
SetDlgItemInt(IDC_OVERALL_PROGRESS_TEXT, lTotalPosition);
// Update the progress bar showing the percentage.
SendMessage(GetDlgItem(IDC_PROGRESS_OVERALL),
PBM_SETPOS, lTotalPosition, 0);
}
// Update the ripping state.
CComBSTR bstrState;
WMPRipState wmprs = wmprsUnknown;
if (SUCCEEDED(hr))
{
hr = m_spCdromRip->get_ripState(&wmprs);
}
if (SUCCEEDED(hr))
{
switch (wmprs)
{
case wmprsUnknown:
default:
hr = bstrState.Append("Unknown");
break;
case wmprsRipping:
hr = bstrState.Append("Ripping");
break;
case wmprsStopped:
hr = bstrState.Append("Stopped");
break;
}
}
if (SUCCEEDED(hr))
{
SetDlgItemTextW(IDC_RIP_STATE, bstrState.m_str);
}
return hr;
}
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈