// wiascr.idl : IDL source for wiascr.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (wiascr.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";

#define WIA_INTENT_IMAGE_TYPE_COLOR     0x00000001
#define WIA_INTENT_IMAGE_TYPE_GRAYSCALE 0x00000002
#define WIA_INTENT_IMAGE_TYPE_TEXT      0x00000004
#define WIA_INTENT_MINIMIZE_SIZE        0x00010000
#define WIA_INTENT_MAXIMIZE_QUALITY     0x00020000
#define WIA_INTENT_BEST_PREVIEW         0x00040000

#define WIA_DEVICE_DIALOG_SINGLE_IMAGE       0x00000002  // Only allow one image to be selected
#define WIA_DEVICE_DIALOG_USE_COMMON_UI      0x00000004  // Give preference to the system-provided UI, if available

#define WIA_RESERVED_FOR_SMALL_NEW_PROPS        256
#define WIA_RESERVED_FOR_NEW_PROPS              1024
#define WIA_RESERVED_FOR_ALL_MS_PROPS           (1024*32)

#define WIA_DIP_FIRST                           2
#define WIA_DIP_DEV_ID                          2
#define WIA_DIP_VEND_DESC                       3
#define WIA_DIP_DEV_DESC                        4
#define WIA_DIP_DEV_TYPE                        5
#define WIA_DIP_PORT_NAME                       6
#define WIA_DIP_DEV_NAME                        7
#define WIA_DIP_SERVER_NAME                     8
#define WIA_DIP_REMOTE_DEV_ID                   9
#define WIA_DIP_UI_CLSID                        10
#define WIA_DIP_HW_CONFIG                       11
#define WIA_DIP_BAUDRATE                        12
#define WIA_DIP_STI_GEN_CAPABILITIES            13
#define WIA_DIP_WIA_VERSION                     14
#define WIA_DIP_DRIVER_VERSION                  15
#define WIA_DIP_LAST                            15

#define WIA_NUM_DIP          1 + WIA_DIP_LAST - WIA_DIP_FIRST

//
// Common device properties
//

#define WIA_DPA_FIRST                           WIA_DIP_FIRST + WIA_RESERVED_FOR_NEW_PROPS
#define WIA_DPA_FIRMWARE_VERSION                WIA_DPA_FIRST + 0
#define WIA_DPA_CONNECT_STATUS                  WIA_DPA_FIRST + 1
#define WIA_DPA_DEVICE_TIME                     WIA_DPA_FIRST + 2
#define WIA_DPA_LAST                            WIA_DPA_FIRST + 3

//
// Camera device properties
//

#define WIA_DPC_FIRST                           WIA_DPA_FIRST + WIA_RESERVED_FOR_NEW_PROPS
#define WIA_DPC_PICTURES_TAKEN                  WIA_DPC_FIRST + 0
#define WIA_DPC_PICTURES_REMAINING              WIA_DPC_FIRST + 1
#define WIA_DPC_EXPOSURE_MODE                   WIA_DPC_FIRST + 2
#define WIA_DPC_EXPOSURE_COMP                   WIA_DPC_FIRST + 3
#define WIA_DPC_EXPOSURE_TIME                   WIA_DPC_FIRST + 4
#define WIA_DPC_FNUMBER                         WIA_DPC_FIRST + 5
#define WIA_DPC_FLASH_MODE                      WIA_DPC_FIRST + 6
#define WIA_DPC_FOCUS_MODE                      WIA_DPC_FIRST + 7
#define WIA_DPC_FOCUS_MANUAL_DIST               WIA_DPC_FIRST + 8
#define WIA_DPC_ZOOM_POSITION                   WIA_DPC_FIRST + 9
#define WIA_DPC_PAN_POSITION                    WIA_DPC_FIRST + 10
#define WIA_DPC_TILT_POSITION                   WIA_DPC_FIRST + 11
#define WIA_DPC_TIMER_MODE                      WIA_DPC_FIRST + 12
#define WIA_DPC_TIMER_VALUE                     WIA_DPC_FIRST + 13
#define WIA_DPC_POWER_MODE                      WIA_DPC_FIRST + 14
#define WIA_DPC_BATTERY_STATUS                  WIA_DPC_FIRST + 15
#define WIA_DPC_THUMB_WIDTH                     WIA_DPC_FIRST + 16
#define WIA_DPC_THUMB_HEIGHT                    WIA_DPC_FIRST + 17
#define WIA_DPC_PICT_WIDTH                      WIA_DPC_FIRST + 18
#define WIA_DPC_PICT_HEIGHT                     WIA_DPC_FIRST + 19
#define WIA_DPC_DIMENSION                       WIA_DPC_FIRST + 20
#define WIA_DPC_COMPRESSION_SETTING             WIA_DPC_FIRST + 21
#define WIA_DPC_FOCUS_METERING                  WIA_DPC_FIRST + 22
#define WIA_DPC_TIMELAPSE_INTERVAL              WIA_DPC_FIRST + 23
#define WIA_DPC_TIMELAPSE_NUMBER                WIA_DPC_FIRST + 24
#define WIA_DPC_BURST_INTERVAL                  WIA_DPC_FIRST + 25
#define WIA_DPC_BURST_NUMBER                    WIA_DPC_FIRST + 26
#define WIA_DPC_EFFECT_MODE                     WIA_DPC_FIRST + 27
#define WIA_DPC_DIGITAL_ZOOM                    WIA_DPC_FIRST + 28
#define WIA_DPC_SHARPNESS                       WIA_DPC_FIRST + 29
#define WIA_DPC_CONTRAST                        WIA_DPC_FIRST + 30
#define WIA_DPC_CAPTURE_MODE                    WIA_DPC_FIRST + 31
#define WIA_DPC_CAPTURE_DELAY                   WIA_DPC_FIRST + 32
#define WIA_DPC_EXPOSURE_INDEX                  WIA_DPC_FIRST + 33
#define WIA_DPC_EXPOSURE_METERING_MODE          WIA_DPC_FIRST + 34
#define WIA_DPC_FOCUS_METERING_MODE             WIA_DPC_FIRST + 35
#define WIA_DPC_FOCUS_DISTANCE                  WIA_DPC_FIRST + 36
#define WIA_DPC_FOCAL_LENGTH                    WIA_DPC_FIRST + 37
#define WIA_DPC_RGB_GAIN                        WIA_DPC_FIRST + 38
#define WIA_DPC_WHITE_BALANCE                   WIA_DPC_FIRST + 39
#define WIA_DPC_UPLOAD_URL                      WIA_DPC_FIRST + 40
#define WIA_DPC_ARTIST                          WIA_DPC_FIRST + 41
#define WIA_DPC_COPYRIGHT_INFO                  WIA_DPC_FIRST + 42
#define WIA_DPC_LAST                            WIA_DPC_FIRST + 42

