Windows Media Player 11 SDK Retrieving the Burn StatusĀ 

Windows Media Player SDK banner art

Previous Next

Retrieving the Burn Status

In the code example that follows, the following dialog controls are defined:

Control ID Description
IDC_BURN_STATE Static text that represents the state of the CD burning operation.
IDC_PROGRESS Progress bar with a range of 0 to 100 that represents the total burn progress.
IDC_PROGRESS_TEXT Static text that represents the total burn progress as a number from 0 to 100.
IDC_AVAILABLE_TIME Static text to display the time available on the CD, in seconds.
IDC_FREE_SPACE Static text to display the free space on the CD, in bytes.
IDC_TOTAL_SPACE Static text to display the total capacity of the CD, in bytes.

You can monitor the progress of the burning operation by periodically calling IWMPCdromBurn::get_burnProgress while the CD is being burned. This method retrieves a progress value for the entire burning operation. The value retrieved is a number that represents the percentage of burning completed, from 0 to 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);
}

You can get the current state of the burning operation by calling IWMPCdromBurn::get_burnState. This method retrieves an enumeration specifying the current operation being performed.

// 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);
    }
}

To retrieve the number of seconds of audio the CD can hold, call IWMPCdromBurn::getItemInfo with "AvailableTime" as the first parameter. The value retrieved by this function is represented by a string.

// 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);
}

To retrieve the amount of free space on a disc, call IWMPCdromBurn::getItemInfo with "FreeSpace" as the first parameter. The value retrieved by this function is a string that represents the number of free bytes available on the disc.

// 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);
}

To retrieve the total capacity of a disc, call IWMPCdromBurn::getItemInfo with "TotalSpace" as the first parameter. The value retrieved by this function is a string that corresponds to the total number of bytes on the disc.

// 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);
}

See Also

Previous Next