다음을 통해 공유


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

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

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

미니드라이버가 트리가 업데이트되었음을 나타내는 이벤트를 보낼 때 모든 수신 대기 애플리케이션은 호출자뿐만 아니라 변경에 대한 알림을 수신합니다. 예를 들어 사용자가 카메라의 Explorer 보기를 열고 Microsoft 그림판 사용하여 새 그림을 얻는 경우 Explorer 창에는 이러한 이벤트를 수신 대기하기 때문에 새 그림이 도착할 때 새 그림도 표시됩니다.

다음 예제에서는 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;
}