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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.Gaming.Input.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Gaming
    {
        namespace Input
        {
            typedef enum GamepadButtons GamepadButtons;

            typedef struct GamepadReading GamepadReading;
        }
    }
}
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 IInjectedInputGamepadInfo;

                    interface IInjectedInputGamepadInfoFactory;

                    interface IInjectedInputKeyboardInfo;

                    interface IInjectedInputMouseInfo;

                    interface IInjectedInputPenInfo;

                    interface IInjectedInputTouchInfo;

                    interface IInputInjector;

                    interface IInputInjector2;

                    interface IInputInjectorStatics;

                    interface IInputInjectorStatics2;

                    runtimeclass InjectedInputGamepadInfo;

                    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
                {
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    enum InjectedInputButtonChangeKind
                    {
                        None             = 0,
                        FirstButtonDown  = 1,
                        FirstButtonUp    = 2,
                        SecondButtonDown = 3,
                        SecondButtonUp   = 4,
                        ThirdButtonDown  = 5,
                        ThirdButtonUp    = 6,
                        FourthButtonDown = 7,
                        FourthButtonUp   = 8,
                        FifthButtonDown  = 9,
                        FifthButtonUp    = 10
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [flags]
                    enum InjectedInputKeyOptions
                    {
                        None        = 0x0,
                        ExtendedKey = 0x1,
                        KeyUp       = 0x2,
                        ScanCode    = 0x8,
                        Unicode     = 0x4
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [flags]
                    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
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [flags]
                    enum InjectedInputPenButtons
                    {
                        None     = 0x0,
                        Barrel   = 0x1,
                        Inverted = 0x2,
                        Eraser   = 0x4
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [flags]
                    enum InjectedInputPenParameters
                    {
                        None     = 0x0,
                        Pressure = 0x1,
                        Rotation = 0x2,
                        TiltX    = 0x4,
                        TiltY    = 0x8
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [flags]
                    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
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    enum InjectedInputShortcut
                    {
                        Back   = 0,
                        Start  = 1,
                        Search = 2
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [flags]
                    enum InjectedInputTouchParameters
                    {
                        None        = 0x0,
                        Contact     = 0x1,
                        Orientation = 0x2,
                        Pressure    = 0x4
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    enum InjectedInputVisualizationMode
                    {
                        None     = 0,
                        Default  = 1,
                        Indirect = 2
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    struct InjectedInputPoint
                    {
                        INT32 PositionX;
                        INT32 PositionY;
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    struct InjectedInputPointerInfo
                    {
                        UINT32 PointerId;
                        Windows.UI.Input.Preview.Injection.InjectedInputPointerOptions PointerOptions;
                        Windows.UI.Input.Preview.Injection.InjectedInputPoint PixelLocation;
                        UINT32 TimeOffsetInMilliseconds;
                        UINT64 PerformanceCount;
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    struct InjectedInputRectangle
                    {
                        INT32 Left;
                        INT32 Top;
                        INT32 Bottom;
                        INT32 Right;
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputGamepadInfo)]
                    [uuid(20AE9A3F-DF11-4572-A9AB-D75B8A5E48AD)]
                    interface IInjectedInputGamepadInfo : IInspectable
                    {
                        [propget] HRESULT Buttons([out] [retval] Windows.Gaming.Input.GamepadButtons* value);
                        [propput] HRESULT Buttons([in] Windows.Gaming.Input.GamepadButtons value);
                        [propget] HRESULT LeftThumbstickX([out] [retval] DOUBLE* value);
                        [propput] HRESULT LeftThumbstickX([in] DOUBLE value);
                        [propget] HRESULT LeftThumbstickY([out] [retval] DOUBLE* value);
                        [propput] HRESULT LeftThumbstickY([in] DOUBLE value);
                        [propget] HRESULT LeftTrigger([out] [retval] DOUBLE* value);
                        [propput] HRESULT LeftTrigger([in] DOUBLE value);
                        [propget] HRESULT RightThumbstickX([out] [retval] DOUBLE* value);
                        [propput] HRESULT RightThumbstickX([in] DOUBLE value);
                        [propget] HRESULT RightThumbstickY([out] [retval] DOUBLE* value);
                        [propput] HRESULT RightThumbstickY([in] DOUBLE value);
                        [propget] HRESULT RightTrigger([out] [retval] DOUBLE* value);
                        [propput] HRESULT RightTrigger([in] DOUBLE value);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputGamepadInfo)]
                    [uuid(59596876-6C39-4EC4-8B2A-29EF7DE18ACA)]
                    interface IInjectedInputGamepadInfoFactory : IInspectable
                    {
                        [overload("CreateInstance")] HRESULT CreateInstanceFromGamepadReading([in] Windows.Gaming.Input.GamepadReading reading, [out] [retval] Windows.UI.Input.Preview.Injection.InjectedInputGamepadInfo** value);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputKeyboardInfo)]
                    [uuid(4B46D140-2B6A-5FFA-7EAE-BD077B052ACD)]
                    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);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputMouseInfo)]
                    [uuid(96F56E6B-E47A-5CF4-418D-8A5FB9670C7D)]
                    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);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputPenInfo)]
                    [uuid(6B40AD03-CA1E-5527-7E02-2828540BB1D4)]
                    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);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InjectedInputTouchInfo)]
                    [uuid(224FD1DF-43E8-5EF5-510A-69CA8C9B4C28)]
                    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);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InputInjector)]
                    [uuid(8EC26F84-0B02-4BD2-AD7A-3D4658BE3E18)]
                    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);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InputInjector)]
                    [uuid(8E7A905D-1453-43A7-9BCB-06D6D7B305F7)]
                    interface IInputInjector2 : IInspectable
                        requires
                            Windows.UI.Input.Preview.Injection.IInputInjector
                    {
                        HRESULT InitializeGamepadInjection();
                        HRESULT InjectGamepadInput([in] Windows.UI.Input.Preview.Injection.InjectedInputGamepadInfo* input);
                        HRESULT UninitializeGamepadInjection();
                    }

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

                    [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                    [exclusiveto(Windows.UI.Input.Preview.Injection.InputInjector)]
                    [uuid(A4DB38FB-DD8C-414F-95EA-F87EF4C0AE6C)]
                    interface IInputInjectorStatics2 : IInspectable
                        requires
                            Windows.UI.Input.Preview.Injection.IInputInjectorStatics
                    {
                        HRESULT TryCreateForAppBroadcastOnly([out] [retval] Windows.UI.Input.Preview.Injection.InputInjector** instance);
                    }

                    [activatable(Windows.Foundation.UniversalApiContract, 5.0)]
                    [activatable(Windows.UI.Input.Preview.Injection.IInjectedInputGamepadInfoFactory, Windows.Foundation.UniversalApiContract, 5.0)]
                    [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                    runtimeclass InjectedInputGamepadInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputGamepadInfo;
                    }

                    [activatable(Windows.Foundation.UniversalApiContract, 3.0)]
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    runtimeclass InjectedInputKeyboardInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputKeyboardInfo;
                    }

                    [activatable(Windows.Foundation.UniversalApiContract, 3.0)]
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    runtimeclass InjectedInputMouseInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputMouseInfo;
                    }

                    [activatable(Windows.Foundation.UniversalApiContract, 3.0)]
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    runtimeclass InjectedInputPenInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputPenInfo;
                    }

                    [activatable(Windows.Foundation.UniversalApiContract, 3.0)]
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    runtimeclass InjectedInputTouchInfo
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInjectedInputTouchInfo;
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [static(Windows.UI.Input.Preview.Injection.IInputInjectorStatics, Windows.Foundation.UniversalApiContract, 3.0)]
                    [static(Windows.UI.Input.Preview.Injection.IInputInjectorStatics2, Windows.Foundation.UniversalApiContract, 5.0)]
                    runtimeclass InputInjector
                    {
                        [default] interface Windows.UI.Input.Preview.Injection.IInputInjector;
                        [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.UI.Input.Preview.Injection.IInputInjector2;
                    }
                }
            }
        }
    }
}
