Manipulando notificações de eventos de DVD

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O Navegador de DVD envia notificações para uma janela especificada pelo aplicativo quando determinados eventos ocorrem, como quando o domínio de DVD é alterado, quando um novo nível de gerenciamento dos pais é encontrado e quando o Navegador de DVD está prestes a entrar em um bloco angular. Os parâmetros de evento podem conter informações adicionais relacionadas ao evento. Mensagens de erro e avisos também são enviados dessa maneira. O aplicativo especifica a janela que manipulará as notificações de evento usando o ponteiro IMediaEventEx para chamar SetNotifyWindow, da seguinte maneira:

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

No exemplo anterior, m_hWnd é o HWND da janela para receber as mensagens e WM_DVD_EVENT é a mensagem definida pelo aplicativo (maior que WM_USER) que sinalizará que um evento de DVD ocorreu. O evento em si é recuperado pelo aplicativo por meio de uma chamada para IMediaEvent::GetEvent. Como mais de um evento pode estar na fila de eventos a qualquer momento, o aplicativo deve chamar GetEvent dentro de um loop que se repete até que todos os eventos enfileirados tenham sido recuperados, conforme mostrado no exemplo de código a seguir.

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
}

Os eventos de DVD podem conter informações adicionais nos parâmetros lParam1 ou lParam2 , conforme ilustrado acima, em que a hora atual está contida em lParam1. O exemplo de código anterior é do aplicativo de exemplo dvd em Dvdcore.cpp. Para obter uma lista completa de todos os eventos de DVD e seus parâmetros, consulte Códigos de notificação de eventos de DVD.

Aplicativos de DVD