/*******************************************************************************
*
*  (C) COPYRIGHT MICROSOFT CORP., 1998
*
*  TITLE:           StiScr.idl
*
*  VERSION:         2.0
*
*  AUTHOR:          ReedB
*
*  DATE:            6 Jan, 1998
*
*  DESCRIPTION:
*   IDL source for WIA device manager script interface. Visual Basic Scripting
*   uses variants for all variables.
*
*******************************************************************************/

interface IWiaDevMgrDispatch;
interface IEnumWiaDevInfoDispatch;
interface IPropStorageDispatch;
interface IWiaItemDispatch;
interface IEnumWiaItemDispatch;
interface IEnumStatPropStgDispatch;
interface IEnumWiaDevCapsDispatch;

import "unknwn.idl";
import "oaidl.idl";
import "propidl.idl";

/*******************************************************************************
*
* WIA Device Manager Dispatch Interface
*
*******************************************************************************/

[
    object,
    uuid(f768d350-f9a4-11d1-9a0b-00c04fa36145),
    helpstring("WIA Device Manager Dispatch Interface"),
    pointer_default(unique),
    oleautomation
]

interface IWiaDevMgrDispatch : IDispatch
{
    [id(1), helpstring("Get an image and place data in clipboard")]
    HRESULT GetImageClipboard(
        [in]            LONG                            hwndParent,
        [in]            LONG                            lDeviceType,
        [in]            LONG                            lFlags,
        [in]            LONG                            lIntent,
        [in]            BSTR                            bstrFormat,
        [in, unique]    IDispatch                       *pItem,
        [out, retval]   LONG                            *lResult);

    [id(2), helpstring("Get an image and place data in a temporary file")]
    HRESULT GetImageFile(
        [in]            LONG                            hwndParent,
        [in]            LONG                            lDeviceType,
        [in]            LONG                            lFlags,
        [in]            LONG                            lIntent,
        [in]            BSTR                            bstrFormat,
        [in, unique]    IDispatch                       *pItem,
        [out, retval]   BSTR                            *pbstrFileName);

    [id(3), helpstring("Create an WIA device information enumerator")]
    HRESULT EnumDeviceInfo(
        [in]            LONG                            lFlag,
        [out, retval]   IEnumWiaDevInfoDispatch         **ppIEnum);

    [id(4), helpstring("Create a WIA device object")]
    HRESULT CreateDevice(
        [in]            BSTR                            bstrDeviceID,
        [out, retval]   IWiaItemDispatch                **ppItem);

    [id(5), helpstring("Present UI to select then create an WIA device")]
    HRESULT SelectDevice(
        [in]            LONG                            hwndParent,
        [in]            LONG                            lDeviceType,
        [in]            LONG                            lFlags,
        [out, retval]   IWiaItemDispatch                **ppItem);

    [id(6), helpstring("Resisters pIDisp for the event notification")]
    HRESULT RegisterEventCallbackInterface(
        [in]            LONG                            lFlags,
        [in]            BSTR                            bstrDevID,
        [in]            BSTR                            guidEventID,
        [in]            IDispatch                       *pIDisp);
                
};

/*******************************************************************************
*
* WIA Device Information Enumeration Dispatch Interface
*
*******************************************************************************/

[
    object,
    uuid(8e25d848-8949-11d2-b081-00c04fa36145),
    helpstring("WIA Device Information Enumeration Interface"),
    pointer_default(unique)
]

interface IEnumWiaDevInfoDispatch : IDispatch
{
    [id(-4), propget, restricted, helpstring("Required enumerator for VB")]   
    HRESULT _NewEnum( 
        [out, retval]   IUnknown                **ppEnumVar);
        
    [id(0), propget, helpstring("Returns the WiaDevInfo object of the given index")]
    HRESULT Item(
        [in]            LONG                    lIndex,
        [out, retval]   VARIANT                 **retVal); 
                
    [id(1), helpstring("Gets the next WiaDevInfo object")]
    HRESULT Next(
        [in]            ULONG                   celt,
        [out]           VARIANT                 *pProp,
        [in,out,unique] ULONG                   *pceltFetched);
         
    [id(2), helpstring("Skips the next WiaDevInfo object")]
    HRESULT Skip(
        [in]            ULONG                   celt);

    [id(3), helpstring("Resets to first WiaDevInfo object")]
    HRESULT Reset(void);

    [id(4), helpstring("Clone Device Info enumerator object, but returns the IEnumVARIANT interface")]
    HRESULT Clone(
        [out, retval]   IEnumVARIANT            **ppIEnum);
}

/*******************************************************************************
*
* Property Storage Dispatch Interface
*
*******************************************************************************/

