擷取待用狀態

[與此頁面相關聯的功能Windows 媒體播放機 SDK是舊版功能。 它已被 MediaPlayer 取代MediaPlayer已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用MediaPlayer,而不是Windows 媒體播放機 SDK。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

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

控制識別碼 描述
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 ,以監視光碟機作業的進度。 這個方法會擷取整個擷取作業的進度值。 擷取的值是一個數位,代表從 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);
}

您可以藉由呼叫 IWMPCdromCount::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」 作為第一個參數呼叫 IWMPCdrom,: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 Process

清除可重寫的 CD

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