Udostępnij przez


Zdarzenia urządzeń obrazujących statycznie

Zdarzenie zdarzenie urządzenia obrazu nieruchomego jest zdarzeniem na poziomie urządzenia, o którym powinno zostać poinformowane oprogramowanie o wyższym poziomie, jeśli to oprogramowanie zażądało takiego powiadomienia. Minidriver trybu użytkownika jest odpowiedzialny za definiowanie większości zdarzeń urządzeń i dostarczanie powiadomień, gdy zdarzenie wystąpi. Ogólnie rzecz biorąc, zdarzenia wskazują, że oprogramowanie wyższego poziomu będzie wymagane do wykonania jakiejś akcji.

Typowym zdarzeniem urządzenia obrazu jest wykrywanie naciśnięcia przycisku. Na przykład skaner może udostępnić użytkownikowi oddzielne przyciski do inicjowania skanowania tekstu i zdjęć. Po naciśnięciu przycisku oprogramowanie wyższego poziomu będzie potrzebne do wyświetlania lub przechowywania obrazu. Monitor zdarzeń obrazu wykrywa, że zdarzenie wystąpiło (przy użyciu interfejsu IStiDevice COM) i może wywołać aplikację obrazu, która została wcześniej zarejestrowana (przy użyciu interfejsu IStillImage COM).

Nadal zdarzenia urządzenia obrazu są reprezentowane przez identyfikatory GUID. W sti.h firma Microsoft definiuje następujące zdarzenia urządzeń obrazowania:

Identyfikator GUID zdarzenia Przeznaczenie
GUID_DeviceArrivedLaunch Urządzenie do przechwytywania obrazu zostało właśnie podłączone do systemu.
GUID_ScanImage Obraz powinien zostać przeskanowany do komputera.
GUID_ScanFaxImage Obraz powinien zostać przeskanowany do komputera, a następnie faksowany.
GUID_ScanPrintImage Obraz powinien zostać przeskanowany do komputera, a następnie wydrukowany.
GUID_STIUserDefined1 Naciśnięty został przycisk czytelny dla użytkownika.
GUID_STIUserDefined2 Naciśnięty został przycisk czytelny dla użytkownika.
GUID_STIUserDefined3 Naciśnięty został przycisk czytelny dla użytkownika.

Deweloperzy minidriverów trybu użytkownika powinni używać tych wstępnie zdefiniowanych identyfikatorów GUID zdarzeń, jeśli to możliwe. Jeśli te identyfikatory GUID nie są odpowiednie, należy zdefiniować identyfikatory GUID dla zdarzeń specyficznych dla urządzenia.

Aby zdefiniować zdarzenie urządzenia obrazu, należy:

  • Określ identyfikator GUID dla każdego zdarzenia.

  • Dołącz każdy identyfikator GUID do pliku INF sterownika trybu użytkownika.

W pliku INF sterownika każda specyfikacja identyfikatora GUID musi zawierać gwiazdkę (czyli "wszystkie aplikacje") lub listę określonych aplikacji wskazujących, które aplikacje powinny być uruchamiane po wystąpieniu zdarzenia. Monitor zdarzeń obrazu używa tej listy do udostępniania domyślnych przypisań aplikacji do zdarzeń. Użytkownik może modyfikować te przypisania za pomocą Panelu sterowania: Skanery i aparaty fotograficzne.

Powiadomienie o zdarzeniu

Sterownik musi monitorować urządzenie (przy użyciu asynchronicznego we/wy lub sondowania), aby określić, kiedy wystąpi zdarzenie skojarzone z każdym identyfikatorem GUID. W zależności od możliwości urządzenia sterownik może powiadamiać klientów o wystąpieniu zdarzeń urządzenia asynchronicznie lub odpowiadając na żądanie sondowania urządzenia. Wszystkie sterowniki, które mogą dostarczać powiadomienia o zdarzeniach urządzenia (według jednej z metod), muszą ustawić flagę STI_GENCAP_NOTIFICATIONS w strukturze STI_DEV_CAPS urządzenia. Sterowniki, które obsługują sondowanie, a nie powiadomienia asynchroniczne, muszą również ustawić flagę STI_GENCAP_POLLING_NEEDED w tej samej strukturze. (Te funkcje muszą być również wskazane przy użyciu słowa kluczowego Capabilities w plikach INF dla urządzeń obrazowania nieruchomego.)

Jeśli sterownik obsługuje asynchroniczne powiadomienie o zdarzeniach, monitor zdarzeń wywołuje metodę IStiUSD::SetNotificationHandle w celu żądania powiadomień i dostarczenia uchwytu zdarzeń. Gdy wystąpi zdarzenie urządzenia, sterownik musi powiadomić monitor zdarzeń, wywołując metodę SetEvent (zobacz dokumentację zestawu MICROSOFT Windows SDK), używając dojścia zdarzeń jako argumentu. Następnie klient może wywołać IStiUSD::GetNotificationData, aby uzyskać GUID zdarzenia.

Jeśli sondowanie jest wymagane, monitor zdarzeń wykonuje wywołanie IStiUSD::GetStatus, aby sondować sterownik, który musi z kolei sondować urządzenie i zwracać wyniki w strukturze STI_DEVICE_STATUS.