По-прежнему изображения событий устройства
Событие устройства с неподвижным изображением — это событие на уровне устройства, о чем программное обеспечение верхнего уровня должно получать уведомления, если это программное обеспечение запросило такое уведомление. Мини-диск пользовательского режима отвечает за определение большинства событий устройства и доставку уведомлений при возникновении события. Как правило, события указывают на то, что для выполнения определенных действий потребуется программное обеспечение верхнего уровня.
Типичным событием устройства с изображением является обнаружение нажатия кнопки. Например, сканер может предоставить пользователю отдельные кнопки для запуска сканирования текста и фотографий. При нажатии кнопки для отображения или сохранения изображения потребуется программное обеспечение верхнего уровня. Монитор событий неподвижного изображения обнаруживает, что событие произошло (с помощью COM-интерфейса IStiDevice), и может вызывать приложение неподвижного образа, которое было зарегистрировано ранее (с помощью COM-интерфейса IStillImage).
Тем не менее события устройства изображения представлены идентификаторами GUID. В sti.h корпорация Майкрософт определяет следующие события устройства с неподвижным изображением:
GUID события | Назначение |
---|---|
GUID_DeviceArrivedLaunch | Устройство с неподвижным изображением только что подключено к системе. |
GUID_ScanImage | Изображение должно быть отсканировано на компьютере. |
GUID_ScanFaxImage | Изображение должно быть отсканировано на компьютере, а затем отправить по факсу. |
GUID_ScanPrintImage | Изображение должно быть отсканировано на компьютере, а затем напечатано. |
GUID_STIUserDefined1 | Нажата определяемая пользователем кнопка. |
GUID_STIUserDefined2 | Нажата определяемая пользователем кнопка. |
GUID_STIUserDefined3 | Нажата определяемая пользователем кнопка. |
Разработчики мини-драйверов пользовательского режима должны по возможности использовать эти предопределенные GUID событий. Если эти идентификаторы GUID не подходят, необходимо определить идентификаторы GUID для событий, относящихся к устройству.
Чтобы определить событие устройства с неподвижным изображением, необходимо:
Укажите GUID для каждого события.
Включите каждый GUID в INF-файл драйвера пользовательского режима.
В INF-файле драйвера каждая спецификация GUID должна включать звездочку (означает "все приложения") или список конкретных приложений, указывающих, какие приложения следует запускать при возникновении события. Монитор событий неподвижного изображения использует этот список для предоставления назначений приложений событиям по умолчанию. Пользователь может изменять эти назначения с помощью панель управления сканеров и камер.
Уведомление о событии
Драйвер должен отслеживать устройство (с помощью асинхронного ввода-вывода или опроса), чтобы определить, когда происходит событие, связанное с каждым GUID. В зависимости от возможностей устройства драйвер может уведомлять клиентов о возникновении событий устройства либо асинхронно, либо отвечая на запрос на опрос устройства. Все драйверы, способные доставлять уведомления о событиях устройства (с помощью любого метода), должны установить флаг STI_GENCAP_NOTIFICATIONS в структуре STI_DEV_CAPS устройства. Драйверы, поддерживающие опрос, а не асинхронные уведомления, также должны устанавливать флаг STI_GENCAP_POLLING_NEEDED в той же структуре. (Эти возможности также необходимо указать с помощью ключевое слово Возможностей в INF-файлах для устройств с неподвижным изображением.)
Если драйвер поддерживает асинхронное уведомление о событиях, монитор событий вызывает IStiUSD::SetNotificationHandle для запроса уведомлений и предоставления дескриптора события. При возникновении события устройства драйвер должен уведомить монитор событий, вызвав SetEvent (см. документацию по Microsoft Windows SDK), используя дескриптор события в качестве аргумента. Затем клиент может вызвать IStiUSD::GetNotificationData , чтобы получить GUID события.
Если требуется опрос, монитор событий вызывает IStiUSD::GetStatus для опроса драйвера, который, в свою очередь, должен опрашивать устройство и возвращать результаты в STI_DEVICE_STATUS структуре.