Freigeben über


Abrufen des Rip-Status

[Das dieser Seite zugeordnete Feature Windows Medienwiedergabe SDK ist ein Legacyfeature. Es wurde von MediaPlayer abgelöst. MediaPlayer wurde für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, mediaPlayer anstelle von Windows Medienwiedergabe SDK für neuen Code zu verwenden. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Sie können den Fortschritt des Rippingvorgangs überwachen, indem Sie IWMPCdromRip::get_ripProgress regelmäßig aufrufen. Diese Methode ruft einen Statuswert für den gesamten Rippingvorgang ab. Der abgerufene Wert ist eine Zahl, die den Prozentsatz des abgeschlossenen Rippens von 0 bis 100 darstellt.

Der Statuswert stellt den abgeschlossenen Prozentsatz des gesamten Rippingprozesses dar. Um den Fortschritt einer bestimmten Spur zu bestimmen, verwenden Sie IWMPMedia::getItemInfo mit "RipProgress" als Attributnamen. Rufen Sie IWMPPlaylist::getItemInfo mit "CurrentRipTrackIndex" als Attributnamen auf, um den Index des titels zu bestimmen, der gerade gerissen wird.

Sie können den Zustand des Rippingvorgangs überwachen, indem Sie IWMPCdromRip::get_ripState regelmäßig aufrufen. Diese Methode ruft einen WMPRipState-Enumerationswert ab, der angibt, ob der Vorgang ausgeführt oder beendet wird. Sie können den Zustand des Rippingvorgangs auch überwachen, indem Sie das Ereignis IWMPEvents3::CdromRipStateChange behandeln. (Siehe Behandeln von Ereignissen in C++.) Achten Sie darauf, den IWMPCdromRip-Zeiger (vom Ereignis bereitgestellt) mit dem Zeiger zu vergleichen, der Ihren Rippingvorgang darstellt, um sicherzustellen, dass das Ereignis von Ihrem Vorgang ausgelöst wurde.

Der folgende Beispielcode zeigt, wie Sie diese Funktionen verwenden, um die status eines Rippingvorgangs abzurufen.

Die folgenden Dialogsteuerelemente sind für das Codebeispiel definiert.

Steuerungs-ID Beschreibung
IDC_CURRENT_TRACK Statischer Text, der den Index des Titels darstellt, der gerade gerissen wird.
IDC_TRACK_PROGRESS_TEXT Statischer Text, der den Fortschritt des Titels darstellt, der derzeit als Prozentsatz gerippt wird.
IDC_PROGRESS_TRACK Statusanzeige mit Bereich 0 bis 100, der den Fortschritt des Titels darstellt, der derzeit als Prozentsatz gerissen wird.
IDC_OVERALL_PROGRESS_TEXT Statischer Text, der den Fortschritt des gesamten Rippenprozesses als Prozentsatz darstellt.
IDC_PROGRESS_OVERALL Statusanzeige mit Einem Bereich von 0 bis 100, der den Fortschritt des gesamten Rippingprozesses als Prozentsatz darstellt.
IDC_RIP_STATE Statischer Text, der den derzeit ausgeführten Vorgang anzeigt ("Ripping", "Stopped" oder "Unknown")

 

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

Rippen einer CD

Abrufen der Rippingschnittstelle

Starten des Rip-Prozesses

Auswählen von Elementen zum Ripping