/*
 * Copyright 2012 Jacek Caban for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#define DO_NO_IMPORTS
import "uiautomationcore.idl";

cpp_quote( "#ifndef _INC_UIAUTOMATIONCOREAPI" )

enum TreeScope {
    TreeScope_Element     = 0x01,
    TreeScope_Children    = 0x02,
    TreeScope_Descendants = 0x04,
    TreeScope_Parent      = 0x08,
    TreeScope_Ancestors   = 0x10,
    TreeScope_SubTree     = TreeScope_Element | TreeScope_Children | TreeScope_Descendants,
};

enum PropertyConditionFlags {
    PropertyConditionFlags_None       = 0x00,
    PropertyConditionFlags_IgnoreCase = 0x01,
};

enum AutomationElementMode {
    AutomationElementMode_None = 0x00,
    AutomationElementMode_Full = 0x01,
};

enum TreeTraversalOptions {
    TreeTraversalOptions_Default          = 0x00,
    TreeTraversalOptions_PostOrder        = 0x01,
    TreeTraversalOptions_LastToFirstOrder = 0x02,
};

enum ConnectionRecoveryBehaviorOptions {
    ConnectionRecoveryBehaviorOptions_Disabled = 0x00,
    ConnectionRecoveryBehaviorOptions_Enabled  = 0x01,
};

enum CoalesceEventsOptions {
    CoalesceEventsOptions_Disabled = 0x00,
    CoalesceEventsOptions_Enabled  = 0x01,
};

cpp_quote( "#endif" )

struct ExtendedProperty
{
    BSTR PropertyName;
    BSTR PropertyValue;
};

typedef void * UIA_HWND;

[
    uuid(944de083-8fb8-45cf-bcb7-c477acb2f897),
    lcid(0),
    version(1.0)
]
library UIAutomationClient {
    importlib ("stdole2.tlb");

    /* FIXME: Uncomment when properly supported in widl
    [dllname("<no entry points>")]
    module UIA_PatternIds
    {
    */
        const long UIA_InvokePatternId         = 10000;
        const long UIA_SelectionPatternId      = 10001;
        const long UIA_ValuePatternId          = 10002;
        const long UIA_RangeValuePatternId     = 10003;
        const long UIA_ScrollPatternId         = 10004;
        const long UIA_ExpandCollapsePatternId = 10005;
        const long UIA_GridPatternId           = 10006;
        const long UIA_GridItemPatternId       = 10007;
        const long UIA_MultipleViewPatternId   = 10008;
        const long UIA_WindowPatternId         = 10009;
        const long UIA_SelectionItemPatternId  = 10010;
        const long UIA_DockPatternId           = 10011;
        const long UIA_TablePatternId          = 10012;
        const long UIA_TableItemPatternId      = 10013;
        const long UIA_TextPatternId           = 10014;
        const long UIA_TogglePatternId         = 10015;
        const long UIA_TransformPatternId      = 10016;
        const long UIA_ScrollItemPatternId     = 10017;
        const long UIA_LegacyIAccessiblePatternId = 10018;
        const long UIA_ItemContainerPatternId     = 10019;
        const long UIA_VirtualizedItemPatternId   = 10020;
        const long UIA_SynchronizedInputPatternId = 10021;
        const long UIA_ObjectModelPatternId = 10022;
        const long UIA_AnnotationPatternId  = 10023;
        const long UIA_TextPattern2Id       = 10024;
        const long UIA_StylesPatternId      = 10025;
        const long UIA_SpreadsheetPatternId = 10026;
        const long UIA_SpreadsheetItemPatternId  = 10027;
        const long UIA_TransformPattern2Id       = 10028;
        const long UIA_TextChildPatternId        = 10029;
        const long UIA_DragPatternId             = 10030;
        const long UIA_DropTargetPatternId       = 10031;
        const long UIA_TextEditPatternId         = 10032;
        const long UIA_CustomNavigationPatternId = 10033;
    /*
    }
    */

    /* FIXME: Uncomment when properly supported in widl
    [dllname("<no entry points>")]
    module UIA_EventIds
    {
    */
        const long UIA_ToolTipOpenedEventId = 20000;
        const long UIA_ToolTipClosedEventId = 20001;
        const long UIA_StructureChangedEventId = 20002;
        const long UIA_MenuOpenedEventId = 20003;
        const long UIA_AutomationPropertyChangedEventId = 20004;
        const long UIA_AutomationFocusChangedEventId = 20005;
        const long UIA_AsyncContentLoadedEventId = 20006;
        const long UIA_MenuClosedEventId = 20007;
        const long UIA_LayoutInvalidatedEventId = 20008;
        const long UIA_Invoke_InvokedEventId = 20009;
        const long UIA_SelectionItem_ElementAddedToSelectionEventId = 20010;
        const long UIA_SelectionItem_ElementRemovedFromSelectionEventId = 20011;
        const long UIA_SelectionItem_ElementSelectedEventId= 20012;
        const long UIA_Selection_InvalidatedEventId = 20013;
        const long UIA_Text_TextSelectionChangedEventId = 20014;
        const long UIA_Text_TextChangedEventId = 20015;
        const long UIA_Window_WindowOpenedEventId = 20016;
        const long UIA_Window_WindowClosedEventId = 20017;
        const long UIA_MenuModeStartEventId = 20018;
        const long UIA_MenuModeEndEventId = 20019;
        const long UIA_InputReachedTargetEventId = 20020;
        const long UIA_InputReachedOtherElementEventId = 20021;
        const long UIA_InputDiscardedEventId = 20022;
        const long UIA_SystemAlertEventId = 20023;
        const long UIA_LiveRegionChangedEventId = 20024;
        const long UIA_HostedFragmentRootsInvalidatedEventId = 20025;
        const long UIA_Drag_DragStartEventId = 20026;
        const long UIA_Drag_DragCancelEventId = 20027;
        const long UIA_Drag_DragCompleteEventId = 20028;
        const long UIA_DropTarget_DragEnterEventId = 20029;
        const long UIA_DropTarget_DragLeaveEventId = 20030;
        const long UIA_DropTarget_DroppedEventId = 20031;
        const long UIA_TextEdit_TextChangedEventId = 20032;
        const long UIA_TextEdit_ConversionTargetChangedEventId = 20033;
    /*
    };
    */

    /* FIXME: Uncomment when properly supported in widl
    [dllname("<no entry points>")]
    module UIA_PropertyIds
    {
    */
        const long UIA_RuntimeIdPropertyId              = 30000;
        const long UIA_BoundingRectanglePropertyId      = 30001;
        const long UIA_ProcessIdPropertyId              = 30002;
        const long UIA_ControlTypePropertyId            = 30003;
        const long UIA_LocalizedControlTypePropertyId   = 30004;
        const long UIA_NamePropertyId                   = 30005;
        const long UIA_AcceleratorKeyPropertyId         = 30006;
        const long UIA_AccessKeyPropertyId              = 30007;
        const long UIA_HasKeyboardFocusPropertyId       = 30008;
        const long UIA_IsKeyboardFocusablePropertyId    = 30009;
        const long UIA_IsEnabledPropertyId              = 30010;
        const long UIA_AutomationIdPropertyId           = 30011;
        const long UIA_ClassNamePropertyId              = 30012;
        const long UIA_HelpTextPropertyId               = 30013;
        const long UIA_ClickablePointPropertyId         = 30014;
        const long UIA_CulturePropertyId                = 30015;
        const long UIA_IsControlElementPropertyId       = 30016;
        const long UIA_IsContentElementPropertyId       = 30017;
        const long UIA_LabeledByPropertyId              = 30018;
        const long UIA_IsPasswordPropertyId             = 30019;
        const long UIA_NativeWindowHandlePropertyId     = 30020;
        const long UIA_ItemTypePropertyId               = 30021;
        const long UIA_IsOffscreenPropertyId            = 30022;
        const long UIA_OrientationPropertyId            = 30023;
        const long UIA_FrameworkIdPropertyId            = 30024;
        const long UIA_IsRequiredForFormPropertyId      = 30025;
        const long UIA_ItemStatusPropertyId             = 30026;
        const long UIA_IsDockPatternAvailablePropertyId = 30027;
        const long UIA_IsExpandCollapsePatternAvailablePropertyId = 30028;
        const long UIA_IsGridItemPatternAvailablePropertyId       = 30029;
        const long UIA_IsGridPatternAvailablePropertyId           = 30030;
        const long UIA_IsInvokePatternAvailablePropertyId         = 30031;
        const long UIA_IsMultipleViewPatternAvailablePropertyId   = 30032;
        const long UIA_IsRangeValuePatternAvailablePropertyId     = 30033;
        const long UIA_IsScrollPatternAvailablePropertyId         = 30034;
        const long UIA_IsScrollItemPatternAvailablePropertyId     = 30035;
        const long UIA_IsSelectionItemPatternAvailablePropertyId  = 30036;
        const long UIA_IsSelectionPatternAvailablePropertyId      = 30037;
        const long UIA_IsTablePatternAvailablePropertyId          = 30038;
        const long UIA_IsTableItemPatternAvailablePropertyId      = 30039;
        const long UIA_IsTextPatternAvailablePropertyId           = 30040;
        const long UIA_IsTogglePatternAvailablePropertyId         = 30041;
        const long UIA_IsTransformPatternAvailablePropertyId      = 30042;
        const long UIA_IsValuePatternAvailablePropertyId          = 30043;
        const long UIA_IsWindowPatternAvailablePropertyId         = 30044;
        const long UIA_ValueValuePropertyId             = 30045;
        const long UIA_ValueIsReadOnlyPropertyId        = 30046;
        const long UIA_RangeValueValuePropertyId        = 30047;
        const long UIA_RangeValueIsReadOnlyPropertyId   = 30048;
        const long UIA_RangeValueMinimumPropertyId      = 30049;
        const long UIA_RangeValueMaximumPropertyId      = 30050;
        const long UIA_RangeValueLargeChangePropertyId  = 30051;
        const long UIA_RangeValueSmallChangePropertyId  = 30052;
        const long UIA_ScrollHorizontalScrollPercentPropertyId    = 30053;
        const long UIA_ScrollHorizontalViewSizePropertyId         = 30054;
        const long UIA_ScrollVerticalScrollPercentPropertyId      = 30055;
        const long UIA_ScrollVerticalViewSizePropertyId           = 30056;
        const long UIA_ScrollHorizontallyScrollablePropertyId     = 30057;
        const long UIA_ScrollVerticallyScrollablePropertyId       = 30058;
        const long UIA_SelectionSelectionPropertyId               = 30059;
        const long UIA_SelectionCanSelectMultiplePropertyId       = 30060;
        const long UIA_SelectionIsSelectionRequiredPropertyId     = 30061;
        const long UIA_GridRowCountPropertyId           = 30062;
        const long UIA_GridColumnCountPropertyId        = 30063;
        const long UIA_GridItemRowPropertyId            = 30064;
        const long UIA_GridItemColumnPropertyId         = 30065;
        const long UIA_GridItemRowSpanPropertyId        = 30066;
        const long UIA_GridItemColumnSpanPropertyId     = 30067;
        const long UIA_GridItemContainingGridPropertyId = 30068;
        const long UIA_DockDockPositionPropertyId       = 30069;
        const long UIA_ExpandCollapseExpandCollapseStatePropertyId = 30070;
        const long UIA_MultipleViewCurrentViewPropertyId           = 30071;
        const long UIA_MultipleViewSupportedViewsPropertyId        = 30072;
        const long UIA_WindowCanMaximizePropertyId                 = 30073;
        const long UIA_WindowCanMinimizePropertyId                 = 30074;
        const long UIA_WindowWindowVisualStatePropertyId           = 30075;
        const long UIA_WindowWindowInteractionStatePropertyId      = 30076;
        const long UIA_WindowIsModalPropertyId                     = 30077;
        const long UIA_WindowIsTopmostPropertyId                   = 30078;
        const long UIA_SelectionItemIsSelectedPropertyId           = 30079;
        const long UIA_SelectionItemSelectionContainerPropertyId   = 30080;
        const long UIA_TableRowHeadersPropertyId                   = 30081;
        const long UIA_TableColumnHeadersPropertyId                = 30082;
        const long UIA_TableRowOrColumnMajorPropertyId             = 30083;
        const long UIA_TableItemRowHeaderItemsPropertyId           = 30084;
        const long UIA_TableItemColumnHeaderItemsPropertyId        = 30085;
        const long UIA_ToggleToggleStatePropertyId                 = 30086;
        const long UIA_TransformCanMovePropertyId                  = 30087;
        const long UIA_TransformCanResizePropertyId                = 30088;
        const long UIA_TransformCanRotatePropertyId                = 30089;
        const long UIA_IsLegacyIAccessiblePatternAvailablePropertyId  = 30090;
        const long UIA_LegacyIAccessibleChildIdPropertyId          = 30091;
        const long UIA_LegacyIAccessibleNamePropertyId             = 30092;
        const long UIA_LegacyIAccessibleValuePropertyId            = 30093;
        const long UIA_LegacyIAccessibleDescriptionPropertyId      = 30094;
        const long UIA_LegacyIAccessibleRolePropertyId             = 30095;
        const long UIA_LegacyIAccessibleStatePropertyId            = 30096;
        const long UIA_LegacyIAccessibleHelpPropertyId             = 30097;
        const long UIA_LegacyIAccessibleKeyboardShortcutPropertyId = 30098;
        const long UIA_LegacyIAccessibleSelectionPropertyId        = 30099;
        const long UIA_LegacyIAccessibleDefaultActionPropertyId    = 30100;
        const long UIA_AriaRolePropertyId                          = 30101;
        const long UIA_AriaPropertiesPropertyId                    = 30102;
        const long UIA_IsDataValidForFormPropertyId                = 30103;
        const long UIA_ControllerForPropertyId                     = 30104;
        const long UIA_DescribedByPropertyId                       = 30105;
        const long UIA_FlowsToPropertyId                           = 30106;
        const long UIA_ProviderDescriptionPropertyId               = 30107;
        const long UIA_IsItemContainerPatternAvailablePropertyId   = 30108;
        const long UIA_IsVirtualizedItemPatternAvailablePropertyId = 30109;
        const long UIA_IsSynchronizedInputPatternAvailablePropertyId  = 30110;
        const long UIA_OptimizeForVisualContentPropertyId      = 30111;
        const long UIA_IsObjectModelPatternAvailablePropertyId = 30112;
        const long UIA_AnnotationAnnotationTypeIdPropertyId    = 30113;
        const long UIA_AnnotationAnnotationTypeNamePropertyId  = 30114;
        const long UIA_AnnotationAuthorPropertyId              = 30115;
        const long UIA_AnnotationDateTimePropertyId            = 30116;
        const long UIA_AnnotationTargetPropertyId              = 30117;
        const long UIA_IsAnnotationPatternAvailablePropertyId  = 30118;
        const long UIA_IsTextPattern2AvailablePropertyId       = 30119;
        const long UIA_StylesStyleIdPropertyId                 = 30120;
        const long UIA_StylesStyleNamePropertyId               = 30121;
        const long UIA_StylesFillColorPropertyId               = 30122;
        const long UIA_StylesFillPatternStylePropertyId        = 30123;
        const long UIA_StylesShapePropertyId                   = 30124;
        const long UIA_StylesFillPatternColorPropertyId        = 30125;
        const long UIA_StylesExtendedPropertiesPropertyId      = 30126;
        const long UIA_IsStylesPatternAvailablePropertyId      = 30127;
        const long UIA_IsSpreadsheetPatternAvailablePropertyId     = 30128;
        const long UIA_SpreadsheetItemFormulaPropertyId            = 30129;
        const long UIA_SpreadsheetItemAnnotationObjectsPropertyId  = 30130;
        const long UIA_SpreadsheetItemAnnotationTypesPropertyId    = 30131;
        const long UIA_IsSpreadsheetItemPatternAvailablePropertyId = 30132;
        const long UIA_Transform2CanZoomPropertyId                 = 30133;
        const long UIA_IsTransformPattern2AvailablePropertyId      = 30134;
        const long UIA_LiveSettingPropertyId                       = 30135;
        const long UIA_IsTextChildPatternAvailablePropertyId       = 30136;
        const long UIA_IsDragPatternAvailablePropertyId            = 30137;
        const long UIA_DragIsGrabbedPropertyId                     = 30138;
        const long UIA_DragDropEffectPropertyId                    = 30139;
        const long UIA_DragDropEffectsPropertyId                   = 30140;
        const long UIA_IsDropTargetPatternAvailablePropertyId      = 30141;
        const long UIA_DropTargetDropTargetEffectPropertyId        = 30142;
        const long UIA_DropTargetDropTargetEffectsPropertyId       = 30143;
        const long UIA_DragGrabbedItemsPropertyId                  = 30144;
        const long UIA_Transform2ZoomLevelPropertyId               = 30145;
        const long UIA_Transform2ZoomMinimumPropertyId             = 30146;
        const long UIA_Transform2ZoomMaximumPropertyId             = 30147;
        const long UIA_FlowsFromPropertyId                         = 30148;
        const long UIA_IsTextEditPatternAvailablePropertyId        = 30149;
        const long UIA_IsPeripheralPropertyId                      = 30150;
        const long UIA_IsCustomNavigationPatternAvailablePropertyId = 30151;
        const long UIA_PositionInSetPropertyId         = 30152;
        const long UIA_SizeOfSetPropertyId             = 30153;
        const long UIA_LevelPropertyId                 = 30154;
        const long UIA_AnnotationTypesPropertyId       = 30155;
        const long UIA_AnnotationObjectsPropertyId     = 30156;
        const long UIA_LandmarkTypePropertyId          = 30157;
        const long UIA_LocalizedLandmarkTypePropertyId = 30158;
        const long UIA_FullDescriptionPropertyId       = 30159;
        const long UIA_FillColorPropertyId             = 30160;
        const long UIA_OutlineColorPropertyId          = 30161;
        const long UIA_FillTypePropertyId              = 30162;
        const long UIA_VisualEffectsPropertyId         = 30163;
        const long UIA_OutlineThicknessPropertyId      = 30164;
        const long UIA_CenterPointPropertyId           = 30165;
        const long UIA_RotationPropertyId              = 30166;
        const long UIA_SizePropertyId                  = 30167;
        const long UIA_IsSelectionPattern2AvailablePropertyId  = 30168;
        const long UIA_Selection2FirstSelectedItemPropertyId   = 30169;
        const long UIA_Selection2LastSelectedItemPropertyId    = 30170;
        const long UIA_Selection2CurrentSelectedItemPropertyId = 30171;
        const long UIA_Selection2ItemCountPropertyId           = 30172;
        const long UIA_HeadingLevelPropertyId                  = 30173;
        const long UIA_IsDialogPropertyId                      = 30174;
    /*
    }
    */
    /* FIXME: Uncomment when properly supported in widl
    [dllname("<no entry points>")]
    module UIA_ControlTypeIds
    {
    */
        const long UIA_ButtonControlTypeId = 50000;
        const long UIA_CalendarControlTypeId = 50001;
        const long UIA_CheckBoxControlTypeId = 50002;
        const long UIA_ComboBoxControlTypeId = 50003;
        const long UIA_EditControlTypeId = 50004;
        const long UIA_HyperlinkControlTypeId = 50005;
        const long UIA_ImageControlTypeId = 50006;
        const long UIA_ListItemControlTypeId = 50007;
        const long UIA_ListControlTypeId = 50008;
        const long UIA_MenuControlTypeId = 50009;
        const long UIA_MenuBarControlTypeId = 50010;
        const long UIA_MenuItemControlTypeId = 50011;
        const long UIA_ProgressBarControlTypeId = 50012;
        const long UIA_RadioButtonControlTypeId = 50013;
        const long UIA_ScrollBarControlTypeId = 50014;
        const long UIA_SliderControlTypeId = 50015;
        const long UIA_SpinnerControlTypeId = 50016;
        const long UIA_StatusBarControlTypeId = 50017;
        const long UIA_TabControlTypeId = 50018;
        const long UIA_TabItemControlTypeId = 50019;
        const long UIA_TextControlTypeId = 50020;
        const long UIA_ToolBarControlTypeId = 50021;
        const long UIA_ToolTipControlTypeId = 50022;
        const long UIA_TreeControlTypeId = 50023;
        const long UIA_TreeItemControlTypeId = 50024;
        const long UIA_CustomControlTypeId = 50025;
        const long UIA_GroupControlTypeId = 50026;
        const long UIA_ThumbControlTypeId = 50027;
        const long UIA_DataGridControlTypeId = 50028;
        const long UIA_DataItemControlTypeId = 50029;
        const long UIA_DocumentControlTypeId = 50030;
        const long UIA_SplitButtonControlTypeId = 50031;
        const long UIA_WindowControlTypeId = 50032;
        const long UIA_PaneControlTypeId = 50033;
        const long UIA_HeaderControlTypeId = 50034;
        const long UIA_HeaderItemControlTypeId = 50035;
        const long UIA_TableControlTypeId = 50036;
        const long UIA_TitleBarControlTypeId = 50037;
        const long UIA_SeparatorControlTypeId = 50038;
        const long UIA_SemanticZoomControlTypeId = 50039;
        const long UIA_AppBarControlTypeId = 50040;
    /*
    };
    */

    interface IUIAutomationElement;
    interface IUIAutomationElementArray;

    [
        object,
        uuid(352ffba8-0973-437c-a61f-f64cafd81df9),
        pointer_default(unique)
    ]
    interface IUIAutomationCondition : IUnknown
    {
    }

    [
        object,
        uuid(1b4e1f2e-75eb-4d0b-8952-5a69988e2307),
        pointer_default(unique)
    ]
    interface IUIAutomationBoolCondition : IUIAutomationCondition
    {
        [propget] HRESULT BooleanValue([out, retval] BOOL *boolVal);
    }

    [
        object,
        uuid(99ebf2cb-5578-4267-9ad4-afd6ea77e94b),
        pointer_default(unique)
    ]
    interface IUIAutomationPropertyCondition : IUIAutomationCondition
    {
        [propget] HRESULT PropertyId([out, retval] PROPERTYID *propertyId);
        [propget] HRESULT PropertyValue([out, retval] VARIANT *propertyValue);
        [propget] HRESULT PropertyConditionFlags([out, retval] enum PropertyConditionFlags *flags);
    }

    [
        object,
        uuid(a7d0af36-b912-45fe-9855-091ddc174aec),
        pointer_default(unique)
    ]
    interface IUIAutomationAndCondition : IUIAutomationCondition
    {
        [propget] HRESULT ChildCount([out, retval] int *childCount);

        HRESULT GetChildrenAsNativeArray(
                [out, size_is( ,*childArrayCount)] IUIAutomationCondition ***childArray,
                [out] int *childArrayCount);

        HRESULT GetChildren([out, retval] SAFEARRAY(IUIAutomationCondition) *childArray);
    }

    [
        object,
        uuid(8753f032-3db1-47b5-a1fc-6e34a266c712),
        pointer_default(unique)
    ]
    interface IUIAutomationOrCondition : IUIAutomationCondition
    {
        [propget] HRESULT ChildCount([out, retval] int *childCount);

        HRESULT GetChildrenAsNativeArray(
                [out, size_is( ,*childArrayCount)] IUIAutomationCondition ***childArray,
                [out] int *childArrayCount);

        HRESULT GetChildren([out, retval] SAFEARRAY(IUIAutomationCondition) *childArray);
    }

    [
        object,
        uuid(f528b657-847b-498c-8896-d52b565407a1),
        pointer_default(unique)
    ]
    interface IUIAutomationNotCondition : IUIAutomationCondition
    {
        HRESULT GetChild([out, retval] IUIAutomationCondition **condition);
    }

    [
        object,
        uuid(b32a92b5-bc25-4078-9c08-d7ee95c48e03),
        pointer_default(unique)
    ]
    interface IUIAutomationCacheRequest : IUnknown
    {
        HRESULT AddProperty([in] PROPERTYID propertyId);
        HRESULT AddPattern([in] PATTERNID patternId);
        HRESULT Clone([out, retval] IUIAutomationCacheRequest **clonedRequest);

        [propget] HRESULT TreeScope([out, retval] enum TreeScope *scope);
        [propput] HRESULT TreeScope([in] enum TreeScope scope);
        [propget] HRESULT TreeFilter([out, retval] IUIAutomationCondition **filter);
        [propput] HRESULT TreeFilter([in] IUIAutomationCondition *filter);
        [propget] HRESULT AutomationElementMode([out, retval] enum AutomationElementMode *mode);
        [propput] HRESULT AutomationElementMode([in] enum AutomationElementMode mode);
    }

    [
        object,
        uuid(4042c624-389c-4afc-a630-9df854a541fc),
        pointer_default(unique)
    ]
    interface IUIAutomationTreeWalker : IUnknown
    {
        HRESULT GetParentElement(
                [in] IUIAutomationElement *element,
                [out, retval] IUIAutomationElement **parent);
        HRESULT GetFirstChildElement(
                [in] IUIAutomationElement *element,
                [out, retval] IUIAutomationElement **first);
        HRESULT GetLastChildElement(
                [in] IUIAutomationElement *element,
                [out, retval] IUIAutomationElement **last);
        HRESULT GetNextSiblingElement(
                [in] IUIAutomationElement *element,
                [out, retval] IUIAutomationElement **next);
        HRESULT GetPreviousSiblingElement(
                [in] IUIAutomationElement *element,
                [out, retval] IUIAutomationElement **previous);
        HRESULT NormalizeElement(
                [in] IUIAutomationElement *element,
                [out, retval] IUIAutomationElement **normalized);

        HRESULT GetParentElementBuildCache(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **parent);
        HRESULT GetFirstChildElementBuildCache(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **first);
        HRESULT GetLastChildElementBuildCache(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **last);
        HRESULT GetNextSiblingElementBuildCache(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **next);
        HRESULT GetPreviousSiblingElementBuildCache(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **previous);
        HRESULT NormalizeElementBuildCache(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **normalized);

        [propget] HRESULT Condition([out, retval] IUIAutomationCondition **condition);
    }

    [
        object,
        uuid(146c3c17-f12e-4e22-8c27-f894b9b79c69),
        pointer_default(unique),
        oleautomation
    ]
    interface IUIAutomationEventHandler : IUnknown
    {
        HRESULT HandleAutomationEvent(
                [in] IUIAutomationElement *sender,
                [in] EVENTID eventId);
    }

    [
        object,
        uuid(40cd37d4-c756-4b0c-8c6f-bddfeeb13b50),
        pointer_default(unique),
        oleautomation
    ]
    interface IUIAutomationPropertyChangedEventHandler : IUnknown
    {
        HRESULT HandlePropertyChangedEvent(
                [in] IUIAutomationElement *sender,
                [in] PROPERTYID propertyId,
                [in] VARIANT newValue);
    }

    [
        object,
        uuid(e81d1b4e-11c5-42f8-9754-e7036c79f054),
        pointer_default(unique),
        oleautomation
    ]
    interface IUIAutomationStructureChangedEventHandler : IUnknown
    {
        HRESULT HandleStructureChangedEvent(
                [in] IUIAutomationElement *sender,
                [in] enum StructureChangeType changeType,
                [in] SAFEARRAY(int) runtimeId);
    }

    [
        object,
        uuid(c270f6b5-5c69-4290-9745-7a7f97169468),
        pointer_default(unique),
        oleautomation
    ]
    interface IUIAutomationFocusChangedEventHandler : IUnknown
    {
        HRESULT HandleFocusChangedEvent([in] IUIAutomationElement *sender);
    }

    [
        object,
        uuid(92faa680-e704-4156-931a-e32d5bb38f3f),
        pointer_default(unique),
        oleautomation
    ]
    interface IUIAutomationTextEditTextChangedEventHandler : IUnknown
    {
        HRESULT HandleTextEditTextChangedEvent(
                [in] IUIAutomationElement *sender,
                [in] enum TextEditChangeType textEditChangeType,
                [in] SAFEARRAY(BSTR) eventStrings);
    }

    [
        object,
        uuid(58edca55-2c3e-4980-b1b9-56c17f27a2a0),
        pointer_default(unique),
        oleautomation
    ]
    interface IUIAutomationChangesEventHandler : IUnknown
    {
        HRESULT HandleChangesEvent(
                [in] IUIAutomationElement *sender,
                [in, size_is(changesCount)] struct UiaChangeInfo *uiaChanges,
                [in] int changesCount);
    }

    interface IUIAutomationNotificationEventHandler;

    interface IUIAutomationInvokePattern;
    interface IUIAutomationDockPattern;
    interface IUIAutomationExpandCollapsePattern;
    interface IUIAutomationGridPattern;
    interface IUIAutomationGridItemPattern;
    interface IUIAutomationMultipleViewPattern;
    interface IUIAutomationObjectModelPattern;
    interface IUIAutomationRangeValuePattern;
    interface IUIAutomationScrollPattern;
    interface IUIAutomationScrollItemPattern;
    interface IUIAutomationSelectionPattern;
    interface IUIAutomationSelectionItemPattern;
    interface IUIAutomationSynchronizedInputPattern;
    interface IUIAutomationTablePattern;
    interface IUIAutomationTableItemPattern;
    interface IUIAutomationTogglePattern;
    interface IUIAutomationTransformPattern;

    [
        object,
        uuid(a94cd8b1-0844-4cd6-9d2d-640537ab39e9),
        pointer_default(unique)
    ]
    interface IUIAutomationValuePattern : IUnknown
    {
        HRESULT SetValue([in] BSTR val);

        [propget] HRESULT CurrentValue([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentIsReadOnly([out, retval] BOOL *retVal);
        [propget] HRESULT CachedValue([out, retval] BSTR *retVal);
        [propget] HRESULT CachedIsReadOnly([out, retval] BOOL *retVal);
    }

    [
        object,
        uuid(0faef453-9208-43ef-bbb2-3b485177864f),
        pointer_default(unique)
    ]
    interface IUIAutomationWindowPattern : IUnknown
    {
        HRESULT Close();

        HRESULT WaitForInputIdle(
                [in] int milliseconds,
                [out, retval] BOOL *success);
        HRESULT SetWindowVisualState([in] enum WindowVisualState state);

        [propget] HRESULT CurrentCanMaximize([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentCanMinimize([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentIsModal([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentIsTopmost([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentWindowVisualState([out, retval] enum WindowVisualState *retVal);
        [propget] HRESULT CurrentWindowInteractionState([out, retval] enum WindowInteractionState *retVal);
        [propget] HRESULT CachedCanMaximize([out, retval] BOOL *retVal);
        [propget] HRESULT CachedCanMinimize([out, retval] BOOL *retVal);
        [propget] HRESULT CachedIsModal([out, retval] BOOL *retVal);
        [propget] HRESULT CachedIsTopmost([out, retval] BOOL *retVal);
        [propget] HRESULT CachedWindowVisualState([out, retval] enum WindowVisualState *retVal);
        [propget] HRESULT CachedWindowInteractionState([out, retval] enum WindowInteractionState *retVal);
    }

    interface IUIAutomationTextRange;
    interface IUIAutomationTextRange2;
    interface IUIAutomationTextRangeArray;
    interface IUIAutomationTextPattern;
    interface IUIAutomationTextPattern2;
    interface IUIAutomationTextEditPattern;
    interface IUIAutomationCustomNavigationPattern;
    interface IUIAutomationActiveTextPositionChangedEventHandler;

    [
        object,
        uuid(828055ad-355b-4435-86d5-3b51c14a9b1b),
        pointer_default(unique)
    ]
    interface IUIAutomationLegacyIAccessiblePattern: IUnknown
    {
        HRESULT Select(long flagsSelect);
        HRESULT DoDefaultAction();
        HRESULT SetValue(LPCWSTR szValue);

        [propget] HRESULT CurrentChildId([out, retval] int *pRetVal);
        [propget] HRESULT CurrentName([out, retval] BSTR *pszName);
        [propget] HRESULT CurrentValue([out, retval] BSTR *pszValue);
        [propget] HRESULT CurrentDescription([out, retval] BSTR *pszDescription);
        [propget] HRESULT CurrentRole([out, retval] DWORD *pdwRole);
        [propget] HRESULT CurrentState([out, retval] DWORD *pdwState);
        [propget] HRESULT CurrentHelp([out, retval] BSTR *pszHelp);
        [propget] HRESULT CurrentKeyboardShortcut([out, retval] BSTR *pszKeyboardShortcut);
        HRESULT GetCurrentSelection([out, retval] IUIAutomationElementArray **pvarSelectedChildren);
        [propget] HRESULT CurrentDefaultAction([out, retval] BSTR *pszDefaultAction);

        [propget] HRESULT CachedChildId([out, retval] int *pRetVal);
        [propget] HRESULT CachedName([out, retval] BSTR *pszName);
        [propget] HRESULT CachedValue([out, retval] BSTR *pszValue);
        [propget] HRESULT CachedDescription([out, retval] BSTR *pszDescription);
        [propget] HRESULT CachedRole([out, retval] DWORD *pdwRole);
        [propget] HRESULT CachedState([out, retval] DWORD *pdwState);
        [propget] HRESULT CachedHelp([out, retval] BSTR *pszHelp);
        [propget] HRESULT CachedKeyboardShortcut([out, retval] BSTR *pszKeyboardShortcut);
        HRESULT GetCachedSelection([out, retval] IUIAutomationElementArray **pvarSelectedChildren);
        [propget] HRESULT CachedDefaultAction([out, retval] BSTR *pszDefaultAction);

        HRESULT GetIAccessible([out, retval] IAccessible **ppAccessible);
    };

    interface IUIAutomationItemContainerPattern;
    interface IUIAutomationVirtualizedItemPattern;
    interface IUIAutomationAnnotationPattern;
    interface IUIAutomationStylesPattern;
    interface IUIAutomationSpreadsheetPattern;
    interface IUIAutomationSpreadsheetItemPattern;
    interface IUIAutomationTransformPattern2;
    interface IUIAutomationTextChildPattern;
    interface IUIAutomationDragPattern;
    interface IUIAutomationDropTargetPattern;

    [
        object,
        uuid(d22108aa-8ac5-49a5-837b-37bbb3d7591e),
        pointer_default(unique)
    ]
    interface IUIAutomationElement : IUnknown
    {
        HRESULT SetFocus();
        HRESULT GetRuntimeId([out, retval] SAFEARRAY(int) *runtimeId);

        HRESULT FindFirst(
                [in] enum TreeScope scope,
                [in] IUIAutomationCondition *condition,
                [out, retval] IUIAutomationElement **found);
        HRESULT FindAll(
                [in] enum TreeScope scope,
                [in] IUIAutomationCondition *condition,
                [out, retval] IUIAutomationElementArray **found);

        HRESULT FindFirstBuildCache(
                [in] enum TreeScope scope,
                [in] IUIAutomationCondition *condition,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **found);
        HRESULT FindAllBuildCache(
                [in] enum TreeScope scope,
                [in] IUIAutomationCondition *condition,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElementArray **found);

        HRESULT BuildUpdatedCache(
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **updatedElement);

        HRESULT GetCurrentPropertyValue(
                [in] PROPERTYID propertyId,
                [out, retval] VARIANT *retVal);
        HRESULT GetCurrentPropertyValueEx(
                [in] PROPERTYID propertyId,
                [in] BOOL ignoreDefaultValue,
                [out, retval] VARIANT *retVal);

        HRESULT GetCachedPropertyValue(
                [in] PROPERTYID propertyId,
                [out, retval] VARIANT *retVal);
        HRESULT GetCachedPropertyValueEx(
                [in] PROPERTYID propertyId,
                [in] BOOL ignoreDefaultValue,
                [out, retval] VARIANT *retVal);

        HRESULT GetCurrentPatternAs(
                [in] PATTERNID patternId,
                [in] REFIID riid,
                [out, iid_is(riid), retval] void **patternObject);
        HRESULT GetCachedPatternAs(
                [in] PATTERNID patternId,
                [in] REFIID riid,
                [out, iid_is(riid), retval] void **patternObject);

        HRESULT GetCurrentPattern(
                [in] PATTERNID patternId,
                [out, retval] IUnknown **patternObject);
        HRESULT GetCachedPattern(
                [in] PATTERNID patternId,
                [out, retval] IUnknown **patternObject);

        HRESULT GetCachedParent([out, retval] IUIAutomationElement **parent);
        HRESULT GetCachedChildren([out, retval] IUIAutomationElementArray **children);

        [propget] HRESULT CurrentProcessId([out, retval] int *retVal);
        [propget] HRESULT CurrentControlType([out, retval] CONTROLTYPEID *retVal);
        [propget] HRESULT CurrentLocalizedControlType([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentName([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentAcceleratorKey([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentAccessKey([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentHasKeyboardFocus([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentIsKeyboardFocusable([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentIsEnabled([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentAutomationId([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentClassName([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentHelpText([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentCulture([out, retval] int *retVal);
        [propget] HRESULT CurrentIsControlElement([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentIsContentElement([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentIsPassword([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentNativeWindowHandle([out, retval] UIA_HWND *retVal);
        [propget] HRESULT CurrentItemType([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentIsOffscreen([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentOrientation([out, retval] enum OrientationType *retVal);
        [propget] HRESULT CurrentFrameworkId([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentIsRequiredForForm([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentItemStatus([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentBoundingRectangle([out, retval] RECT *retVal);
        [propget] HRESULT CurrentLabeledBy([out, retval] IUIAutomationElement **retVal);
        [propget] HRESULT CurrentAriaRole([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentAriaProperties([out, retval] BSTR *retVal);
        [propget] HRESULT CurrentIsDataValidForForm([out, retval] BOOL *retVal);
        [propget] HRESULT CurrentControllerFor([out, retval] IUIAutomationElementArray **retVal);
        [propget] HRESULT CurrentDescribedBy([out, retval] IUIAutomationElementArray **retVal);
        [propget] HRESULT CurrentFlowsTo([out, retval] IUIAutomationElementArray **retVal);
        [propget] HRESULT CurrentProviderDescription([out, retval] BSTR *retVal);

        [propget] HRESULT CachedProcessId([out, retval] int *retVal);
        [propget] HRESULT CachedControlType([out, retval] CONTROLTYPEID *retVal);
        [propget] HRESULT CachedLocalizedControlType([out, retval] BSTR *retVal);
        [propget] HRESULT CachedName([out, retval] BSTR *retVal);
        [propget] HRESULT CachedAcceleratorKey([out, retval] BSTR *retVal);
        [propget] HRESULT CachedAccessKey([out, retval] BSTR *retVal);
        [propget] HRESULT CachedHasKeyboardFocus([out, retval] BOOL *retVal);
        [propget] HRESULT CachedIsKeyboardFocusable([out, retval] BOOL *retVal);
        [propget] HRESULT CachedIsEnabled([out, retval] BOOL *retVal);
        [propget] HRESULT CachedAutomationId([out, retval] BSTR *retVal);
        [propget] HRESULT CachedClassName([out, retval] BSTR *retVal);
        [propget] HRESULT CachedHelpText([out, retval] BSTR *retVal);
        [propget] HRESULT CachedCulture([out, retval] int *retVal);
        [propget] HRESULT CachedIsControlElement([out, retval] BOOL *retVal);
        [propget] HRESULT CachedIsContentElement([out, retval] BOOL *retVal);
        [propget] HRESULT CachedIsPassword([out, retval] BOOL *retVal);
        [propget] HRESULT CachedNativeWindowHandle([out, retval] UIA_HWND *retVal);
        [propget] HRESULT CachedItemType([out, retval] BSTR *retVal);
        [propget] HRESULT CachedIsOffscreen([out, retval] BOOL *retVal);
        [propget] HRESULT CachedOrientation([out, retval] enum OrientationType *retVal);
        [propget] HRESULT CachedFrameworkId([out, retval] BSTR *retVal);
        [propget] HRESULT CachedIsRequiredForForm([out, retval] BOOL *retVal);
        [propget] HRESULT CachedItemStatus([out, retval] BSTR *retVal);
        [propget] HRESULT CachedBoundingRectangle([out, retval] RECT *retVal);
        [propget] HRESULT CachedLabeledBy([out, retval] IUIAutomationElement **retVal);
        [propget] HRESULT CachedAriaRole([out, retval] BSTR *retVal);
        [propget] HRESULT CachedAriaProperties([out, retval] BSTR *retVal);
        [propget] HRESULT CachedIsDataValidForForm([out, retval] BOOL *retVal);
        [propget] HRESULT CachedControllerFor([out, retval] IUIAutomationElementArray **retVal);
        [propget] HRESULT CachedDescribedBy([out, retval] IUIAutomationElementArray **retVal);
        [propget] HRESULT CachedFlowsTo([out, retval] IUIAutomationElementArray **retVal);
        [propget] HRESULT CachedProviderDescription([out, retval] BSTR *retVal);

        HRESULT GetClickablePoint(
                [out] POINT *clickable,
                [out, retval] BOOL *gotClickable);
    }

    [
        object,
        uuid(6749c683-f70d-4487-a698-5f79d55290d6),
        pointer_default(unique)
    ]
    interface IUIAutomationElement2 : IUIAutomationElement
    {
        [propget] HRESULT CurrentOptimizeForVisualContent([out, retval] BOOL *retVal);
        [propget] HRESULT CachedOptimizeForVisualContent([out, retval] BOOL *retVal);

        [propget] HRESULT CurrentLiveSetting([out, retval] enum LiveSetting *retVal);
        [propget] HRESULT CachedLiveSetting([out, retval] enum LiveSetting *retVal);

        [propget] HRESULT CurrentFlowsFrom([out, retval] IUIAutomationElementArray **retVal);
        [propget] HRESULT CachedFlowsFrom([out, retval] IUIAutomationElementArray **retVal);
    }

    [
        object,
        uuid(8471df34-aee0-4a01-a7de-7db9af12c296),
        pointer_default(unique)
    ]
    interface IUIAutomationElement3 : IUIAutomationElement2
    {
        HRESULT ShowContextMenu();

        [propget] HRESULT CurrentIsPeripheral([out, retval] BOOL *retVal);
        [propget] HRESULT CachedIsPeripheral([out, retval] BOOL *retVal);
    }

    [
        object,
        uuid(3b6e233c-52fb-4063-a4c9-77c075c2a06b),
        pointer_default(unique)
    ]
    interface IUIAutomationElement4 : IUIAutomationElement3
    {
        [propget] HRESULT CurrentPositionInSet([out, retval] int *retVal);
        [propget] HRESULT CurrentSizeOfSet([out, retval] int *retVal);
        [propget] HRESULT CurrentLevel([out, retval] int *retVal);
        [propget] HRESULT CurrentAnnotationTypes([out, retval] SAFEARRAY(int) *retVal);
        [propget] HRESULT CurrentAnnotationObjects([out, retval] IUIAutomationElementArray **retVal);

        [propget] HRESULT CachedPositionInSet([out, retval] int *retVal);
        [propget] HRESULT CachedSizeOfSet([out, retval] int *retVal);
        [propget] HRESULT CachedLevel([out, retval] int *retVal);
        [propget] HRESULT CachedAnnotationTypes([out, retval] SAFEARRAY(int) *retVal);
        [propget] HRESULT CachedAnnotationObjects([out, retval] IUIAutomationElementArray **retVal);
    }

    [
        object,
        uuid(98141c1d-0d0e-4175-bbe2-6bff455842a7),
        pointer_default(unique)
    ]
    interface IUIAutomationElement5 : IUIAutomationElement4
    {
        [propget] HRESULT CurrentLandmarkType([out, retval] LANDMARKTYPEID *retVal);
        [propget] HRESULT CurrentLocalizedLandmarkType([out, retval] BSTR *retVal);

        [propget] HRESULT CachedLandmarkType([out, retval] LANDMARKTYPEID *retVal);
        [propget] HRESULT CachedLocalizedLandmarkType([out, retval] BSTR *retVal);
    }

    [
        object,
        uuid(4780d450-8bca-4977-afa5-a4a517f555e3),
        pointer_default(unique)
    ]
    interface IUIAutomationElement6 : IUIAutomationElement5
    {
        [propget] HRESULT CurrentFullDescription([out, retval] BSTR *retVal);
        [propget] HRESULT CachedFullDescription([out, retval] BSTR *retVal);
    }

    [
        object,
        uuid(204e8572-cfc3-4c11-b0c8-7da7420750b7),
        pointer_default(unique)
    ]
    interface IUIAutomationElement7 : IUIAutomationElement6
    {
        HRESULT FindFirstWithOptions(
                [in] enum TreeScope scope,
                [in] IUIAutomationCondition *condition,
                [in] enum TreeTraversalOptions traversalOptions,
                [in] IUIAutomationElement *root,
                [out, retval] IUIAutomationElement **found);
        HRESULT FindAllWithOptions(
                [in] enum TreeScope scope,
                [in] IUIAutomationCondition *condition,
                [in] enum TreeTraversalOptions traversalOptions,
                [in] IUIAutomationElement *root,
                [out, retval] IUIAutomationElementArray **found);

        HRESULT FindFirstWithOptionsBuildCache(
                [in] enum TreeScope scope,
                [in] IUIAutomationCondition *condition,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] enum TreeTraversalOptions traversalOptions,
                [in] IUIAutomationElement *root,
                [out, retval] IUIAutomationElement **found);
        HRESULT FindAllWithOptionsBuildCache(
                [in] enum TreeScope scope,
                [in] IUIAutomationCondition *condition,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] enum TreeTraversalOptions traversalOptions,
                [in] IUIAutomationElement *root,
                [out, retval] IUIAutomationElementArray **found);

        HRESULT GetCurrentMetadataValue(
                [in] int targetId,
                [in] METADATAID metadataId,
                [out, retval] VARIANT *returnVal);
    }

    [
        object,
        uuid(8c60217d-5411-4cde-bcc0-1ceda223830c),
        pointer_default(unique)
    ]
    interface IUIAutomationElement8 : IUIAutomationElement7
    {
        [propget] HRESULT CurrentHeadingLevel([out, retval] HEADINGLEVELID *retVal);
        [propget] HRESULT CachedHeadingLevel([out, retval] HEADINGLEVELID *retVal);
    }

    [
        object,
        uuid(39325fac-039d-440e-a3a3-5eb81a5cecc3),
        pointer_default(unique)
    ]
    interface IUIAutomationElement9 : IUIAutomationElement8
    {
        [propget] HRESULT CurrentIsDialog([out, retval] BOOL *retVal);
        [propget] HRESULT CachedIsDialog([out, retval] BOOL *retVal);
    }

    [
        object,
        uuid(14314595-b4bc-4055-95f2-58f2e42c9855),
        pointer_default(unique)
    ]
    interface IUIAutomationElementArray : IUnknown
    {
        [propget] HRESULT Length([out, retval] int *length);

        HRESULT GetElement(
                [in] int index,
                [out, retval] IUIAutomationElement **element);
    }

    interface IUIAutomationProxyFactory;
    interface IUIAutomationProxyFactoryEntry;
    interface IUIAutomationProxyFactoryMapping;

    [
        object,
        uuid(c9ee12f2-c13b-4408-997c-639914377f4e),
        pointer_default(unique)
    ]
    interface IUIAutomationEventHandlerGroup : IUnknown
    {
        HRESULT AddActiveTextPositionChangedEventHandler(
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationActiveTextPositionChangedEventHandler *handler);
        HRESULT AddAutomationEventHandler(
                [in] EVENTID eventId,
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationEventHandler *handler);
        HRESULT AddChangesEventHandler(
                [in] enum TreeScope scope,
                [in, size_is(changesCount)] int *changeTypes,
                [in] int changesCount,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationChangesEventHandler *handler);
        HRESULT AddNotificationEventHandler(
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationNotificationEventHandler *handler);
        HRESULT AddPropertyChangedEventHandler(
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationPropertyChangedEventHandler *handler,
                [in, size_is(propertyCount)] PROPERTYID *propertyArray,
                [in] int propertyCount);
        HRESULT AddStructureChangedEventHandler(
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationStructureChangedEventHandler *handler);
        HRESULT AddTextEditTextChangedEventHandler(
                [in] enum TreeScope scope,
                [in] enum TextEditChangeType textEditChangeType,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationTextEditTextChangedEventHandler *handler);
    }

    [
        object,
        uuid(30cbe57d-d9d0-452a-ab13-7ac5ac4825ee),
        pointer_default(unique)
    ]
    interface IUIAutomation : IUnknown
    {
        HRESULT CompareElements(
                [in] IUIAutomationElement *el1,
                [in] IUIAutomationElement *el2,
                [out, retval] BOOL *areSame);
        HRESULT CompareRuntimeIds(
                [in] SAFEARRAY(int) runtimeId1,
                [in] SAFEARRAY(int) runtimeId2,
                [out, retval] BOOL *areSame);

        HRESULT GetRootElement([out, retval] IUIAutomationElement **root);
        HRESULT ElementFromHandle(
                [in] UIA_HWND hwnd,
                [out, retval] IUIAutomationElement **element);
        HRESULT ElementFromPoint(
                [in] POINT pt,
                [out, retval] IUIAutomationElement **element);
        HRESULT GetFocusedElement([out, retval] IUIAutomationElement **element);

        HRESULT GetRootElementBuildCache(
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **root);
        HRESULT ElementFromHandleBuildCache(
                [in] UIA_HWND hwnd,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **element);
        HRESULT ElementFromPointBuildCache(
                [in] POINT pt,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **element);
        HRESULT GetFocusedElementBuildCache(
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **element);

        HRESULT CreateTreeWalker(
                [in] IUIAutomationCondition *pCondition,
                [out, retval] IUIAutomationTreeWalker **walker);

        [propget] HRESULT ControlViewWalker([out, retval] IUIAutomationTreeWalker **walker);
        [propget] HRESULT ContentViewWalker([out, retval] IUIAutomationTreeWalker **walker);
        [propget] HRESULT RawViewWalker([out, retval] IUIAutomationTreeWalker **walker);

        [propget] HRESULT RawViewCondition([out, retval] IUIAutomationCondition **condition);
        [propget] HRESULT ControlViewCondition([out, retval] IUIAutomationCondition **condition);
        [propget] HRESULT ContentViewCondition([out, retval] IUIAutomationCondition **condition);

        HRESULT CreateCacheRequest([out, retval] IUIAutomationCacheRequest **cacheRequest);

        HRESULT CreateTrueCondition([out, retval] IUIAutomationCondition **newCondition);
        HRESULT CreateFalseCondition([out, retval] IUIAutomationCondition **newCondition);
        HRESULT CreatePropertyCondition(
                [in] PROPERTYID propertyId,
                [in] VARIANT value,
                [out, retval] IUIAutomationCondition **newCondition);
        HRESULT CreatePropertyConditionEx(
                [in] PROPERTYID propertyId,
                [in] VARIANT value,
                [in] enum PropertyConditionFlags flags,
                [out, retval] IUIAutomationCondition **newCondition);

        HRESULT CreateAndCondition(
                [in] IUIAutomationCondition *condition1,
                [in] IUIAutomationCondition *condition2,
                [out, retval] IUIAutomationCondition **newCondition);
        HRESULT CreateAndConditionFromArray(
                [in] SAFEARRAY(IUIAutomationCondition) conditions,
                [out, retval] IUIAutomationCondition **newCondition);
        HRESULT CreateAndConditionFromNativeArray(
                [in, size_is(conditionCount)] IUIAutomationCondition **conditions,
                [in] int conditionCount,
                [out, retval] IUIAutomationCondition **newCondition);

        HRESULT CreateOrCondition(
                [in] IUIAutomationCondition *condition1,
                [in] IUIAutomationCondition *condition2,
                [out, retval] IUIAutomationCondition **newCondition);
        HRESULT CreateOrConditionFromArray(
                [in] SAFEARRAY(IUIAutomationCondition) conditions,
                [out, retval] IUIAutomationCondition **newCondition);
        HRESULT CreateOrConditionFromNativeArray(
                [in, size_is(conditionCount)] IUIAutomationCondition **conditions,
                [in] int conditionCount,
                [out, retval] IUIAutomationCondition **newCondition);

        HRESULT CreateNotCondition(
                [in] IUIAutomationCondition *condition,
                [out, retval] IUIAutomationCondition **newCondition);

        HRESULT AddAutomationEventHandler(
                [in] EVENTID eventId,
                [in] IUIAutomationElement *element,
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationEventHandler *handler);
        HRESULT RemoveAutomationEventHandler(
                [in] EVENTID eventId,
                [in] IUIAutomationElement *element,
                [in] IUIAutomationEventHandler *handler);

        HRESULT AddPropertyChangedEventHandlerNativeArray(
                [in] IUIAutomationElement *element,
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationPropertyChangedEventHandler *handler,
                [in, size_is(propertyCount)] PROPERTYID *propertyArray,
                [in] int propertyCount);
        HRESULT AddPropertyChangedEventHandler(
                [in] IUIAutomationElement *element,
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationPropertyChangedEventHandler *handler,
                [in] SAFEARRAY(PROPERTYID) propertyArray);
        HRESULT RemovePropertyChangedEventHandler(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationPropertyChangedEventHandler *handler);

        HRESULT AddStructureChangedEventHandler(
                [in] IUIAutomationElement *element,
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationStructureChangedEventHandler *handler);
        HRESULT RemoveStructureChangedEventHandler(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationStructureChangedEventHandler *handler);

        HRESULT AddFocusChangedEventHandler(
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationFocusChangedEventHandler *handler);
        HRESULT RemoveFocusChangedEventHandler([in] IUIAutomationFocusChangedEventHandler *handler);

        HRESULT RemoveAllEventHandlers();

        HRESULT IntNativeArrayToSafeArray(
                [in, size_is(arrayCount)] int *array,
                [in] int arrayCount,
                [out, retval] SAFEARRAY(int) *safeArray);
        HRESULT IntSafeArrayToNativeArray(
                [in] SAFEARRAY(int) intArray,
                [out, size_is( ,*arrayCount)] int **array,
                [out, retval] int *arrayCount);

        HRESULT RectToVariant(
                [in] RECT rc,
                [out, retval] VARIANT *var);
        HRESULT VariantToRect(
                [in] VARIANT var,
                [out, retval] RECT *rc);
        HRESULT SafeArrayToRectNativeArray(
                [in] SAFEARRAY(double) rects,
                [out, size_is( ,*rectArrayCount)] RECT **rectArray,
                [out, retval] int *rectArrayCount);

        HRESULT CreateProxyFactoryEntry(
                [in] IUIAutomationProxyFactory *factory,
                [out, retval] IUIAutomationProxyFactoryEntry **factoryEntry);
        [propget] HRESULT ProxyFactoryMapping([out, retval] IUIAutomationProxyFactoryMapping **factoryMapping);

        HRESULT GetPropertyProgrammaticName(
                [in] PROPERTYID property,
                [out, retval] BSTR *name);
        HRESULT GetPatternProgrammaticName(
                [in] PATTERNID pattern,
                [out, retval] BSTR *name);

        HRESULT PollForPotentialSupportedPatterns(
                [in] IUIAutomationElement *pElement,
                [out] SAFEARRAY(int) *patternIds,
                [out] SAFEARRAY(BSTR) *patternNames);
        HRESULT PollForPotentialSupportedProperties(
                [in] IUIAutomationElement *pElement,
                [out] SAFEARRAY(int) *propertyIds,
                [out] SAFEARRAY(BSTR) *propertyNames);

        HRESULT CheckNotSupported(
                [in] VARIANT value,
                [out, retval] BOOL *isNotSupported);

        [propget] HRESULT ReservedNotSupportedValue([out, retval] IUnknown **notSupportedValue);
        [propget] HRESULT ReservedMixedAttributeValue([out, retval] IUnknown **mixedAttributeValue);

        HRESULT ElementFromIAccessible(
                [in] IAccessible *accessible,
                [in] int childId,
                [out, retval] IUIAutomationElement **element);
        HRESULT ElementFromIAccessibleBuildCache(
                [in] IAccessible *accessible,
                [in] int childId,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [out, retval] IUIAutomationElement **element);
    }

    [
        object,
        uuid(34723aff-0c9d-49d0-9896-7ab52df8cd8a),
        pointer_default(unique)
    ]
    interface IUIAutomation2 : IUIAutomation
    {
        [propget] HRESULT AutoSetFocus([out, retval] BOOL *autoSetFocus);
        [propput] HRESULT AutoSetFocus([in] BOOL autoSetFocus);

        [propget] HRESULT ConnectionTimeout([out, retval] DWORD *timeout);
        [propput] HRESULT ConnectionTimeout([in] DWORD timeout);

        [propget] HRESULT TransactionTimeout([out, retval] DWORD *timeout);
        [propput] HRESULT TransactionTimeout([in] DWORD timeout);
    }

    [
        object,
        uuid(73d768da-9b51-4b89-936e-c209290973e7),
        pointer_default(unique)
    ]
    interface IUIAutomation3 : IUIAutomation2
    {
        HRESULT AddTextEditTextChangedEventHandler(
                [in] IUIAutomationElement *element,
                [in] enum TreeScope scope,
                [in] enum TextEditChangeType textEditChangeType,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationTextEditTextChangedEventHandler *handler);
        HRESULT RemoveTextEditTextChangedEventHandler(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationTextEditTextChangedEventHandler *handler);
    }

    [
        object,
        uuid(1189c02a-05f8-4319-8e21-e817e3db2860),
        pointer_default(unique)
    ]
    interface IUIAutomation4 : IUIAutomation3
    {
        HRESULT AddChangesEventHandler(
                [in] IUIAutomationElement *element,
                [in] enum TreeScope scope,
                [in, size_is(changesCount)] int *changeTypes,
                [in] int changesCount,
                [in] IUIAutomationCacheRequest *pCacheRequest,
                [in] IUIAutomationChangesEventHandler *handler);
        HRESULT RemoveChangesEventHandler(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationChangesEventHandler *handler);
    }

    [
        object,
        uuid(25f700c8-d816-4057-a9dc-3cbdee77e256),
        pointer_default(unique)
    ]
    interface IUIAutomation5 : IUIAutomation4
    {
        HRESULT AddNotificationEventHandler(
                [in] IUIAutomationElement *element,
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationNotificationEventHandler *handler);
        HRESULT RemoveNotificationEventHandler(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationNotificationEventHandler *handler);
    }

    [
        object,
        uuid(aae072da-29e3-413d-87a7-192dbf81ed10),
        pointer_default(unique)
    ]
    interface IUIAutomation6 : IUIAutomation5
    {
        HRESULT CreateEventHandlerGroup([out] IUIAutomationEventHandlerGroup **handlerGroup);
        HRESULT AddEventHandlerGroup(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationEventHandlerGroup *handlerGroup);
        HRESULT RemoveEventHandlerGroup(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationEventHandlerGroup *handlerGroup);

        [propget] HRESULT ConnectionRecoveryBehavior(
                          [out, retval] enum ConnectionRecoveryBehaviorOptions *connectionRecoveryBehaviorOptions);
        [propput] HRESULT ConnectionRecoveryBehavior(
                          [in] enum ConnectionRecoveryBehaviorOptions connectionRecoveryBehaviorOptions);

        [propget] HRESULT CoalesceEvents([out, retval] enum CoalesceEventsOptions *coalesceEventsOptions);
        [propput] HRESULT CoalesceEvents([in] enum CoalesceEventsOptions coalesceEventsOptions);

        HRESULT AddActiveTextPositionChangedEventHandler(
                [in] IUIAutomationElement *element,
                [in] enum TreeScope scope,
                [in] IUIAutomationCacheRequest *cacheRequest,
                [in] IUIAutomationActiveTextPositionChangedEventHandler *handler);
        HRESULT RemoveActiveTextPositionChangedEventHandler(
                [in] IUIAutomationElement *element,
                [in] IUIAutomationActiveTextPositionChangedEventHandler *handler);
    }

    [
        uuid(ff48dba4-60ef-4201-aa87-54103eef594e),
        version(1.0),
        threading(both)
    ]
    coclass CUIAutomation
    {
        [default] interface IUIAutomation;
    }

    [
        uuid(e22ad333-b25f-460c-83d0-0581107395c9),
        version(1.0),
        threading(both)
    ]
    coclass CUIAutomation8
    {
        [default] interface IUIAutomation2;
        interface IUIAutomation3;
        interface IUIAutomation4;
        interface IUIAutomation5;
        interface IUIAutomation6;
    }
}
