静止图像设备事件

静止图像设备事件是一个设备级事件,如果该软件已请求此类通知,应通知高级软件。 用户模式微型驱动程序负责定义大多数设备事件并在事件发生时传递通知。 通常,事件表明将需要上层软件来执行某些操作。

典型的静态图像设备事件是检测到按钮被按下。 例如,扫描程序可能为用户提供单独的按钮来启动扫描文本和照片。 按下按钮时,需要高级软件才能显示或存储图像。 静止图像事件监视器检测到该事件已发生(使用 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。

  • 在用户模式驱动程序的 INF 文件中包括每个 GUID。

在驱动程序的 INF 文件中,每个 GUID 规范都必须包含星号(即“所有应用程序”)或特定应用程序的列表,指示应在事件发生时启动哪些应用程序。 静止图像事件监视器使用此列表向事件提供应用程序的默认分配。 用户可以使用扫描仪和相机控制面板修改这些分配。

事件通知

驱动程序必须监视设备(使用异步 I/O 或轮询),以确定何时发生与每个 GUID 关联的事件。 根据设备的功能,驱动程序可以通过两种方式来通知客户端设备事件的发生:异步方式,或者通过响应请求以轮询设备。 能够通过任一方法传送设备事件的通知的所有驱动程序都必须在设备的STI_DEV_CAPS结构中设置 STI_GENCAP_NOTIFICATIONS 标志。 支持轮询而不是异步通知的驱动程序还必须在同一结构中设置STI_GENCAP_POLLING_NEEDED标志。 (还必须在 INF 文件中对静止图像设备使用 Capabilities 关键字来指示这些功能。

如果驱动程序支持事件的异步通知,事件监视器将调用 IStiUSD::SetNotificationHandle 来请求通知并提供事件句柄。 发生设备事件时,驱动程序必须通过调用 SetEvent (请参阅 Microsoft Windows SDK 文档)来通知事件监视器,并使用事件句柄作为参数。 然后,客户端可以调用 IStiUSD::GetNotificationData 来获取事件的 GUID。

如果需要轮询,事件监视器会调用 IStiUSD::GetStatus 来轮询驱动程序,该驱动程序必须轮询设备,并在 STI_DEVICE_STATUS 结构中返回结果。