//
// Scanner device properties
//

#define WIA_DPS_FIRST                                  WIA_DPC_FIRST + WIA_RESERVED_FOR_NEW_PROPS
#define WIA_DPS_HORIZONTAL_BED_SIZE                    WIA_DPS_FIRST + 0                         
#define WIA_DPS_VERTICAL_BED_SIZE                      WIA_DPS_FIRST + 1                         
#define WIA_DPS_HORIZONTAL_SHEET_FEED_SIZE             WIA_DPS_FIRST + 2                         
#define WIA_DPS_VERTICAL_SHEET_FEED_SIZE               WIA_DPS_FIRST + 3                         
#define WIA_DPS_SHEET_FEEDER_REGISTRATION              WIA_DPS_FIRST + 4                         
#define WIA_DPS_HORIZONTAL_BED_REGISTRATION            WIA_DPS_FIRST + 5                         
#define WIA_DPS_VERTICAL_BED_REGISTRATION              WIA_DPS_FIRST + 6                         
#define WIA_DPS_PLATEN_COLOR                           WIA_DPS_FIRST + 7                         
#define WIA_DPS_PAD_COLOR                              WIA_DPS_FIRST + 8                         
#define WIA_DPS_FILTER_SELECT                          WIA_DPS_FIRST + 9                         
#define WIA_DPS_DITHER_SELECT                          WIA_DPS_FIRST + 10                        
#define WIA_DPS_DITHER_PATTERN_DATA                    WIA_DPS_FIRST + 11                        
#define WIA_DPS_DOCUMENT_HANDLING_CAPABILITIES         WIA_DPS_FIRST + 12                        
#define WIA_DPS_DOCUMENT_HANDLING_STATUS               WIA_DPS_FIRST + 13                        
#define WIA_DPS_DOCUMENT_HANDLING_SELECT               WIA_DPS_FIRST + 14                        
#define WIA_DPS_DOCUMENT_HANDLING_CAPACITY             WIA_DPS_FIRST + 15                        
#define WIA_DPS_OPTICAL_XRES                           WIA_DPS_FIRST + 16                        
#define WIA_DPS_OPTICAL_YRES                           WIA_DPS_FIRST + 17                        
#define WIA_DPS_ENDORSER_CHARACTERS                    WIA_DPS_FIRST + 18                        
#define WIA_DPS_ENDORSER_STRING                        WIA_DPS_FIRST + 19                        
#define WIA_DPS_SCAN_AHEAD_PAGES                       WIA_DPS_FIRST + 20                        
#define WIA_DPS_MAX_SCAN_TIME                          WIA_DPS_FIRST + 21                        
#define WIA_DPS_PAGES                                  WIA_DPS_FIRST + 22                        
#define WIA_DPS_PAGE_SIZE                              WIA_DPS_FIRST + 23                        
#define WIA_DPS_PAGE_WIDTH                             WIA_DPS_FIRST + 24                        
#define WIA_DPS_PAGE_HEIGHT                            WIA_DPS_FIRST + 25                        
#define WIA_DPS_PREVIEW                                WIA_DPS_FIRST + 26
#define WIA_DPS_TRANSPARENCY                           WIA_DPS_FIRST + 27
#define WIA_DPS_TRANSPARENCY_SELECT                    WIA_DPS_FIRST + 28
#define WIA_DPS_SHOW_PREVIEW_CONTROL                   WIA_DPS_FIRST + 29
#define WIA_DPS_MIN_HORIZONTAL_SHEET_FEED_SIZE         WIA_DPS_FIRST + 30
#define WIA_DPS_MIN_VERTICAL_SHEET_FEED_SIZE           WIA_DPS_FIRST + 31
#define WIA_DPS_LAST                                   WIA_DPS_FIRST + 31

