Partager via


Événements liés aux dispositifs d'images fixes

Un événement de dispositif d'image fixe est une occurrence au niveau de l'appareil dont le logiciel de niveau supérieur doit être averti, si ce logiciel a demandé à être notifié. Le minidriver en mode utilisateur est responsable de la définition de la plupart des événements d’appareil et de la remise de notifications lorsqu’un événement se produit. En général, les événements indiquent que les logiciels de niveau supérieur vont être nécessaires pour effectuer une action.

Un événement classique d’un appareil image fixe est la détection d’un bouton-poussoir enfoncé. Par exemple, un scanneur peut fournir à un utilisateur des boutons distincts pour lancer l’analyse du texte et des photographies. Lorsqu’un bouton est appuyé, un logiciel de niveau supérieur est nécessaire pour afficher ou stocker l’image. Le moniteur d’événements still image détecte que l’événement s’est produit (à l’aide de l’interface COM IStiDevice) et peut appeler une application still image qui a été précédemment inscrite (à l’aide de l’interface COM IStillImage).

Les événements de l'appareil d'image fixe sont représentés par des GUID. Dans sti.h, Microsoft définit les événements pour appareils d'image fixe suivants :

GUID d’événement Objectif
GUID_DeviceArrivedLaunch Un appareil image fixe vient d’être connecté au système.
GUID_ScanImage Une image doit être analysée sur l’ordinateur.
GUID_ScanFaxImage Une image doit être analysée sur l’ordinateur, puis télécopie.
GUID_ScanPrintImage Une image doit être analysée sur l’ordinateur, puis imprimée.
GUID_STIUserDefined1 Un bouton défini par l’utilisateur a été appuyé.
GUID_STIUserDefined2 Un bouton défini par l’utilisateur a été appuyé.
GUID_STIUserDefined3 Un bouton défini par l’utilisateur a été appuyé.

Les développeurs de minidrivers en mode utilisateur doivent utiliser ces GUID d’événements prédéfinis dans la mesure du possible. Si ces GUID ne sont pas appropriés, les GUID pour les événements spécifiques à l’appareil doivent être définis.

Pour définir un événement d'appareil d'image fixe, vous devez :

  • Spécifiez un GUID pour chaque événement.

  • Incluez chaque GUID dans le fichier INF du pilote en mode utilisateur.

Dans le fichier INF du pilote, chaque spécification GUID doit inclure un astérisque (ce qui signifie « toutes les applications ») ou une liste d’applications spécifiques, indiquant quelles applications doivent être démarrées lorsque l’événement se produit. Le moniteur d’événements d’image fixe utilise cette liste pour associer par défaut des applications à des événements. L’utilisateur peut modifier ces affectations avec le Panneau de configuration scanneurs et caméras.

Notification d'événement

Le pilote doit surveiller l’appareil (à l’aide d’E/S asynchrones ou d’interrogations) pour déterminer quand l’événement associé à chaque GUID se produit. Selon les équipements de l'appareil, le pilote peut notifier les clients de l'occurrence d'événements du dispositif soit de façon asynchrone, soit en répondant à une demande d'interrogation de l'appareil. Tous les pilotes capables de fournir la notification des événements d’appareil (par l’une ou l’autre méthode) doivent définir l’indicateur de STI_GENCAP_NOTIFICATIONS dans la structure STI_DEV_CAPS de l’appareil. Les pilotes qui prennent en charge l’interrogation, et non la notification asynchrone, doivent également définir l’indicateur STI_GENCAP_POLLING_NEEDED dans la même structure. (Ces fonctionnalités doivent également être indiquées à l'aide du mot-clé Capabilities dans les fichiers INF pour les appareils d'image fixe.)

Si un pilote prend en charge la notification asynchrone des événements, le moniteur d’événements appelle IStiUSD ::SetNotificationHandle pour demander des notifications et fournir un handle d’événement. Lorsqu’un événement d’appareil se produit, le pilote doit notifier le moniteur d’événements en appelant SetEvent (consultez la documentation du Kit de développement logiciel (SDK) Microsoft Windows), à l’aide du handle d’événement en tant qu’argument. Le client peut ensuite appeler IStiUSD ::GetNotificationData pour obtenir le GUID de l’événement.

Si l’interrogation est requise, le moniteur d’événements appelle IStiUSD ::GetStatus pour interroger le pilote, ce qui doit à son tour interroger l’appareil et retourner des résultats dans une structure STI_DEVICE_STATUS .