共用方式為


處理 DVD 事件通知

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

當發生特定事件時,DVD 導覽器會將通知傳送至應用程式指定的視窗,例如當 DVD 網域變更、遇到新的家長管理層級,以及 DVD 導覽器即將進入角度區塊時。 事件參數可以包含與事件相關的其他資訊。 也會以這種方式傳送錯誤訊息和警告。 應用程式會指定使用 IMediaEventEx 指標呼叫 SetNotifyWindow來處理事件通知的視窗,如下所示:

const DWORD WM_DVD_EVENT = WM_USER + 100;
hr = m_pIME->SetNotifyWindow(reinterpret_cast<OAHWND>(m_hWnd), WM_DVD_EVENT, 0);

在上述範例中,m_hWnd是接收訊息的視窗 HWND,而WM_DVD_EVENT是應用程式定義的訊息 (大於WM_USER) ,表示 DVD 事件已發生。 應用程式會透過 呼叫 IMediaEvent::GetEvent來擷取事件本身。 因為一個以上的事件在任何指定時間都可能位於事件佇列中,所以應用程式必須在迴圈內呼叫 GetEvent ,直到擷取所有已排入佇列的事件為止,如下列程式碼範例所示。

while (SUCCEEDED(m_pIME->GetEvent(&lEvent, &lParam1, &lParam2, lTimeOut)))
{
    HRESULT hr;
    switch (lEvent)
    {

    case EC_DVD_CURRENT_HMSF_TIME:
        {
            DVD_HMSF_TIMECODE *pTC = reinterpret_cast<DVD_HMSF_TIMECODE *>(&lParam1);
            m_CurTime = *pTC;
            ...
        }
        break;
        ...
    } // switch
}

DVD 事件可能包含 lParam1lParam2 參數中的其他資訊,如上所示,目前時間包含在 lParam1 中。 上述程式碼範例來自 Dvdcore.cpp 中的 DVD 範例應用程式。 如需所有 DVD 事件及其參數的完整清單,請參閱 DVD 事件通知代碼

DVD 應用程式