将项树更改通知给应用程序

WIA 设备的微型驱动程序必须能够通知与 WIA 设备关联的应用程序对设备项树的任何更改。 例如,如果应用程序显示显示相机上图片缩略图的用户界面,WIA 微型驱动程序应能够通知应用程序的用户界面不显示用户已删除的图片的缩略图。

IWiaMiniDrv::d rvDeviceCommand 方法的以下示例实现演示了 WIA 微型驱动程序如何响应 WIA 服务发送给它的命令,并将命令传递给设备。 WIA 微型驱动程序向设备发出命令后,微型驱动程序会通知应用程序设备项树已更改。 在此实现中, 方法确定 WIA 服务已发出“拍照”命令 (WIA_CMD_TAKE_PICTURE) 。 方法调用根项上的 TakePicture 方法, (设备) 项,并通知任何连接的应用程序项树现在包含新图片。 (Microsoft Windows SDK 文档中介绍了 WIA_CMD_TAKE_PICTURE 和 TakePicture。) 微型驱动程序通过调用 wiasQueueEvent 函数执行此操作。

请注意,当微型驱动程序发送指示树已更新的事件时, 所有 侦听应用程序都会通知更改,而不仅仅是调用方。 例如,如果用户打开了相机的“资源管理器”视图,并使用Microsoft 画图获取新图片,则“资源管理器”窗口也会在到达时显示新图片,因为它侦听此类事件。

以下示例演示 IWiaMiniDrv::d rvDeviceCommand 方法的 实现。

HRESULT _stdcall CWIADevice::drvDeviceCommand(
  BYTE        *pWiasContext,
  LONG        lFlags,
  const GUID  *plCommand,
  IWiaDrvItem **ppWiaDrvItem,
  LONG        *plDevErrVal)
{
  //
  // If the caller did not pass in the correct parameters, 
  // then fail the call and return E_INVALIDARG.
  //

  if ((!pWiasContext)||(!plDevErrVal)||(!plCommand)) {
    return E_INVALIDARG;
  }

  *plDevErrVal = 0;
  HRESULT hr = E_NOTIMPL;

  //
  //  Check which command was issued
  //

  if (*plCommand == WIA_CMD_TAKE_PICTURE) {

    //
    // process command here
    //

      hr = HARDWARE_SNAP_PHOTO();
  }
  return hr;
}