Compartir a través de


Habilitación de notificaciones

Windows Media Administrador de dispositivos declara cuatro interfaces que una aplicación puede implementar en una clase COM para recibir notificaciones de eventos. Estas interfaces se dividen en dos grupos, como se muestra en la tabla siguiente.

Interfaces Descripción
IWMDMNotification Notifica a la aplicación cuando los dispositivos o los medios de almacenamiento están conectados o desconectados.
IWMDMProgress
IWMDMProgress2
IWMDMProgress3
Un sistema de notificación muy sencillo para alertar a una aplicación sobre el progreso de cualquier evento. La aplicación no es necesaria para realizar ninguna acción en respuesta a estos mensajes.

IWMDMNotification

IWMDMNotification alerta a la aplicación cuando Plug and Play dispositivos están conectados o desconectados del equipo, así como cuando Plug and Play medios de almacenamiento (como tarjetas flash) se insertan o quitan del dispositivo. Estas notificaciones pueden ayudar a la aplicación a actualizar su interfaz de usuario para reflejar los cambios.

Para recibir estas notificaciones, la aplicación debe registrarse para recibirlas mediante las interfaces IConnectionPointContainer e IConnectionPoint del SDK de plataforma. La aplicación debe registrarse para recibir eventos cuando se inicia y anular el registro cuando se cierra. Siga estos pasos para registrarse para recibir estas notificaciones.

  1. Consulte la interfaz principal de IWMDeviceManager que recibió al autenticar la aplicación para IConnectionPointContainer.
  2. Llame a IConnectionPointContainer::FindConnectionPoint para recuperar un punto de conexión de contenedor para las interfaces IWMDMNotification .
  3. Regístrese para recibir eventos llamando a IConnectionPoint::Advise. Pase la clase que implementa IWMDMNotification y recupere una cookie, un identificador único que identifique el punto de conexión. Debe almacenarse y usarse más adelante para anular el registro de las notificaciones de eventos.

El siguiente código de C++ muestra cómo puede registrarse para recibir notificaciones 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;
}

Cuando se cierre la aplicación, debe anular el registro con IConnectionPoint para indicar que ya no debe enviar notificaciones. Siga estos pasos para anular el registro de las notificaciones:

  1. Consulte la interfaz IWMDeviceManager principal para IConnectionPointContainer.
  2. Obtenga un punto de conexión para las interfaces IWMDMNotification .
  3. Anule el registro de la aplicación para las notificaciones de eventos mediante una llamada a IConnectionPoint::Unadvise, pasando el identificador único recibido cuando se registró para recibir eventos.

El siguiente código de C++ muestra cómo anular el registro de los eventos IWMDMNotification cuando se cierra la aplicación.

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;
}

Uso de IWMDMProgress

Windows Media Administrador de dispositivos puede enviar mensajes de estado de la aplicación cuando se producen acciones específicas, como la transferencia de contenido, la adquisición segura del reloj y la detección de información de archivos DRM. La aplicación puede usar estos mensajes para supervisar el estado del evento o cancelar un evento. Para usar esta interfaz, implemente IWMDMProgress, IWMDMProgress2 o IWMDMProgress3 y páselo como parámetro a un método que aceptará un mensaje de progreso. Tenga en cuenta que IWMDMProgress3 es la interfaz superior porque proporciona un GUID de identificación que especifica qué acción se está realizando un seguimiento. Los métodos de aplicación siguientes aceptan una interfaz de progreso (los métodos del proveedor de servicios correspondientes deben poder enviar notificaciones a una interfaz enviada):

IWMDMStorageControl::D elete

IWMDMStorageControl::Insert

IWMDMStorageControl::Move

IWMDMStorageControl::Read

IWMDMStorageControl::Rename

IWMDMStorageControl2::Insert2

IWMDMStorageControl3::Insert3

IWMDMStorageGlobals::Initialize

IWMDRMDeviceApp::AcquireDeviceData

En la documentación de estos métodos se proporcionan ejemplos de pasar una interfaz a un método. Para obtener ejemplos de cómo implementar las interfaces de devolución de llamada, consulte la documentación de los métodos de IWMDMProgress, IWMDMProgress2 o IWMDMProgress3.

Creación de una aplicación de windows Media Administrador de dispositivos