擷取Burn狀態

在下列程式碼範例中,會定義下列對話方塊控制項:

控制識別碼 描述
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 的總容量。

 

您可以定期呼叫 IWMPCdromName::get_burnProgress ,以監視正在消耗 CD 作業的進度。 這個方法會擷取整個消耗作業的進度值。 擷取的值是一個數位,代表已完成的擷取百分比,從 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);
}

您可以藉由呼叫 IWMPCdromName::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」 作為第一個參數呼叫 IWMPCdromType::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」 作為第一個參數,呼叫 IWMPCdrom要::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」 作為第一個參數呼叫 IWMPCdrom要::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 燒錄介面

啟動Burn程式

清除可重寫的 CD

擷取磁片磁碟機和磁片磁碟機狀態