Behandeln von DVD-Ereignisbenachrichtigungen
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Der DVD-Navigator sendet Benachrichtigungen an ein anwendungsspezifisches Fenster, wenn bestimmte Ereignisse stattfinden, z. B. wenn sich die DVD-Domäne ändert, wenn eine neue elterliche Verwaltungsebene gefunden wird und wenn der DVD-Navigator in einen Winkelblock eintritt. Die Ereignisparameter können zusätzliche Informationen im Zusammenhang mit dem Ereignis enthalten. Auf diese Weise werden auch Fehlermeldungen und Warnungen gesendet. Die Anwendung gibt das Fenster an, in dem die Ereignisbenachrichtigungen verarbeitet werden, indem der IMediaEventEx-Zeiger verwendet wird, um SetNotifyWindow aufzurufen, wie folgt:
const DWORD WM_DVD_EVENT = WM_USER + 100;
hr = m_pIME->SetNotifyWindow(reinterpret_cast<OAHWND>(m_hWnd), WM_DVD_EVENT, 0);
Im vorherigen Beispiel ist m_hWnd der HWND des Fensters, um die Nachrichten zu empfangen, und WM_DVD_EVENT die anwendungsdefinierte Nachricht (größer als WM_USER), die signalisiert, dass ein DVD-Ereignis stattgefunden hat. Das Ereignis selbst wird von der Anwendung durch einen Aufruf von IMediaEvent::GetEvent abgerufen. Da sich zu einem bestimmten Zeitpunkt mehrere Ereignisse in der Ereigniswarteschlange befinden können, muss die Anwendung GetEvent innerhalb einer Schleife aufrufen, die wiederholt wird, bis alle Ereignisse in der Warteschlange abgerufen wurden, wie im folgenden Codebeispiel gezeigt.
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-Ereignisse können zusätzliche Informationen in den Parametern lParam1 oder lParam2 enthalten, wie oben dargestellt, wobei die aktuelle Zeit in lParam1 enthalten ist. Das vorangehende Codebeispiel stammt aus der DVD-Beispielanwendung in Dvdcore.cpp. Eine vollständige Liste aller DVD-Ereignisse und deren Parameter finden Sie unter DVD-Ereignisbenachrichtigungscodes.
Zugehörige Themen