静态图像设备事件
静态图像设备事件是设备级事件,如果高级软件已请求此类通知,则应通知上层软件。 用户模式微型驱动程序负责定义大多数设备事件并在事件发生时传递通知。 一般情况下,事件指示需要高级软件来执行某些操作。
典型的静态图像设备事件是检测按下的按钮。 例如,扫描仪可能会为用户提供单独的按钮来启动扫描文本和照片。 按下按钮时,需要高级软件才能显示或存储图像。 静态图像事件监视器使用 IStiDevice COM 接口) 检测到 (发生了该事件,并且可以调用以前使用 IStillImage COM 接口 (注册的静态图像应用程序) 。
静态图像设备事件由 GUID 表示。 在 sti.h 中,Microsoft 定义了以下静态图像设备事件:
事件 GUID | 目的 |
---|---|
GUID_DeviceArrivedLaunch | 静止图像设备刚刚连接到系统。 |
GUID_ScanImage | 应将图像扫描到计算机中。 |
GUID_ScanFaxImage | 应将图像扫描到计算机中,然后传真。 |
GUID_ScanPrintImage | 图像应扫描到计算机中,然后打印。 |
GUID_STIUserDefined1 | 已按下用户可定义的按钮。 |
GUID_STIUserDefined2 | 已按下用户可定义的按钮。 |
GUID_STIUserDefined3 | 已按下用户可定义的按钮。 |
用户模式微型驱动程序的开发人员应尽可能使用这些预定义的事件 GUID。 如果这些 GUID 不合适,则必须定义特定于设备的事件的 GUID。
若要定义静态图像设备事件,必须:
为每个事件指定 GUID。
将每个 GUID 包含在用户模式驱动程序的 INF 文件中。
在驱动程序的 INF 文件中,每个 GUID 规范都必须包含一个星号 (表示“所有应用程序”) 或特定应用程序的列表,指示在事件发生时应启动哪些应用程序。 静态图像事件监视器使用此列表为事件提供应用程序的默认分配。 用户可以使用扫描仪和相机控制面板修改这些分配。
事件通知
驱动程序必须使用异步 I/O 或轮询) 监视设备 (,以确定何时发生与每个 GUID 关联的事件。 根据设备功能,驱动程序可以通过异步方式或通过响应轮询设备的请求来通知客户端发生设备事件。 所有能够通过任一方法) (的设备事件通知的驱动程序都必须在设备的STI_DEV_CAPS结构中设置 STI_GENCAP_NOTIFICATIONS 标志。 支持轮询而不是异步通知的驱动程序还必须在同一结构中设置STI_GENCAP_POLLING_NEEDED标志。 (还必须使用静态图像设备的 INF 文件中的功能关键字 (keyword) 来指示这些功能。)
如果驱动程序支持事件的异步通知,事件监视器会调用 IStiUSD::SetNotificationHandle 来请求通知并提供事件句柄。 发生设备事件时,驱动程序必须通过调用 SetEvent 来通知事件监视器, (使用事件句柄作为参数查看Microsoft Windows SDK文档) 。 然后,客户端可以调用 IStiUSD::GetNotificationData 来获取事件的 GUID。
如果需要轮询,事件监视器会调用 IStiUSD::GetStatus 来轮询驱动程序,后者必须轮询设备,并在 STI_DEVICE_STATUS 结构中返回结果。