//
// File System Properties
//
#define WIA_DPF_FIRST                           WIA_DPS_FIRST + WIA_RESERVED_FOR_SMALL_NEW_PROPS
#define WIA_DPF_MOUNT_POINT                     WIA_DPF_FIRST + 0
#define WIA_DPF_LAST                            WIA_DPF_FIRST + 0

//
// Video Camera properties.
//
// 
#define WIA_DPV_FIRST                           WIA_DPF_FIRST + WIA_RESERVED_FOR_SMALL_NEW_PROPS
#define WIA_DPV_LAST_PICTURE_TAKEN              WIA_DPV_FIRST + 0
#define WIA_DPV_IMAGES_DIRECTORY                WIA_DPV_FIRST + 1
#define WIA_DPV_DSHOW_DEVICE_PATH               WIA_DPV_FIRST + 2
#define WIA_DPV_LAST                            WIA_DPV_FIRST + 2

//
// Common item properties
//

#define WIA_IPA_FIRST                           WIA_DPS_FIRST + WIA_RESERVED_FOR_NEW_PROPS
#define WIA_IPA_ITEM_NAME                       WIA_IPA_FIRST + 0
#define WIA_IPA_FULL_ITEM_NAME                  WIA_IPA_FIRST + 1
#define WIA_IPA_ITEM_TIME                       WIA_IPA_FIRST + 2
#define WIA_IPA_ITEM_FLAGS                      WIA_IPA_FIRST + 3
#define WIA_IPA_ACCESS_RIGHTS                   WIA_IPA_FIRST + 4
#define WIA_IPA_DATATYPE                        WIA_IPA_FIRST + 5
#define WIA_IPA_DEPTH                           WIA_IPA_FIRST + 6
#define WIA_IPA_PREFERRED_FORMAT                WIA_IPA_FIRST + 7
#define WIA_IPA_FORMAT                          WIA_IPA_FIRST + 8
#define WIA_IPA_COMPRESSION                     WIA_IPA_FIRST + 9
#define WIA_IPA_TYMED                           WIA_IPA_FIRST + 10
#define WIA_IPA_CHANNELS_PER_PIXEL              WIA_IPA_FIRST + 11
#define WIA_IPA_BITS_PER_CHANNEL                WIA_IPA_FIRST + 12
#define WIA_IPA_PLANAR                          WIA_IPA_FIRST + 13
#define WIA_IPA_PIXELS_PER_LINE                 WIA_IPA_FIRST + 14
#define WIA_IPA_BYTES_PER_LINE                  WIA_IPA_FIRST + 15
#define WIA_IPA_NUMBER_OF_LINES                 WIA_IPA_FIRST + 16
#define WIA_IPA_GAMMA_CURVES                    WIA_IPA_FIRST + 17
#define WIA_IPA_ITEM_SIZE                       WIA_IPA_FIRST + 18
#define WIA_IPA_COLOR_PROFILE                   WIA_IPA_FIRST + 19
#define WIA_IPA_MIN_BUFFER_SIZE                 WIA_IPA_FIRST + 20
// Note:  BUFFER_SIZE and MIN_BUFFER_SIZE have the same propids
#define WIA_IPA_BUFFER_SIZE                     WIA_IPA_FIRST + 20
#define WIA_IPA_REGION_TYPE                     WIA_IPA_FIRST + 21
#define WIA_IPA_ICM_PROFILE_NAME                WIA_IPA_FIRST + 22
#define WIA_IPA_APP_COLOR_MAPPING               WIA_IPA_FIRST + 23
#define WIA_IPA_PROP_STREAM_COMPAT_ID           WIA_IPA_FIRST + 24
#define WIA_IPA_FILENAME_EXTENSION              WIA_IPA_FIRST + 25
#define WIA_IPA_SUPPRESS_PROPERTY_PAGE          WIA_IPA_FIRST + 26
#define WIA_IPA_LAST                            WIA_IPA_FIRST + 26

//
// Camera item properties
//

#define WIA_IPC_FIRST                          WIA_IPA_FIRST + WIA_RESERVED_FOR_NEW_PROPS
#define WIA_IPC_THUMBNAIL                      WIA_IPC_FIRST + 0
#define WIA_IPC_THUMB_WIDTH                    WIA_IPC_FIRST + 1
#define WIA_IPC_THUMB_HEIGHT                   WIA_IPC_FIRST + 2
#define WIA_IPC_AUDIO_AVAILABLE                WIA_IPC_FIRST + 3
#define WIA_IPC_AUDIO_DATA_FORMAT              WIA_IPC_FIRST + 4
#define WIA_IPC_AUDIO_DATA                     WIA_IPC_FIRST + 5
#define WIA_IPC_NUM_PICT_PER_ROW               WIA_IPC_FIRST + 6
#define WIA_IPC_SEQUENCE                       WIA_IPC_FIRST + 7
#define WIA_IPC_TIMEDELAY                      WIA_IPC_FIRST + 8
#define WIA_IPC_LAST                           WIA_IPC_FIRST + 8

