将 UI 添加到 WIA 微型驱动程序

可以通过将单独的 DLL 与 WIA 微型驱动程序一起安装,为 WIA 微型驱动程序添加扩展 UI 或替换 UI 组件。 与 TWAIN 驱动程序不同,WIA 驱动程序的 UI 组件独立于实际的 WIA 微型驱动程序。 UI 组件在应用程序的进程中运行,WIA 微型驱动程序在 WIA 服务的进程中运行。 因此,WIA 驱动程序可能不会直接显示 UI;只有驱动程序的 WIA UI 扩展模块可能会显示 UI。

WIA 允许向系统提供的对话框添加属性页、提供自定义图标图像或完全替换系统提供的对话框。 属性页扩展机制基于Microsoft Windows SDK文档) 中所述的 IShellPropSheetExt COM 接口的 shell 定义 (。 此机制在设备 UI>\shellex\PropertySheetHandlers) 的属性表处理程序 (HKCR\Clsid<\Clsid 下注册。

所有设备对话框扩展(属性页除外)都需要实现 IWiaUIExtension 接口

如果实现 IWiaUIExtension 接口,但不希望替换系统 UI,则必须为 IWiaUIExtension::D eviceDialog 方法返回E_NOTIMPL。 任何其他返回值都禁止显示设备的设备对话框。

设备对话框必须作为模式对话框在进程内 COM 服务器中实现,将父级的 pDeviceDialogData ->hwndParent 传递到 Windows SDK 文档) 中所述的 DialogBoxParam 函数 (。 设备对话框必须返回S_OK才能成功,S_FALSE如果用户取消对话框,则返回 COM 错误 HRESULT 表示其他错误。

DEVICEDIALOGDATA 结构包含实现自定义设备对话框所需的所有数据。

若要为设备提供自定义图标,请实现 IWiaUIExtension::GetDeviceIcon 方法。 调用方使用 Windows SDK 文档) 中所述的 DestroyIcon (销毁图标。

注意 WIA 的脚本支持非常有限。 因此,虽然可以替换 UI,但不能仅仅在脚本中取消它。

本部分的其余部分包括:

创建“Hello World”WIA 微型驱动程序 UI 扩展,这是有关如何实现自己的自定义 UI 的完整示例。