[
    object,
    uuid(a2cef640-8f9e-11d2-b083-00c04fa36145),
    helpstring("Property Storage Dispatch Interface"),
    pointer_default(unique)
]

interface IPropStorageDispatch : IDispatch
{
    HRESULT ReadMultiple(
        [in]            VARIANT                         *rgpspec,
        [out, retval]   VARIANT                         *rgpropvar);

    HRESULT WriteMultiple(
        [in]            VARIANT                         *rgpspec,
        [in]            VARIANT                         *rgpropvar);

    HRESULT ReadPropertyNames(
        [in]            VARIANT                         *pvPropSpec,
        [out, retval]   VARIANT                         *pvPropNames);

    HRESULT Enum(
        [out, retval]   IEnumStatPropStgDispatch        **ppEnum);

    HRESULT WritePropertyNames(
        [in]            VARIANT                         *rgpropid,
        [out]           VARIANT                         *rglpwstrName);
        
    HRESULT GetPropertyAttributes(
        [in]            VARIANT                         cpspec,
        [in]            VARIANT                         *rgpspec,
        [out]           VARIANT                         *rgflags,
        [out]           VARIANT                         *rgpropvar);    
            
    HRESULT GetCount(
        [out]           VARIANT                         *pulNumProps);

/*  Not used currently
    HRESULT GetPropertyStream(
        [out]   IStream                **ppIStream);

    HRESULT SetPropertyStream(
        [in]    IStream                *pIStream);
*/        
}

/*******************************************************************************
*
* WIA Property Storage Enumeration Dispatch Interface
*
*******************************************************************************/

[
    object,
    uuid(340bdb90-9f44-11d2-b08a-00c04fa36145),
    helpstring("WIA Property Storage Enumeration Interface"),
    pointer_default(unique)
]

interface IEnumStatPropStgDispatch : IDispatch
{
    [id(-4), propget, restricted, helpstring("Required enumerator for VB")]   
    HRESULT _NewEnum( 
        [out, retval]   IUnknown                **ppEnumVar);
        
    [id(0), propget, helpstring("Returns the item of the given index")]
    HRESULT Item(
        [in]            LONG                    lIndex,
        [out, retval]   VARIANT                 **retVal); 
                
    [id(1), helpstring("Gets the next property")]
    HRESULT Next(
        [in]            ULONG                   celt,
        [out]           VARIANT                 *pProp,
        [in,out,unique] ULONG                   *pceltFetched);
         
    [id(2), helpstring("Skips the next property")]
    HRESULT Skip(
        [in]            ULONG                   celt);

    [id(3), helpstring("Resets to first property")]
    HRESULT Reset(void);

    [id(4), helpstring("Clone property enumeration object, but returns the IEnumVARIANT interface")]
    HRESULT Clone(
        [out, retval]   IEnumVARIANT            **ppIEnum);
}

/*******************************************************************************
*
* IWiaItemDispatch Interface
*
*******************************************************************************/

[
    object,
    uuid(f4097433-9e68-11d2-b08a-00c04fa36145),
    helpstring("WIA Device Item Interface"),
    pointer_default(unique)
]

interface IWiaItemDispatch : IDispatch
{
    [id(1), helpstring("Get item type")]
    HRESULT GetItemType(
        [out, retval]   LONG                    *plItemType);

    [id(2), helpstring("Analyze an item")]
    HRESULT AnalyzeItem(
        [in]            LONG                    lFlags);

    [id(3), helpstring("Get item enumerator")]
    HRESULT EnumChildItems(
        [out, retval]   IEnumWiaItemDispatch    **ppIEnumWiaItem);
                        
    [id(4), helpstring("Delete an item")]
    HRESULT DeleteItem(
        [in]            LONG                    lFlags);

    [id(5), helpstring("Create a new child item")]
    HRESULT CreateChildItem(
        [in]            LONG                    lFlags,
        [in]            BSTR                    bstrItemName,
        [in]            BSTR                    bstrFullItemName,
        [out, retval]   IWiaItemDispatch        **ppNewItem);

    [id(7), helpstring("Issue a device command")]
    HRESULT DeviceCommand(
        [in]            LONG                    lFlags,
        [in]            BSTR                    bstrCommand,
        [out, retval]   IWiaItemDispatch        **pIWiaItem);

    [id(8), helpstring("Display device data acquistion UI")]
    HRESULT DeviceDlg(
        [in]            LONG                    hwndParent,
        [in]            LONG                    lFlags,
        [in]            LONG                    lIntent,
        [out, retval]   VARIANT                 *pIWiaItem);

