检索燃烧状态

[与此页面关联的功能(Windows 媒体播放器 SDK)是旧版功能。 它已被 MediaPlayer 取代。 MediaPlayer 已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer 而不是 Windows 媒体播放器 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

在下面的代码示例中,定义了以下对话控件:

控制 ID 描述
IDC_BURN_STATE 表示 CD 燃烧操作状态的静态文本。
IDC_PROGRESS 进度栏的范围为 0 到 100,表示总燃烧进度。
IDC_PROGRESS_TEXT 静态文本,将总烧伤进度表示为 0 到 100 的数字。
IDC_AVAILABLE_TIME 用于显示 CD 上可用时间(以秒为单位)的静态文本。
IDC_FREE_SPACE 用于显示 CD 上的可用空间(以字节为单位)的静态文本。
IDC_TOTAL_SPACE 用于显示 CD 总容量(以字节为单位)的静态文本。

 

可以通过在烧录 CD 时定期调用 IWMPCdromBurn::get_burnProgress 来监视烧录操作的进度。 此方法检索整个燃烧操作的进度值。 检索的值是一个数字,表示从 0 到 100 的燃烧完成百分比。

// Update the progress bar IDC_PROGRESS
// and the corresponding text string IDC_PROGRESS_TEXT.
long lProgress = 0;
hr = m_spCdromBurn->get_burnProgress(&lProgress);
if (SUCCEEDED(hr))
{
    SendMessage(GetDlgItem(IDC_PROGRESS),
        PBM_SETPOS, lProgress, 0);
    SetDlgItemInt(IDC_PROGRESS_TEXT, lProgress);
}

可以通过调用 IWMPCdromBurn::get_burnState 获取燃烧操作的当前状态。 此方法检索一个枚举,该枚举指定正在执行的当前操作。

// Retrieve the burn state.
WMPBurnState wmpbs = wmpbsUnknown;
HRESULT hr = m_spCdromBurn->get_burnState(&wmpbs);

if (SUCCEEDED(hr))
{
    // Set the burn state string.
    CComBSTR bstrState;
    switch (wmpbs)
    {
        case wmpbsUnknown:
        default:
            hr = bstrState.Append("Unknown state.");
            break;
        case wmpbsBusy:
            hr = bstrState.Append("Windows Media Player is Busy.");
            break;
        case wmpbsReady:
            hr = bstrState.Append("Ready to begin burning.");
            break;
        case wmpbsWaitingForDisc:
            hr = bstrState.Append("Waiting for disc.");
            break;
        case wmpbsRefreshStatusPending:
            hr = bstrState.Append("The burn playlist has changed.");
            m_spCdromBurn->refreshStatus();
            break;
        case wmpbsPreparingToBurn:
            hr = bstrState.Append("Preparing to burn the CD.");
            break;
        case wmpbsBurning:
            hr = bstrState.Append("The CD is being burned.");
            break;
        case wmpbsStopped:
            hr = bstrState.Append("The burning operation is stopped.");
            break;
        case wmpbsErasing:
            hr = bstrState.Append("Erasing the CD.");
            break;
    }
    if (SUCCEEDED(hr))
    {
        SetDlgItemTextW(IDC_BURN_STATE, bstrState.m_str);
    }
}

若要检索 CD 可以保存的音频的秒数,请使用“AvailableTime”作为第一个参数调用 IWMPCdromBurn::getItemInfo 。 此函数检索的值由字符串表示。

// Set "AvailableTime" string
CComBSTR bstrTime;
CComBSTR bstrItem;
HRESULT hr = bstrItem.Append("AvailableTime");
if (SUCCEEDED(hr))
{
    hr = m_spCdromBurn->getItemInfo(bstrItem, &bstrTime);
}
if (SUCCEEDED(hr))
{
    hr = bstrTime.Append(" seconds");
}
if (SUCCEEDED(hr))
{
    SetDlgItemTextW(IDC_AVAILABLE_TIME, bstrTime.m_str);
}

若要检索光盘上的可用空间量,请使用“FreeSpace”作为第一个参数调用 IWMPCdromBurn::getItemInfo 。 此函数检索的值是一个字符串,表示光盘上可用的可用字节数。

// Set "FreeSpace" string
CComBSTR bstrFreeSpace;
CComBSTR bstrItem;
HRESULT hr = bstrItem.Append("FreeSpace");
if (SUCCEEDED(hr))
{
    hr = m_spCdromBurn->getItemInfo(bstrItem, &bstrFreeSpace);
}
if (SUCCEEDED(hr))
{
    hr = bstrFreeSpace.Append(" bytes");
}
if (SUCCEEDED(hr))
{
    SetDlgItemTextW(IDC_FREE_SPACE, bstrFreeSpace.m_str);
}

若要检索光盘的总容量,请使用“TotalSpace”作为第一个参数调用 IWMPCdromBurn::getItemInfo 。 此函数检索的值是一个字符串,它对应于光盘上的字节总数。

// Set "TotalSpace" string.
CComBSTR bstrTotalSpace;
CComBSTR bstrItem;
HRESULT hr = bstrItem.Append("TotalSpace");
if (SUCCEEDED(hr))
{
    hr = m_spCdromBurn->getItemInfo(bstrItem, &bstrTotalSpace);
}
if (SUCCEEDED(hr))
{
    hr = bstrTotalSpace.Append(" bytes");
}
if (SUCCEEDED(hr))
{
    SetDlgItemTextW(IDC_TOTAL_SPACE, bstrTotalSpace.m_str);
}

刻录 CD

检索 CD 刻录接口

启动燃烧过程

擦除可重写的 CD

检索驱动器和光盘状态