//
// Scanner item properties
//
#define WIA_IPS_FIRST                          WIA_IPC_FIRST + WIA_RESERVED_FOR_NEW_PROPS
#define WIA_IPS_CUR_INTENT                     WIA_IPS_FIRST + 0
#define WIA_IPS_XRES                           WIA_IPS_FIRST + 1
#define WIA_IPS_YRES                           WIA_IPS_FIRST + 2
#define WIA_IPS_XPOS                           WIA_IPS_FIRST + 3
#define WIA_IPS_YPOS                           WIA_IPS_FIRST + 4
#define WIA_IPS_XEXTENT                        WIA_IPS_FIRST + 5
#define WIA_IPS_YEXTENT                        WIA_IPS_FIRST + 6
#define WIA_IPS_PHOTOMETRIC_INTERP             WIA_IPS_FIRST + 7
#define WIA_IPS_BRIGHTNESS                     WIA_IPS_FIRST + 8
#define WIA_IPS_CONTRAST                       WIA_IPS_FIRST + 9
#define WIA_IPS_ORIENTATION                    WIA_IPS_FIRST + 10
#define WIA_IPS_ROTATION                       WIA_IPS_FIRST + 11
#define WIA_IPS_MIRROR                         WIA_IPS_FIRST + 12
#define WIA_IPS_THRESHOLD                      WIA_IPS_FIRST + 13
#define WIA_IPS_INVERT                         WIA_IPS_FIRST + 14
#define WIA_IPS_WARM_UP_TIME                   WIA_IPS_FIRST + 15
#define WIA_IPS_LAST                           WIA_IPS_FIRST + 15

