Activation des notifications
Windows Media Gestionnaire de périphériques déclare quatre interfaces qu’une application peut implémenter dans une classe COM pour recevoir des notifications d’événements. Ces interfaces se répartissent en deux groupes, comme indiqué dans le tableau suivant.
Interfaces | Description |
---|---|
IWMDMNotification | Avertit l’application lorsque des appareils ou des supports de stockage sont connectés ou déconnectés. |
IWMDMProgress IWMDMProgress2 IWMDMProgress3 |
Un système de notification très simple pour alerter une application de la progression d’un événement. L’application n’est pas tenue d’effectuer des actions en réponse à ces messages. |
IWMDMNotification
IWMDMNotification alerte l’application quand Plug-and-Play appareils sont connectés ou déconnectés de l’ordinateur, ainsi que lorsque Plug-and-Play supports de stockage (tels que les cartes flash) sont insérés ou supprimés de l’appareil. Ces notifications peuvent aider l’application à mettre à jour son interface utilisateur pour refléter les modifications.
Pour recevoir ces notifications, votre application doit s’inscrire pour les recevoir à l’aide des interfaces IConnectionPointContainer et IConnectionPoint du SDK de plateforme. Votre application doit s’inscrire pour recevoir des événements lorsqu’elle démarre et annuler l’inscription lorsqu’elle se ferme. Suivez ces étapes pour vous inscrire afin de recevoir ces notifications.
- Interrogez l’interface IWMDeviceManager main que vous avez reçue lorsque vous avez authentifié votre application pour IConnectionPointContainer.
- Appelez IConnectionPointContainer::FindConnectionPoint pour récupérer un point de connexion de conteneur pour les interfaces IWMDMNotification .
- Inscrivez-vous pour recevoir des événements en appelant IConnectionPoint::Advise. Transmettez la classe qui implémente IWMDMNotification et récupérez un cookie, un ID unique qui identifie votre point de connexion. Celui-ci doit être stocké et utilisé ultérieurement pour annuler l’inscription aux notifications d’événements.
Le code C++ suivant montre comment vous pouvez vous inscrire pour recevoir des notifications d’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;
}
Lorsque votre application se ferme, vous devez vous désinscrire auprès d’IConnectionPoint pour indiquer qu’elle ne doit plus vous envoyer de notifications. Pour annuler l’inscription aux notifications, procédez comme suit :
- Interrogez l’interface main IWMDeviceManager pour IConnectionPointContainer.
- Obtenez un point de connexion pour les interfaces IWMDMNotification .
- Annulez l’inscription de votre application pour les notifications d’événements en appelant IConnectionPoint::Unadvise, en transmettant l’ID unique reçu lorsque vous vous êtes inscrit pour recevoir des événements.
Le code C++ suivant montre comment annuler l’inscription pour les événements IWMDMNotification lorsque votre application se ferme.
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;
}
Utilisation d’IWMDMProgress
Les Gestionnaire de périphériques Windows Media peuvent envoyer des messages status votre application lorsque des actions spécifiques, telles que le transfert de contenu, l’acquisition d’horloge sécurisée et la rencontre d’informations sur les fichiers DRM, se produisent. Votre application peut utiliser ces messages pour surveiller la status de l’événement ou annuler un événement. Pour utiliser cette interface, implémentez IWMDMProgress, IWMDMProgress2 ou IWMDMProgress3, puis passez-le en tant que paramètre à une méthode qui acceptera un message de progression. Notez que IWMDMProgress3 est l’interface supérieure, car il fournit un GUID d’identification qui spécifie l’action suivie. Les méthodes d’application suivantes acceptent une interface de progression (les méthodes de fournisseur de services correspondantes doivent être en mesure d’envoyer des notifications à une interface envoyée) :
IWMDMStorageGlobals::Initialize
IWMDRMDeviceApp::AcquireDeviceData
La documentation de ces méthodes donne des exemples de passage d’une interface dans une méthode. Pour obtenir des exemples d’implémentation des interfaces de rappel, consultez la documentation relative aux méthodes de IWMDMProgress, IWMDMProgress2 ou IWMDMProgress3.