检索翻录状态

[与此页面关联的功能(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;
}

翻录 CD

检索翻录接口

启动翻录过程

选择要翻录的项目