DVD イベント通知の処理

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 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は DVD イベントが発生したことを通知するアプリケーション定義メッセージ (WM_USER より大きい) です。 イベント自体は、 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 イベントには、 lParam1 または lParam2 パラメーターに追加情報が含まれている場合があります。上の図に示すように、現在の時刻は lParam1 に含まれています。 上記のコード例は、Dvdcore.cpp の DVD サンプル アプリケーションのものです。 すべての DVD イベントとそのパラメーターの完全な一覧については、「 DVD イベント通知コード」を参照してください。

DVD アプリケーション