    [id(9), helpstring("search for item by name")]
    HRESULT FindItemByName(
        [in]            LONG                    lFlags,
        [in]            BSTR                    bstrFullItemName,
        [out, retval]   IWiaItemDispatch        **ppIWiaItem);

    [id(10), helpstring("Get device root item")]
    HRESULT GetRootItem(
        [out, retval]   IWiaItemDispatch        **ppIWiaItem);
    
    [id(11), helpstring("Read item properties")]
    HRESULT ReadMultiple(
        [in]            VARIANT                 *rgpspec,
        [out, retval]   VARIANT                 *rgpropvar);

    [id(12), helpstring("Write item properties")]
    HRESULT WriteMultiple(
        [in]            VARIANT                 *rgpspec,
        [in]            VARIANT                 *rgpropvar);

    [id(13), helpstring("Get capability enumerator")]
    HRESULT EnumWiaDevCaps(
        [in]            ULONG                      ulFlags,
        [out, retval]   IEnumWiaDevCapsDispatch    **ppIEnum);
};

/*******************************************************************************
*
* IEnumWiaItem Interface
*
*******************************************************************************/

[
    object,
    uuid(ff0bb94d-9e68-11d2-b08a-00c04fa36145),
    helpstring("WIA Device Class Item Enumeration Interface"),
    pointer_default(unique)
]

interface IEnumWiaItemDispatch : IDispatch
{    
    [id(-4), propget, restricted, helpstring("Required enumerator for VB")]   
    HRESULT _NewEnum( 
        [out, retval]   IUnknown                **ppEnumVar);
        
    [id(0), propget, helpstring("Returns the item of the given index")]
    HRESULT Item(
        [in]            LONG                    lIndex,
        [out, retval]   VARIANT                 **retVal); 
                
    [id(1), helpstring("Gets the next IWiaItem object")]
    HRESULT Next(
        [in]            ULONG                   celt,
        [out]           VARIANT                 *pItem,
        [in,out,unique] ULONG                   *pceltFetched);
         
    [id(2), helpstring("Skips the specified number of IWiaItem objects")]
    HRESULT Skip(
        [in]            ULONG                   celt);

    [id(3), helpstring("Resets to first IWiaItemObject")]
    HRESULT Reset(void);

    [id(4), helpstring("Clone IWiaItem enumeration object and returns the IEnumVARIANT interface")]
    HRESULT Clone(
        [out, retval]   IEnumVARIANT            **ppIEnum);
}

/*******************************************************************************
*
* IEnumWiaDevCaps Interface
*
*******************************************************************************/

[
    object,
    uuid(05B40A3C-E6BC-11d2-B5C2-00C04F68C956),
    helpstring("WIA Device Class Capability Enumeration Interface"),
    pointer_default(unique)
]

interface IEnumWiaDevCapsDispatch : IDispatch
{
    [id(-4), propget, restricted, helpstring("Required enumerator for VB")]   
    HRESULT _NewEnum( 
        [out, retval]   IUnknown                **ppEnumVar);
        
    [id(0), propget, helpstring("Returns the item of the given index")]
    HRESULT Item(
        [in]            LONG                    lIndex,
        [out, retval]   VARIANT                 **retVal); 
                
    [id(1), helpstring("Gets the next capability")]
    HRESULT Next(
        [in]            ULONG                   celt,
        [out]           VARIANT                 *DevCap,
        [in,out,unique] ULONG                   *pceltFetched);
         
    [id(2), helpstring("Skips the next capability")]
    HRESULT Skip(
        [in]            ULONG                   celt);

    [id(3), helpstring("Resets to first capability")]
    HRESULT Reset(void);

    [id(4), helpstring("Clone capability enumeration object, but returns the IEnumVARIANT interface")]
    HRESULT Clone(
        [out, retval]   IEnumVARIANT            **ppIEnum);
}

/*******************************************************************************
*
*               C O M P O N E N T    D E S C R I P T I O N S
*
*******************************************************************************/

[
    uuid(0c131077-0088-11d2-87ea-0060081ed811),
        version(1.0),
    helpstring("WIA Type Library Dispatch")
]

library WiaDevMgrDispatch
{
    importlib("stdole32.tlb") ;

    // WIA Device Manager Dispatch
    [
        uuid(4b97598e-006e-11d2-87ea-0060081ed811),
        helpstring("WIA Device Manager Dispatch")
    ]

    coclass WiaDevMgrDispatch
    {
        [default] interface IWiaDevMgrDispatch;
        interface IEnumWiaDevInfoDispatch;
        interface IPropStorageDispatch;
        interface IWiaItemDispatch;
        interface IEnumWiaItemDispatch;
        interface IEnumStatPropStgDispatch;
        interface IEnumWiaDevCapsDispatch;
    };
};