애플리케이션에 항목 트리 변경 내용 알리기

WIA 디바이스용 미니 드라이버는 WIA 디바이스와 연결된 애플리케이션에 디바이스의 항목 트리 변경 내용을 알릴 수 있어야 합니다. 예를 들어 애플리케이션이 카메라에서 그림의 축소판 그림을 보여 주는 사용자 인터페이스를 표시하는 경우 WIA 미니 드라이버는 사용자가 이미 삭제한 그림의 축소판 그림을 표시하지 않도록 애플리케이션의 사용자 인터페이스에 알릴 수 있어야 합니다.

IWiaMiniDrv::d rvDeviceCommand 메서드의 다음 샘플 구현은 WIA 미니드라이버가 WIA 서비스에서 전송한 명령에 응답하고 명령을 디바이스에 전달하는 방법을 보여줍니다. WIA 미니 드라이버가 디바이스에 명령을 실행한 후 미니 드라이버는 디바이스 항목 트리가 변경되었음을 애플리케이션에 알립니다. 이 구현에서 메서드는 WIA 서비스가 "사진 촬영" 명령(WIA_CMD_TAKE_PICTURE)을 실행했음을 확인합니다. 이 메서드는 루트 항목(디바이스의 항목)에서 TakePicture 메서드를 호출하고, 이제 항목 트리에 새 그림이 포함되어 있음을 연결된 모든 애플리케이션에 알립니다. (WIA_CMD_TAKE_PICTURE 및 TakePicture는 모두 Microsoft Windows SDK 설명서에 설명되어 있습니다.) 미니 드라이버는 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;
}