Registrieren von WIA-Ereignissen
Anwendungen können sich registrieren, um über Windows WIA-Hardwaregeräteereignisse (Image Acquisition) benachrichtigt zu werden, indem sie eine der folgenden IWiaDevMgr- oder IWiaDevMgr2-Schnittstellenmethoden aufrufen:
- IWiaDevMgr::RegisterEventCallbackCLSID oder IWiaDevMgr2::RegisterEventCallbackCLSID
- IWiaDevMgr::RegisterEventCallbackInterface oder IWiaDevMgr2::RegisterEventCallbackInterface
- IWiaDevMgr::RegisterEventCallbackProgram oder IWiaDevMgr2::RegisterEventCallbackProgram
Alle diese Methoden verwenden Parameter, die das Ereignis und das Hardwaregerät angeben, für das die Anwendung benachrichtigt werden soll. Anwendungen registrieren sich, um ein Ereignis für alle WIA-Geräte zu empfangen, indem sie einen NULL-Wert für den Parameter übergeben, der das Hardwaregerät angibt.
Die RegisterEventCallbackInterface-Methode registriert eine Anwendung, um ein WIA-Hardwaregeräteereignis zu empfangen, wenn die Anwendung zum Zeitpunkt des Auftretens des Ereignisses ausgeführt wird. Wenn das Ereignis auftritt, für das die Anwendung registriert ist, ruft WIA die IWiaEventCallback::ImageEventCallback-Methode des von der Anwendung bereitgestellten Objekts auf, um die Ereignisinformationen zu übertragen.
Die RegisterEventCallbackCLSID-Methode registriert eine Anwendung, die eine registrierte com-Komponente (Component Object Model) ist, um ein WIA-Hardwaregeräteereignis zu empfangen, auch wenn die Anwendung nicht ausgeführt wird. Zusätzlich zu den zuvor erwähnten Parametern verwendet diese Methode einen Parameter, pClsID, der die Klassen-ID der Anwendung angibt. Wenn das angegebene Ereignis auftritt, verwendet das WIA-System die CoCreateInstance-Funktion und die von pClsID angegebene Klassen-ID, um eine neue Instanz der Anwendung zu erstellen, und ruft die IWiaEventCallback::ImageEventCallback-Methode dieser Anwendung auf, um die Ereignisinformationen zu übertragen.
Die RegisterEventCallbackProgram-Methode registriert eine Anwendung, um ein WIA-Hardwaregeräteereignis zu empfangen, auch wenn die Anwendung beim Auftreten des Ereignisses nicht ausgeführt wird. Die Anwendung muss keine registrierte COM-Komponente sein. WIA startet die Anwendung mit einer Befehlszeilen-Anweisung. RegisterEventCallbackProgram verwendet den Parameter bstrCommandline, der den vollständigen Pfad und Dateinamen der ausführbaren Anwendung angibt. RegisterEventCallbackProgram ist aus Gründen der Abwärtskompatibilität mit Anwendungen vorhanden, die nicht für WIA geschrieben wurden und vermieden werden sollten. Verwenden Sie stattdessen RegisterEventCallbackInterface oder RegisterEventCallbackCLSID.
Um zu bestimmen, welche Handler für Ereignisse auf einem bestimmten WIA-Gerät registriert sind, ruft eine Anwendung die IWiaItem::EnumRegisterEventInfo- oder IWiaItem2::EnumRegisterEventInfo-Methode eines Stammelements auf. Diese Methode erstellt ein Enumerationsobjekt für die Registrierungsinformationen. Die Anwendung kann dann die IEnumWIA _ DEV _ CAPS-Schnittstelle dieses Objekts verwenden, um Informationen zu den Handlern aufzulisten, die zum Empfangen von Ereignissen für dieses Gerät registriert sind.
Wenn ein Ereignis auftritt, für das eine ausgeführte Anwendung über RegisterEventCallbackInterface und entweder RegisterEventCallbackCLSID oder RegisterEventCallbackProgram registriert wird, benachrichtigt WIA die ausgeführte Anwendung und versucht nicht, eine neue Instanz der Anwendung zu starten, da die Ereignisregistrierung über RegisterEventCallbackInterface Vorrang vor RegisterEventCallbackCLSID und RegisterEventCallbackProgram hat.
Hinweis
In einer Multithreadanwendung gibt es keine Garantie dafür, dass der Thread, für den der Ereignisbenachrichtigungsrückruf zurückgegeben wird, derselbe Thread ist, der den Rückruf registriert hat.