Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Gerenciador de Dispositivos do Windows Media declara quatro interfaces que um aplicativo pode implementar em uma classe COM para receber notificações de eventos. Essas interfaces se dividem em dois grupos, conforme mostrado na tabela a seguir.
| Interfaces | Descrição |
|---|---|
| IWMDMNotification | Notifica o aplicativo quando dispositivos ou mídia de armazenamento estão conectados ou desconectados. |
|
IWMDMProgress IWMDMProgress2 IWMDMProgress3 |
Um sistema de notificação muito simples para alertar uma aplicação sobre o progresso de qualquer evento. O aplicativo não é obrigado a executar nenhuma ação em resposta a essas mensagens. |
IWMDMNotification
IWMDMNotification alerta o aplicativo quando dispositivos Plug and Play estão conectados ou desconectados do computador, bem como quando mídia de armazenamento Plug and Play (como cartões flash) é inserida ou removida do dispositivo. Essas notificações podem ajudar o aplicativo a atualizar sua interface do usuário para refletir as alterações.
Para receber essas notificações, seu aplicativo deve se registrar para recebê-las usando o Platform SDK IConnectionPointContainer e interfaces IConnectionPoint. A sua aplicação deve registar-se para receber eventos ao iniciar, e anular o registo ao fechar. Siga estes passos para se registar e receber estas notificações.
- Consulte a interface principal IWMDeviceManager que você recebeu quando autenticou seu aplicativo para IConnectionPointContainer.
- Chame IConnectionPointContainer::FindConnectionPoint para recuperar um ponto de conexão do contentor para interfaces IWMDMNotification.
- Registe-se para receber eventos ligando para IConnectionPoint::Advise. Passe na classe que implementa IWMDMNotificatione recupere um cookie, um identificador exclusivo que identifica o seu ponto de conexão. Isso deve ser armazenado e usado posteriormente para cancelar o registro para notificações de eventos.
O código C++ a seguir demonstra como você pode se registrar para receber notificações de IWMDMNotification.
HRESULT CWMDMController::RegisterForNotifications()
{
HRESULT hr = S_OK;
CComPtr<IConnectionPointContainer> pConxnPointCont;
CComPtr<IConnectionPoint> pIConnPoint;
// Get the IConnectionPointContainer interface from IWMDeviceManager.
if (SUCCEEDED (hr = m_IWMDMDeviceMgr->QueryInterface(IID_IConnectionPointContainer, (void**) & pConxnPointCont)))
{
// Get a connection point from the container.
if (SUCCEEDED (hr = pConxnPointCont->FindConnectionPoint(IID_IWMDMNotification, &pIConnPoint)))
{
// Add ourselves as a callback handler for the connection point.
// If we succeeded, indicate that by storing the connection point ID.
DWORD dwCookie;
if (SUCCEEDED (hr = pIConnPoint->Advise((IUnknown*)((IWMDMNotification*)this), &dwCookie)))
{
m_dwNotificationCookie = dwCookie;
}
}
}
return hr;
}
Quando seu aplicativo fecha, você deve cancelar o registro com IConnectionPoint para indicar que ele não deve mais enviar notificações. Siga estas etapas para cancelar o registro para notificações:
- Consulte a interface principal IWMDeviceManager para IConnectionPointContainer.
- Obtenha um ponto de conexão para interfaces IWMDMNotification.
- Cancele o registro de seu aplicativo para notificações de eventos ligando IConnectionPoint::Unadvise, passando o ID exclusivo recebido quando você se registrou para receber eventos.
O código C++ a seguir mostra como anular o registo para eventos IWMDMNotification quando a sua aplicação é fechada.
HRESULT CWMDMController::UnregisterForNotifications()
{
HRESULT hr = S_FALSE;
// On class initialization, we initialized the handle to -1 as a flag
// to indicate we had not yet registered for notifications. If registration
// never happened, don't bother to unregister.
if (-1 != m_dwNotificationCookie)
{
CComPtr<IConnectionPointContainer> pConxnPointCont;
CComPtr<IConnectionPoint> pIConnPoint;
// Get the connection point container from IWMDeviceManager.
if (SUCCEEDED (hr =
m_IWMDMDeviceMgr->QueryInterface(IID_IConnectionPointContainer,
(void**) & pConxnPointCont)))
{
// Get a connection point from the container.
if (SUCCEEDED (hr = pConxnPointCont->FindConnectionPoint(IID_IWMDMNotification, &pIConnPoint)))
{
// Remove ourselves as a callback from the connection point.
// If successful, reset the ID to a flag value.
if (SUCCEEDED (hr =
pIConnPoint->Unadvise(m_dwNotificationCookie)))
{
m_dwNotificationCookie = -1;
hr = S_OK;
}
}
}
}
return hr;
}
Usando o IWMDMProgress
O Gestor de Dispositivos do Windows Media pode enviar mensagens de estado do aplicativo quando ocorrem ações específicas, como transferência de conteúdo, aquisição segura de relógio e deteção de informações de ficheiro DRM. Seu aplicativo pode usar essas mensagens para monitorar o status do evento ou cancelar um evento. Para usar essa interface, implemente IWMDMProgress, IWMDMProgress2ou IWMDMProgress3e passe-o como um parâmetro para um método que aceitará uma mensagem de progresso. Observe que IWMDMProgress3 é a interface superior porque fornece um GUID de identificação que especifica qual ação está sendo rastreada. Os seguintes métodos de aplicativo aceitam uma interface de progresso (os métodos de provedor de serviços correspondentes devem ser capazes de enviar notificações para uma interface enviada):
IWMDMStorageGlobals::Inicializar
IWMDRMDeviceApp::AcquireDeviceData
Exemplos de passagem de uma interface para um método são dados na documentação para esses métodos. Para obter exemplos de implementação das interfaces de retorno de chamada, consulte a documentação dos métodos de IWMDMProgress, IWMDMProgress2ou IWMDMProgress3.