[
    uuid(95CEDD63-2E34-4B84-9FB3-F86AF1D4BF7A),
    version(1.0),
    helpstring("Microsoft Windows Image Acquisition 1.01 Type Library")
]
library WIALib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

	////////////////////////////////////////////////////////////
    // WiaProtocol Object (used only internally)

    [
        uuid(13F3EA8B-91D7-4F0A-AD76-D2853AC8BECE),
        helpstring("WiaProtocol Class"),
        hidden
    ]
    coclass WiaProtocol
    {
        [restricted] interface IUnknown;
    };

	////////////////////////////////////////////////////////////
	// Enumerations

	[uuid(E9F173A4-EF5C-4553-9F80-87ECFB636D9B), helpstring("WiaIntents")]
	typedef [public] enum WiaIntent {
	    ImageTypeColor = WIA_INTENT_IMAGE_TYPE_COLOR,
	    ImageTypeGrayscale = WIA_INTENT_IMAGE_TYPE_GRAYSCALE,
	    ImageTypeText = WIA_INTENT_IMAGE_TYPE_TEXT,
	    MinimizeSize = WIA_INTENT_MINIMIZE_SIZE,
	    MaximizeQuality = WIA_INTENT_MAXIMIZE_QUALITY,
	    BestPreview = WIA_INTENT_BEST_PREVIEW
	}
	WiaIntent;	

	[uuid(56385E6A-12C5-419d-8516-062B9613E042), helpstring("WiaFlags")]
	typedef [public] enum WiaFlag {
	    SingleImage = WIA_DEVICE_DIALOG_SINGLE_IMAGE,
	    UseCommonUI = WIA_DEVICE_DIALOG_USE_COMMON_UI,
	}
	WiaFlag;

	[uuid(9EED984D-AAC3-43cb-A993-98403F5ADC55), helpstring("WiaDeviceInfoPropertyIds")]
	typedef [public] enum WiaDeviceInfoPropertyId {
        DeviceInfoDevId = WIA_DIP_DEV_ID,
        DeviceInfoVendDesc = WIA_DIP_VEND_DESC,
        DeviceInfoDevDesc = WIA_DIP_DEV_DESC,
        DeviceInfoDevType = WIA_DIP_DEV_TYPE,
        DeviceInfoPortName = WIA_DIP_PORT_NAME,
        DeviceInfoDevName = WIA_DIP_DEV_NAME,
        DeviceInfoServerName = WIA_DIP_SERVER_NAME,
        DeviceInfoRemoteDevId = WIA_DIP_REMOTE_DEV_ID,
        DeviceInfoUIClsid = WIA_DIP_UI_CLSID,
        DeviceInfoHwConfig = WIA_DIP_HW_CONFIG,
        DeviceInfoBaudRate = WIA_DIP_BAUDRATE,
        DeviceInfoStiGenCapabilities = WIA_DIP_STI_GEN_CAPABILITIES,
        DeviceInfoWiaVersion = WIA_DIP_WIA_VERSION,
        DeviceInfoDriverVersion = WIA_DIP_DRIVER_VERSION,
    }
    WiaDeviceInfoPropertyId;

	[uuid(A0115E47-C46A-4c1d-A3B5-5ADB9F2FCD04), helpstring("WiaDeviceItemPropertyIds")]
	typedef [public] enum WiaItemPropertyId {
        DeviceFirmwareVersion = WIA_DPA_FIRMWARE_VERSION,
        DeviceConnectStatus = WIA_DPA_CONNECT_STATUS,
        DeviceDeviceTime = WIA_DPA_DEVICE_TIME,

        CameraDevicePicturesTaken = WIA_DPC_PICTURES_TAKEN,
        CameraDevicePicturesRemaining = WIA_DPC_PICTURES_REMAINING,
        CameraDeviceExposureMode = WIA_DPC_EXPOSURE_MODE,
        CameraDeviceExposureComp = WIA_DPC_EXPOSURE_COMP,
        CameraDeviceExposureTime = WIA_DPC_EXPOSURE_TIME,
        CameraDeviceFNumber = WIA_DPC_FNUMBER,
        CameraDeviceFlashMode = WIA_DPC_FLASH_MODE,
        CameraDeviceFocusMode = WIA_DPC_FOCUS_MODE,
        CameraDevicePanPosition = WIA_DPC_PAN_POSITION,
        CameraDeviceTiltPosition = WIA_DPC_TILT_POSITION,
        CameraDeviceTimerMode = WIA_DPC_TIMER_MODE,
        CameraDeviceTimerValue = WIA_DPC_TIMER_VALUE,
        CameraDevicePowerMode = WIA_DPC_POWER_MODE,
        CameraDeviceBatteryStatus = WIA_DPC_BATTERY_STATUS,
        CameraDeviceThumbWidth = WIA_DPC_THUMB_WIDTH,
        CameraDeviceThumbHeight = WIA_DPC_THUMB_HEIGHT,
        CameraDevicePictWidth = WIA_DPC_PICT_WIDTH,
        CameraDevicePictHeight = WIA_DPC_PICT_HEIGHT,
        CameraDeviceCompressionSetting = WIA_DPC_COMPRESSION_SETTING,
        CameraDeviceTimelapseInterval = WIA_DPC_TIMELAPSE_INTERVAL,
        CameraDeviceTimelapseNumber = WIA_DPC_TIMELAPSE_NUMBER,
        CameraDeviceBurstInterval = WIA_DPC_BURST_INTERVAL,
        CameraDeviceBurstNumber = WIA_DPC_BURST_NUMBER,
        CameraDeviceEffectMode = WIA_DPC_EFFECT_MODE,
        CameraDeviceDigitalZoom = WIA_DPC_DIGITAL_ZOOM,
        CameraDeviceSharpness = WIA_DPC_SHARPNESS,
        CameraDeviceContrast = WIA_DPC_CONTRAST,
        CameraDeviceCaptureMode = WIA_DPC_CAPTURE_MODE,
        CameraDeviceCaptureDelay = WIA_DPC_CAPTURE_DELAY,
        CameraDeviceExposureIndex = WIA_DPC_EXPOSURE_INDEX,
        CameraDeviceExposureMeteringMode = WIA_DPC_EXPOSURE_METERING_MODE,
        CameraDeviceFocusMeteringMode = WIA_DPC_FOCUS_METERING_MODE,
        CameraDeviceFocusDistance = WIA_DPC_FOCUS_DISTANCE,
        CameraDeviceFocalLength = WIA_DPC_FOCAL_LENGTH,
        CameraDeviceRGBGain = WIA_DPC_RGB_GAIN,
        CameraDeviceWhiteBalance = WIA_DPC_WHITE_BALANCE,
        CameraDeviceUploadURL = WIA_DPC_UPLOAD_URL,
        CameraDeviceArtist = WIA_DPC_ARTIST,
        CameraDeviceCopyrightInfo = WIA_DPC_COPYRIGHT_INFO,

        ScannerDeviceHorizontalBedSize = WIA_DPS_HORIZONTAL_BED_SIZE,
        ScannerDeviceVerticalBedSize = WIA_DPS_VERTICAL_BED_SIZE,
        ScannerDeviceHorizontalSheetFeedSize = WIA_DPS_HORIZONTAL_SHEET_FEED_SIZE,
        ScannerDeviceVerticalSheetFeedSize = WIA_DPS_VERTICAL_SHEET_FEED_SIZE,
        ScannerDeviceSheetFeederRegistration = WIA_DPS_SHEET_FEEDER_REGISTRATION,
        ScannerDeviceHorizontalBedRegistration = WIA_DPS_HORIZONTAL_BED_REGISTRATION,
        ScannerDeviceVerticalBedRegistration = WIA_DPS_VERTICAL_BED_REGISTRATION,
        ScannerDevicePlatenColor = WIA_DPS_PLATEN_COLOR,
        ScannerDevicePadColor = WIA_DPS_PAD_COLOR,
        ScannerDeviceDocumentHandlingCapabilities = WIA_DPS_DOCUMENT_HANDLING_CAPABILITIES,
        ScannerDeviceDocumentHandlingStatus = WIA_DPS_DOCUMENT_HANDLING_STATUS,
        ScannerDeviceDocumentHandlingSelect = WIA_DPS_DOCUMENT_HANDLING_SELECT,
        ScannerDeviceDocumentHandlingCapacity = WIA_DPS_DOCUMENT_HANDLING_CAPACITY,
        ScannerDeviceOpticalXres = WIA_DPS_OPTICAL_XRES,
        ScannerDeviceOpticalYres = WIA_DPS_OPTICAL_YRES,
        ScannerDeviceEndorserCharacters = WIA_DPS_ENDORSER_CHARACTERS,
        ScannerDeviceEndorserString = WIA_DPS_ENDORSER_STRING,
        ScannerDeviceScanAheadPages = WIA_DPS_SCAN_AHEAD_PAGES,
        ScannerDeviceMaxScanTime = WIA_DPS_MAX_SCAN_TIME,
        ScannerDevicePages = WIA_DPS_PAGES,
        ScannerDevicePageSize = WIA_DPS_PAGE_SIZE,
        ScannerDevicePageWidth = WIA_DPS_PAGE_WIDTH,
        ScannerDevicePageHeight = WIA_DPS_PAGE_HEIGHT,
        ScannerDevicePreview = WIA_DPS_PREVIEW,
        ScannerDeviceTransparency = WIA_DPS_TRANSPARENCY,
        ScannerDeviceTransparencySelect = WIA_DPS_TRANSPARENCY_SELECT,
        ScannerDeviceShowPreviewControl = WIA_DPS_SHOW_PREVIEW_CONTROL,
        ScannerDeviceMinHorizontalSheetFeedSize = WIA_DPS_MIN_HORIZONTAL_SHEET_FEED_SIZE,
        ScannerDeviceMinVerticalSheetFeedSize = WIA_DPS_MIN_VERTICAL_SHEET_FEED_SIZE,

        FileDeviceMountPoint = WIA_DPF_MOUNT_POINT,

        VideoDeviceLastPictureTaken = WIA_DPV_LAST_PICTURE_TAKEN,
        VideoDeviceImagesDirectory = WIA_DPV_IMAGES_DIRECTORY,
        VideoDeviceDShowDevicePath = WIA_DPV_DSHOW_DEVICE_PATH,

        PictureItemName = WIA_IPA_ITEM_NAME,
        PictureFullItemName = WIA_IPA_FULL_ITEM_NAME,
        PictureItemTime = WIA_IPA_ITEM_TIME,
        PictureItemFlags = WIA_IPA_ITEM_FLAGS,
        PictureAccessRights = WIA_IPA_ACCESS_RIGHTS,
        PictureDatatype = WIA_IPA_DATATYPE,
        PictureDepth = WIA_IPA_DEPTH,
        PicturePreferredFormat = WIA_IPA_PREFERRED_FORMAT,
        PictureFormat = WIA_IPA_FORMAT,
        PictureCompression = WIA_IPA_COMPRESSION,
        PictureTymed = WIA_IPA_TYMED,
        PictureChannelsPerPixel = WIA_IPA_CHANNELS_PER_PIXEL,
        PictureBitsPerChannel = WIA_IPA_BITS_PER_CHANNEL,
        PicturePlanar = WIA_IPA_PLANAR,
        PicturePixelsPerLine = WIA_IPA_PIXELS_PER_LINE,
        PictureBytesPerLine = WIA_IPA_BYTES_PER_LINE,
        PictureNumberOfLines = WIA_IPA_NUMBER_OF_LINES,
        PictureGammaCurves = WIA_IPA_GAMMA_CURVES,
        PictureItemSize = WIA_IPA_ITEM_SIZE,
        PictureColorProfile = WIA_IPA_COLOR_PROFILE,
        PictureMinBufferSize = WIA_IPA_MIN_BUFFER_SIZE,
        PictureBufferSize = WIA_IPA_BUFFER_SIZE,
        PictureRegionType = WIA_IPA_REGION_TYPE,
        PictureIcmProfileName = WIA_IPA_ICM_PROFILE_NAME,
        PictureAppColorMapping = WIA_IPA_APP_COLOR_MAPPING,
        PicturePropStreamCompatId = WIA_IPA_PROP_STREAM_COMPAT_ID,
        PictureFilenameExtension = WIA_IPA_FILENAME_EXTENSION,
        PictureSuppressPropertyPage = WIA_IPA_SUPPRESS_PROPERTY_PAGE,

        CameraPictureThumbnail = WIA_IPC_THUMBNAIL,
        CameraPictureThumbWidth = WIA_IPC_THUMB_WIDTH,
        CameraPictureThumbHeight = WIA_IPC_THUMB_HEIGHT,
        CameraPictureAudioAvailable = WIA_IPC_AUDIO_AVAILABLE,
        CameraPictureAudioDataFormat = WIA_IPC_AUDIO_DATA_FORMAT,
        CameraPictureAudioData = WIA_IPC_AUDIO_DATA,
        CameraPictureNumPictPerRow = WIA_IPC_NUM_PICT_PER_ROW,
        CameraPictureSequence = WIA_IPC_SEQUENCE,
        CameraPictureTimedelay = WIA_IPC_TIMEDELAY,

        ScannerPictureCurIntent = WIA_IPS_CUR_INTENT,
        ScannerPictureXres = WIA_IPS_XRES,
        ScannerPictureYres = WIA_IPS_YRES,
        ScannerPictureXpos = WIA_IPS_XPOS,
        ScannerPictureYpos = WIA_IPS_YPOS,
        ScannerPictureXextent = WIA_IPS_XEXTENT,
        ScannerPictureYextent = WIA_IPS_YEXTENT,
        ScannerPicturePhotometricInterp = WIA_IPS_PHOTOMETRIC_INTERP,
        ScannerPictureBrightness = WIA_IPS_BRIGHTNESS,
        ScannerPictureContrast = WIA_IPS_CONTRAST,
        ScannerPictureOrientation = WIA_IPS_ORIENTATION,
        ScannerPictureRotation = WIA_IPS_ROTATION,
        ScannerPictureMirror = WIA_IPS_MIRROR,
        ScannerPictureThreshold = WIA_IPS_THRESHOLD,
        ScannerPictureInvert = WIA_IPS_INVERT,
        ScannerPictureWarmUpTime = WIA_IPS_WARM_UP_TIME,
	}
	WiaItemPropertyId;
	
    
	////////////////////////////////////////////////////////////
	// Forward Reference

    interface ICollection; 

	////////////////////////////////////////////////////////////
	// Item Object

    [
        object,
        uuid(D06D503F-4B71-40f3-94A7-66478F732BC9),
        dual,
        helpstring("IWiaDeviceItem interface"),
        pointer_default(unique)
    ]
    interface IWiaDispatchItem : IDispatch
    {
        [propget, id(1), helpstring("Returns the current connection status")] HRESULT ConnectStatus( [out,retval] BSTR* pbstrStatus );
        [propget, id(2), helpstring("Returns the current time on the device")] HRESULT Time( [out,retval] BSTR* pbstrTime );
        [propget, id(3), helpstring("Returns the firmware version of the device")] HRESULT FirmwareVersion( [out,retval] BSTR* pbstrVersion );
        [id(4), helpstring("Displays the acquisition dialog box")] HRESULT GetItemsFromUI([in, defaultvalue(0)] WiaFlag Flags, [in, defaultvalue(0)] WiaIntent Intent, [out, retval] ICollection** ppCollection);
        [id(5), helpstring( "Transfers the item to a file, or clipboard if filename is clipboard" )] HRESULT Transfer( [in] BSTR Filename,  [in, defaultvalue((VARIANT_BOOL)0)] VARIANT_BOOL AsyncTransfer );
        [id(6), helpstring( "Takes a Picture and returns it if successful" )] HRESULT TakePicture( [out, retval] IWiaDispatchItem** ppDispItem );
        [propget, id(20), helpstring("Returns the Name of the item")] HRESULT Name( [out,retval] BSTR* pbstrName );
        [propget, id(21), helpstring("Returns the full name of the item")] HRESULT FullName( [out,retval] BSTR* pbstrFullName );
        [propget, id(22), helpstring("Returns the type of this item")] HRESULT ItemType( [out,retval] BSTR* pbstrType );
        [propget, id(23), helpstring("Returns the width of the item in pixels")] HRESULT Width( [out,retval] long* plWidth );
        [propget, id(24), helpstring("Returns the height of the item in pixels")] HRESULT Height( [out,retval] long* plHeight );
        [propget, id(50), helpstring("Returns the width of the the item's thumbnail")] HRESULT ThumbWidth([out,retval] long* plWidth );
        [propget, id(51), helpstring("Returns the height of the item's thumbnail")] HRESULT ThumbHeight( [out,retval] long* plHeight );
        [propget, id(52), helpstring("Returns the path to the temporary image thumbnail")] HRESULT Thumbnail( [out,retval] BSTR* pbstrPath );
        [propget, id(53), helpstring("Returns the height of the picture")] HRESULT PictureHeight( [out, retval] long* plHeight );
        [propget, id(54), helpstring("Returns the width of the picture")] HRESULT PictureWidth( [out,retval] long* plWidth );
        [propget, id(500), helpstring("Returns a collection of this items children")] HRESULT Children( [out,retval] ICollection** ppCollection );
        [id(1000), helpstring("Returns the value of the property with the given id")] HRESULT GetPropById( [in] WiaItemPropertyId Id, [out,retval] VARIANT* pvaOut );
    };

    [
        noncreatable,
        uuid(E6C45109-442C-4585-BE44-F5D2884E544A),
        helpstring("WiaItem Class")
    ]
    coclass Item
    {
        [default] interface IWiaDispatchItem;
    };
        
	////////////////////////////////////////////////////////////
    // DeviceInfo Object

    [
        object,
        uuid(5267FF5E-7CAF-4769-865D-17A25968525E),
        dual,
        helpstring("IWiaDeviceInfo Interface"),
        pointer_default(unique)
    ]
    interface IWiaDeviceInfo : IDispatch
    {
        [id(1), helpstring("Create an Item for this device")] HRESULT Create( [out,retval] IWiaDispatchItem** ppDevice );
        [propget, id(2), helpstring("Returns the id of the device")] HRESULT Id( [out,retval] BSTR* pbstrDeviceId );
        [propget, id(3), helpstring("Returns the name of the device" )] HRESULT Name( [out,retval] BSTR* pbstrName );
        [propget, id(4), helpstring("Returns the type of the device" )] HRESULT Type( [out,retval] BSTR* pbstrType );
        [propget, id(5), helpstring("Returns the port the device is connected to" )] HRESULT Port( [out,retval] BSTR* pbstrPort );
        [propget, id(6), helpstring("Returns the class id for the User Interface for this device" )] HRESULT UIClsid( [out,retval] BSTR* pbstrGuidUI );
        [propget, id(7), helpstring("Returns the name of the manufacturer of this device" )] HRESULT Manufacturer( [out,retval] BSTR* pbstrVendor );
        [id(1000), helpstring("Returns the value of the property with the given Id")] HRESULT GetPropById( [in] WiaDeviceInfoPropertyId Id, [out,retval] VARIANT* pvaOut );
    };

    [
        noncreatable,
        uuid(34E1C006-99D2-4335-B0B1-CE7B9FE5396C),
        helpstring("DeviceInfo Class")
    ]
    coclass DeviceInfo
    {
        [default] interface IWiaDeviceInfo;
    };
        
	////////////////////////////////////////////////////////////
    // Collection Object

    [
        object,
        uuid(C34C8CE7-B253-4f89-AA25-8A24AD71D0C0),
        dual,
        helpstring("ICollection Interface"),
        pointer_default(unique)
    ]
    interface ICollection : IDispatch
    {
        [propget, id(0), helpstring("Returns the specified item in the collection")] HRESULT Item( [in] long Index, [out, retval] IDispatch** ppDispItem );
        [propget, id(1), helpstring( "Returns the number of members in the collection" )] HRESULT Count( [out,retval] long* pCount );

        // Hidden for backwards compatibility
        [propget, id(2), hidden] HRESULT Length( [out, retval] unsigned long* plLength );

        // hidden member required to mark interface as a collection
        [propget, id(DISPID_NEWENUM), hidden] HRESULT _NewEnum( [out, retval] IUnknown** ppEnum );
    };

    [
        noncreatable,
        uuid(6E27C0E7-1D45-4ca7-9BF7-BD6CDDAA1ADC),
        helpstring("Collection Class")
    ]
    coclass Collection
    {
        [default] interface ICollection;
    };
        
	////////////////////////////////////////////////////////////
    // Collection Object

    [
        object,
        uuid(B10BA1BC-3713-4EC0-8EEA-690EBD2CED8A),
        dual,
        helpstring("IWia Interface"),
        pointer_default(unique)
    ]
    interface IWia : IDispatch
    {
        [propget, id(1), helpstring( "Returns the DeviceInfo collection" )] HRESULT Devices( [out, retval] ICollection** ppCol );
        [id(2), helpstring( "Creates a connection to the specified DeviceInfo, Id or Index" )] HRESULT Create( [in, unique] VARIANT* Device, [out,retval] IWiaDispatchItem** ppDevice );
        [id(10010), hidden] HRESULT _DebugDialog( BOOL fWait );
    };

        // for some reason midl doesn't put the DIID in the header
        // this ensures that it is in the header which makes ATL a lot
        // happier.
//REVIEW????        cpp_quote( "EXTERN_C const GUID DIID__IWiaEvents;" )

    [
        uuid(E5F04D72-6C16-42e2-BCCA-F8D0DB4ADE06),
        helpstring("Events fired by the IWia interface")
    ]
    dispinterface _IWiaEvents
    {
        properties:
        methods:
            [id(1), helpstring("Occurs when a device is connected" )] void OnDeviceConnected( BSTR Id );
            [id(2), helpstring("Occurs when a device is disconnected")] void OnDeviceDisconnected( BSTR Id );
            [id(3), helpstring("Occurs when a Transfer has completed")] void OnTransferComplete( IWiaDispatchItem* Item, BSTR Path );
    };

    [
        uuid(4EC4272E-2E6F-4EEB-91D0-EBC4D58E8DEE),
        helpstring("WIA Class")
    ]
    coclass Wia
    {
        [default] interface IWia;
        [default, source] dispinterface _IWiaEvents;
    };

    [
        uuid(0DAD5531-BF31-43AC-A513-1F8926BBF5EC),
        helpstring("WIA Class (Safe for Scripting)")
    ]
    coclass SafeWia
    {
        [default] interface IWia;
    };
};

