Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEngineoraz Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
Menedżer filtru programu Graph uwidacznia trzy interfejsy, które obsługują powiadomienie o zdarzeniach.
- IMediaEventSink zawiera metodę filtrów do publikowania zdarzeń.
- IMediaEvent zawiera metody pobierania zdarzeń przez aplikacje.
- IMediaEventEx dziedziczy i rozszerza interfejs IMediaEvent.
Filtruje powiadomienia o zdarzeniach, wywołując metodę IMediaEventSink::Notify w Menedżerze programu Graph Filter. Powiadomienie o zdarzeniu składa się z kodu zdarzenia, który definiuje typ zdarzenia i dwa parametry, które zawierają dodatkowe informacje. W zależności od kodu zdarzenia parametry mogą zawierać wskaźniki, kody powrotne, czasy odwołania lub inne informacje. Aby uzyskać pełną listę kodów zdarzeń i parametrów, zobacz kody powiadomień o zdarzeniach.
Aby pobrać zdarzenie z kolejki, aplikacja wywołuje metodę IMediaEvent::GetEvent w Menedżerze grafów filtrów. Ta metoda blokuje, dopóki nie pojawi się zdarzenie do zwrócenia lub do upływu określonego czasu. Zakładając, że istnieje zdarzenie w kolejce, metoda zwraca kod zdarzenia i dwa parametry zdarzenia. Po wywołaniu GetEventaplikacja powinna zawsze wywołać metodę IMediaEvent::FreeEventParams, aby zwolnić wszystkie zasoby skojarzone z parametrami zdarzenia. Na przykład parametr może być wartością BSTR przydzieloną przez wykres filtru.
Poniższy przykład kodu przedstawia sposób pobierania zdarzeń z kolejki.
long evCode;
LONG_PTR param1, param2;
HRESULT hr;
while (hr = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0), SUCCEEDED(hr))
{
switch(evCode)
{
// Call application-defined functions for each
// type of event that you want to handle.
}
hr = pEvent->FreeEventParams(evCode, param1, param2);
}
Aby zastąpić domyślną obsługę menedżera wykresów dla zdarzenia, wywołaj metodę IMediaEvent::CancelDefaultHandling, używając kodu zdarzenia jako parametru. Domyślną obsługę można przywrócić, wywołując metodę IMediaEvent::RestoreDefaultHandling. Jeśli wykres filtru nie obsługuje domyślnego kodu określonego zdarzenia, wywołanie tych metod nie ma żadnego wpływu.
Tematy pokrewne
-
powiadomienie o zdarzeniu w DirectShow