//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0015
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace UI
    {
        namespace Input
        {
            namespace Preview
            {
                namespace Injection
                {
                    typedef enum InjectedInputButtonChangeKind InjectedInputButtonChangeKind;

                    typedef enum InjectedInputKeyOptions InjectedInputKeyOptions;

                    typedef enum InjectedInputMouseOptions InjectedInputMouseOptions;

                    typedef enum InjectedInputPenButtons InjectedInputPenButtons;

                    typedef enum InjectedInputPenParameters InjectedInputPenParameters;

                    typedef enum InjectedInputPointerOptions InjectedInputPointerOptions;

                    typedef enum InjectedInputShortcut InjectedInputShortcut;

                    typedef enum InjectedInputTouchParameters InjectedInputTouchParameters;

                    typedef enum InjectedInputVisualizationMode InjectedInputVisualizationMode;

                    typedef struct InjectedInputPoint InjectedInputPoint;

                    typedef struct InjectedInputPointerInfo InjectedInputPointerInfo;

                    typedef struct InjectedInputRectangle InjectedInputRectangle;

                    interface IInjectedInputKeyboardInfo;

                    interface IInjectedInputMouseInfo;

                    interface IInjectedInputPenInfo;

                    interface IInjectedInputTouchInfo;

                    interface IInputInjector;

                    interface IInputInjectorStatics;

                    runtimeclass InjectedInputKeyboardInfo;

                    runtimeclass InjectedInputMouseInfo;

                    runtimeclass InjectedInputPenInfo;

                    runtimeclass InjectedInputTouchInfo;

                    runtimeclass InputInjector;
                }
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace UI
    {
        namespace Input
        {
            namespace Preview
            {
                namespace Injection
                {
                    declare
                    {
                        interface Windows.Foundation.Collections.IIterable<Windows.UI.Input.Preview.Injection.InjectedInputKeyboardInfo*>;

                        interface Windows.Foundation.Collections.IIterable<Windows.UI.Input.Preview.Injection.InjectedInputMouseInfo*>;

                        interface Windows.Foundation.Collections.IIterable<Windows.UI.Input.Preview.Injection.InjectedInputTouchInfo*>;

                        interface Windows.Foundation.Collections.IIterator<Windows.UI.Input.Preview.Injection.InjectedInputKeyboardInfo*>;

                        interface Windows.Foundation.Collections.IIterator<Windows.UI.Input.Preview.Injection.InjectedInputMouseInfo*>;

                        interface Windows.Foundation.Collections.IIterator<Windows.UI.Input.Preview.Injection.InjectedInputTouchInfo*>;
                    }
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace UI
    {
        namespace Input
        {
            namespace Preview
            {
                namespace Injection
                {
                    [version(0x0A000000)]
                    enum InjectedInputButtonChangeKind
                    {
                        None             = 0,
                        FirstButtonDown  = 1,
                        FirstButtonUp    = 2,
                        SecondButtonDown = 3,
                        SecondButtonUp   = 4,
                        ThirdButtonDown  = 5,
                        ThirdButtonUp    = 6,
                        FourthButtonDown = 7,
                        FourthButtonUp   = 8,
                        FifthButtonDown  = 9,
                        FifthButtonUp    = 10
                    };

                    [flags]
                    [version(0x0A000000)]
                    enum InjectedInputKeyOptions
                    {
                        None        = 0x0,
                        ExtendedKey = 0x1,
                        KeyUp       = 0x2,
                        ScanCode    = 0x8,
                        Unicode     = 0x4
                    };

                    [flags]
                    [version(0x0A000000)]
                    enum InjectedInputMouseOptions
                    {
                        None           = 0x0,
                        Move           = 0x1,
                        LeftDown       = 0x2,
                        LeftUp         = 0x4,
                        RightDown      = 0x8,
                        RightUp        = 0x10,
                        MiddleDown     = 0x20,
                        MiddleUp       = 0x40,
                        XDown          = 0x80,
                        XUp            = 0x100,
                        Wheel          = 0x800,
                        HWheel         = 0x1000,
                        MoveNoCoalesce = 0x2000,
                        VirtualDesk    = 0x4000,
                        Absolute       = 0x8000
                    };

                    [flags]
                    [version(0x0A000000)]
                    enum InjectedInputPenButtons
                    {
                        None     = 0x0,
                        Barrel   = 0x1,
                        Inverted = 0x2,
                        Eraser   = 0x4
                    };

                    [flags]
                    [version(0x0A000000)]
                    enum InjectedInputPenParameters
                    {
                        None     = 0x0,
                        Pressure = 0x1,
                        Rotation = 0x2,
                        TiltX    = 0x4,
                        TiltY    = 0x8
                    };

                    [flags]
                    [version(0x0A000000)]
                    enum InjectedInputPointerOptions
                    {
                        None           = 0x0,
                        New            = 0x1,
                        InRange        = 0x2,
                        InContact      = 0x4,
                        FirstButton    = 0x10,
                        SecondButton   = 0x20,
                        Primary        = 0x2000,
                        Confidence     = 0x4000,
                        Canceled       = 0x8000,
                        PointerDown    = 0x10000,
                        Update         = 0x20000,
                        PointerUp      = 0x40000,
                        CaptureChanged = 0x200000
                    };

                    [version(0x0A000000)]
                    enum InjectedInputShortcut
                    {
                        Back   = 0,
                        Start  = 1,
                        Search = 2
                    };

                    [flags]
                    [version(0x0A000000)]
                    enum InjectedInputTouchParameters
                    {
                        None        = 0x0,
                        Contact     = 0x1,
                        Orientation = 0x2,
                        Pressure    = 0x4
                    };

                    [version(0x0A000000)]
                    enum InjectedInputVisualizationMode
                    {
                        None     = 0,
                        Default  = 1,
                        Indirect = 2
                    };

                    [version(0x0A000000)]
                    struct InjectedInputPoint
                    {
                        INT32 PositionX;
                        INT32 PositionY;
                    };

                    [version(0x0A000000)]
                    struct InjectedInputPointerInfo
                    {
                        UINT32 PointerId;
                        Windows.UI.Input.Preview.Injection.InjectedInputPointerOptions PointerOptions;
                        Windows.UI.Input.Preview.Injection.InjectedInputPoint PixelLocation;
                        UINT32 TimeOffsetInMilliseconds;
                        UINT64 PerformanceCount;
                    };

                    [version(0x0A000000)]
                    struct InjectedInputRectangle
                    {
                        INT32 Left;
                        INT32 Top;
                        INT32 Bottom;
                        INT32 Right;
                    };

                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputKeyboardInfo)]
                    [uuid(4B46D140-2B6A-5FFA-7EAE-BD077B052ACD)]
                    [version(0x0A000000)]
                    interface IInjectedInputKeyboardInfo : IInspectable
                    {
                        [propget] HRESULT KeyOptions([out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputKeyOptions* value);
                        [propput] HRESULT KeyOptions([in] Windows.UI.Input.Preview.Injection.InjectedInputKeyOptions value);
                        [propget] HRESULT ScanCode([out] [retval] UINT16* value);
                        [propput] HRESULT ScanCode([in] UINT16 value);
                        [propget] HRESULT VirtualKey([out] [retval] UINT16* value);
                        [propput] HRESULT VirtualKey([in] UINT16 value);
                    }

                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputMouseInfo)]
                    [uuid(96F56E6B-E47A-5CF4-418D-8A5FB9670C7D)]
                    [version(0x0A000000)]
                    interface IInjectedInputMouseInfo : IInspectable
                    {
                        [propget] HRESULT MouseOptions([out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputMouseOptions* value);
                        [propput] HRESULT MouseOptions([in] Windows.UI.Input.Preview.Injection.InjectedInputMouseOptions value);
                        [propget] HRESULT MouseData([out] [retval] UINT32* value);
                        [propput] HRESULT MouseData([in] UINT32 value);
                        [propget] HRESULT DeltaY([out] [retval] INT32* value);
                        [propput] HRESULT DeltaY([in] INT32 value);
                        [propget] HRESULT DeltaX([out] [retval] INT32* value);
                        [propput] HRESULT DeltaX([in] INT32 value);
                        [propget] HRESULT TimeOffsetInMilliseconds([out] [retval] UINT32* value);
                        [propput] HRESULT TimeOffsetInMilliseconds([in] UINT32 value);
                    }

                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputPenInfo)]
                    [uuid(6B40AD03-CA1E-5527-7E02-2828540BB1D4)]
                    [version(0x0A000000)]
                    interface IInjectedInputPenInfo : IInspectable
                    {
                        [propget] HRESULT PointerInfo([out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputPointerInfo* value);
                        [propput] HRESULT PointerInfo([in] Windows.UI.Input.Preview.Injection.InjectedInputPointerInfo value);
                        [propget] HRESULT PenButtons([out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputPenButtons* value);
                        [propput] HRESULT PenButtons([in] Windows.UI.Input.Preview.Injection.InjectedInputPenButtons value);
                        [propget] HRESULT PenParameters([out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputPenParameters* value);
                        [propput] HRESULT PenParameters([in] Windows.UI.Input.Preview.Injection.InjectedInputPenParameters value);
                        [propget] HRESULT Pressure([out] [retval] DOUBLE* value);
                        [propput] HRESULT Pressure([in] DOUBLE value);
                        [propget] HRESULT Rotation([out] [retval] DOUBLE* value);
                        [propput] HRESULT Rotation([in] DOUBLE value);
                        [propget] HRESULT TiltX([out] [retval] INT32* value);
                        [propput] HRESULT TiltX([in] INT32 value);
                        [propget] HRESULT TiltY([out] [retval] INT32* value);
                        [propput] HRESULT TiltY([in] INT32 value);
                    }

                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputTouchInfo)]
                    [uuid(224FD1DF-43E8-5EF5-510A-69CA8C9B4C28)]
                    [version(0x0A000000)]
                    interface IInjectedInputTouchInfo : IInspectable
                    {
                        [propget] HRESULT Contact([out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputRectangle* value);
                        [propput] HRESULT Contact([in] Windows.UI.Input.Preview.Injection.InjectedInputRectangle value);
                        [propget] HRESULT Orientation([out] [retval] INT32* value);
                        [propput] HRESULT Orientation([in] INT32 value);
                        [propget] HRESULT PointerInfo([out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputPointerInfo* value);
                        [propput] HRESULT PointerInfo([in] Windows.UI.Input.Preview.Injection.InjectedInputPointerInfo value);
                        [propget] HRESULT Pressure([out] [retval] DOUBLE* value);
                        [propput] HRESULT Pressure([in] DOUBLE value);
                        [propget] HRESULT TouchParameters([out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputTouchParameters* value);
                        [propput] HRESULT TouchParameters([in] Windows.UI.Input.Preview.Injection.InjectedInputTouchParameters value);
                    }

                    [exclusiveto(Windows.UI.Input.Preview.Injection.InputInjector)]
                    [uuid(8EC26F84-0B02-4BD2-AD7A-3D4658BE3E18)]
                    [version(0x0A000000)]
                    interface IInputInjector : IInspectable
                    {
                        HRESULT InjectKeyboardInput([in] Windows.Foundation.Collections.IIterable<Windows.UI.Input.Preview.Injection.InjectedInputKeyboardInfo*>* input);
                        HRESULT InjectMouseInput([in] Windows.Foundation.Collections.IIterable<Windows.UI.Input.Preview.Injection.InjectedInputMouseInfo*>* input);
                        HRESULT InitializeTouchInjection([in] Windows.UI.Input.Preview.Injection.InjectedInputVisualizationMode visualMode);
                        HRESULT InjectTouchInput([in] Windows.Foundation.Collections.IIterable<Windows.UI.Input.Preview.Injection.InjectedInputTouchInfo*>* input);
                        HRESULT UninitializeTouchInjection();
                        HRESULT InitializePenInjection([in] Windows.UI.Input.Preview.Injection.InjectedInputVisualizationMode visualMode);
                        HRESULT InjectPenInput([in] Windows.UI.Input.Preview.Injection.InjectedInputPenInfo* input);
                        HRESULT UninitializePenInjection();
                        HRESULT InjectShortcut([in] Windows.UI.Input.Preview.Injection.InjectedInputShortcut shortcut);
                    }

                    [exclusiveto(Windows.UI.Input.Preview.Injection.InputInjector)]
                    [uuid(DEAE6943-7402-4141-A5C6-0C01AA57B16A)]
                    [version(0x0A000000)]
                    interface IInputInjectorStatics : IInspectable
                    {
                        HRESULT TryCreate([out] [retval] Windows.UI.Input.Preview.Injection.InputInjector** instance);
                    }

                    [version(0x0A000000)]
                    runtimeclass InjectedInputKeyboardInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputKeyboardInfo;
                    }

                    [version(0x0A000000)]
                    runtimeclass InjectedInputMouseInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputMouseInfo;
                    }

                    [version(0x0A000000)]
                    runtimeclass InjectedInputPenInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputPenInfo;
                    }

                    [version(0x0A000000)]
                    runtimeclass InjectedInputTouchInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputTouchInfo;
                    }

                    [version(0x0A000000)]
                    runtimeclass InputInjector
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInputInjector;
                    }
                }
            }
        }
    }
}
