//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
//
//  File: oleacc.idl
//
//  Notes:
//  (1) OPTIONAL parameters must be the last parameters, excepting the single
//  "RETVAL" output parameter.
//  (2) The methods must be in the same order as the interface!
//
//+-------------------------------------------------------------------------


cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// OLEACC.H")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// (C) Copyright (c) Microsoft Corporation. All rights reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")

cpp_quote("")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Typedefs")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("typedef LRESULT (STDAPICALLTYPE *LPFNLRESULTFROMOBJECT)(REFIID riid, WPARAM wParam, LPUNKNOWN punk);")
cpp_quote("typedef HRESULT (STDAPICALLTYPE *LPFNOBJECTFROMLRESULT)(LRESULT lResult, REFIID riid, WPARAM wParam, void** ppvObject);")
cpp_quote("typedef HRESULT (STDAPICALLTYPE *LPFNACCESSIBLEOBJECTFROMWINDOW)(HWND hwnd, DWORD dwId, REFIID riid, void** ppvObject);")
cpp_quote("typedef HRESULT (STDAPICALLTYPE *LPFNACCESSIBLEOBJECTFROMPOINT)(POINT ptScreen, IAccessible** ppacc, VARIANT* pvarChild);")
cpp_quote("typedef HRESULT (STDAPICALLTYPE *LPFNCREATESTDACCESSIBLEOBJECT)(HWND hwnd, LONG idObject, REFIID riid, void** ppvObject);")
cpp_quote("typedef HRESULT (STDAPICALLTYPE *LPFNACCESSIBLECHILDREN)(IAccessible* paccContainer, LONG iChildStart,LONG cChildren,VARIANT* rgvarChildren,LONG* pcObtained);")

//----------------------------------------------------------------------------
// GUIDs are defined here so that clients and servers that #include "oleacc.h"
// can get them from there by also doing #include <initguid.h> in one and only
// one of their source modules. The way the oleacc.dll actually gets the GUIDs
// is slightly different though - it has copies of the line below in the file
// guids.c, with the prefix __declspec(dllexport), so that the GUIDs are also
// exported from OLEACC.DLL. Then clients and servers have the option of linking
// to oleacc.dll to get them. 
//
// So if you add any more GUIDs, make sure to add them here AND in guids.c
//----------------------------------------------------------------------------

cpp_quote("")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// GUIDs")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("DEFINE_GUID(LIBID_Accessibility,     0x1ea4dbf0, 0x3c3b, 0x11cf, 0x81, 0x0c, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);")
cpp_quote("DEFINE_GUID(IID_IAccessible,         0x618736e0, 0x3c3d, 0x11cf, 0x81, 0x0c, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);")
cpp_quote("DEFINE_GUID(IID_IAccessibleHandler,  0x03022430, 0xABC4, 0x11d0, 0xBD, 0xE2, 0x00, 0xAA, 0x00, 0x1A, 0x19, 0x53);")
cpp_quote("DEFINE_GUID(IID_IAccIdentity,        0x7852b78d, 0x1cfd, 0x41c1, 0xa6, 0x15, 0x9c, 0x0c, 0x85, 0x96, 0x0b, 0x5f);")
cpp_quote("DEFINE_GUID(IID_IAccPropServer,      0x76c0dbbb, 0x15e0, 0x4e7b, 0xb6, 0x1b, 0x20, 0xee, 0xea, 0x20, 0x01, 0xe0);")
cpp_quote("DEFINE_GUID(IID_IAccPropServices,    0x6e26e776, 0x04f0, 0x495d, 0x80, 0xe4, 0x33, 0x30, 0x35, 0x2e, 0x31, 0x69);")
cpp_quote("DEFINE_GUID(IID_IAccPropMgrInternal, 0x2bd370a9, 0x3e7f, 0x4edd, 0x8a, 0x85, 0xf8, 0xfe, 0xd1, 0xf8, 0xe5, 0x1f);")
cpp_quote("DEFINE_GUID(CLSID_AccPropServices,   0xb5f8350b, 0x0548, 0x48b1, 0xa6, 0xee, 0x88, 0xbd, 0x00, 0xb4, 0xa5, 0xe7);")

cpp_quote("DEFINE_GUID(IIS_IsOleaccProxy,       0x902697fa, 0x80e4, 0x4560, 0x80, 0x2a, 0xa1, 0x3f, 0x22, 0xa6, 0x47, 0x09);")


cpp_quote("")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// MSAA API Prototypes")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")

cpp_quote("STDAPI_(LRESULT) LresultFromObject(__in REFIID riid, __in WPARAM wParam, __in LPUNKNOWN punk);")
cpp_quote("STDAPI          ObjectFromLresult(__in LRESULT lResult, __in REFIID riid, __in WPARAM wParam, __deref_out void** ppvObject);")
cpp_quote("STDAPI          WindowFromAccessibleObject(__in IAccessible*, __out_opt HWND* phwnd);")
cpp_quote("STDAPI          AccessibleObjectFromWindow(__in HWND hwnd, __in DWORD dwId, __in REFIID riid, __deref_out void **ppvObject);")
cpp_quote("STDAPI          AccessibleObjectFromEvent(__in HWND hwnd, __in DWORD dwId, __in DWORD dwChildId, __deref_out IAccessible** ppacc, __out VARIANT* pvarChild);")
cpp_quote("STDAPI          AccessibleObjectFromPoint(__in POINT ptScreen, __deref_out IAccessible ** ppacc, __out VARIANT* pvarChild);")
cpp_quote("STDAPI          AccessibleChildren (__in IAccessible* paccContainer, __in LONG iChildStart, __in LONG cChildren, __out_ecount(cChildren) VARIANT* rgvarChildren, __out LONG* pcObtained);")
cpp_quote("")
cpp_quote("STDAPI_(UINT)   GetRoleTextA(__in DWORD lRole, __out_ecount_opt(cchRoleMax) LPSTR lpszRole, __in UINT cchRoleMax);")
cpp_quote("STDAPI_(UINT)   GetRoleTextW(__in DWORD lRole, __out_ecount_opt(cchRoleMax) LPWSTR lpszRole, __in UINT cchRoleMax);")
cpp_quote("")
cpp_quote("#ifdef UNICODE")
cpp_quote("#define GetRoleText     GetRoleTextW")
cpp_quote("#else")
cpp_quote("#define GetRoleText     GetRoleTextA")
cpp_quote("#endif // UNICODE")
cpp_quote("")
cpp_quote("STDAPI_(UINT)   GetStateTextA(__in DWORD lStateBit, __out_ecount_opt(cchState) LPSTR lpszState, __in UINT cchState);")
cpp_quote("STDAPI_(UINT)   GetStateTextW(__in DWORD lStateBit, __out_ecount_opt(cchState) LPWSTR lpszState, __in UINT cchState);")
cpp_quote("#ifdef UNICODE")
cpp_quote("#define GetStateText    GetStateTextW")
cpp_quote("#else")
cpp_quote("#define GetStateText    GetStateTextA")
cpp_quote("#endif // UNICODE")
cpp_quote("")
cpp_quote("STDAPI_(VOID)   GetOleaccVersionInfo(__out DWORD* pVer, __out DWORD* pBuild);")
cpp_quote("")
cpp_quote("STDAPI          CreateStdAccessibleObject(__in HWND hwnd, __in LONG idObject, __in REFIID riid, __deref_out void** ppvObject);")
cpp_quote("")
cpp_quote("STDAPI          CreateStdAccessibleProxyA(__in HWND hwnd, __in LPCSTR pClassName, __in LONG idObject, __in REFIID riid, __deref_out void** ppvObject);")
cpp_quote("STDAPI          CreateStdAccessibleProxyW(__in HWND hwnd, __in LPCWSTR pClassName, __in LONG idObject, __in REFIID riid, __deref_out void** ppvObject);")
cpp_quote("")
cpp_quote("#ifdef UNICODE")
cpp_quote("#define CreateStdAccessibleProxy     CreateStdAccessibleProxyW")
cpp_quote("#else")
cpp_quote("#define CreateStdAccessibleProxy     CreateStdAccessibleProxyA")
cpp_quote("#endif // UNICODE")
cpp_quote("")
cpp_quote("")
cpp_quote("// Simple Owner-Drawn Menu support...")
cpp_quote("")
cpp_quote("#define MSAA_MENU_SIG 0xAA0DF00DL")
cpp_quote("")
cpp_quote("// Menu's dwItemData should point to one of these structs:")
cpp_quote("// (or can point to an app-defined struct containing this as the first member)")
cpp_quote("typedef struct tagMSAAMENUINFO {")
cpp_quote("    DWORD   dwMSAASignature; // Must be MSAA_MENU_SIG")
cpp_quote("    DWORD   cchWText;        // Length of text, in Unicode characters, excluding terminating NUL")
cpp_quote("    LPWSTR  pszWText;        // NUL-terminated text, in Unicode")
cpp_quote("} MSAAMENUINFO, *LPMSAAMENUINFO;")
cpp_quote("")
cpp_quote("")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Property GUIDs (used by annotation interfaces)")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAME             , 0x608d3df8, 0x8128, 0x4aa7, 0xa4, 0x28, 0xf5, 0x5e, 0x49, 0x26, 0x72, 0x91);")
cpp_quote("DEFINE_GUID( PROPID_ACC_VALUE            , 0x123fe443, 0x211a, 0x4615, 0x95, 0x27, 0xc4, 0x5a, 0x7e, 0x93, 0x71, 0x7a);")
cpp_quote("DEFINE_GUID( PROPID_ACC_DESCRIPTION      , 0x4d48dfe4, 0xbd3f, 0x491f, 0xa6, 0x48, 0x49, 0x2d, 0x6f, 0x20, 0xc5, 0x88);")
cpp_quote("DEFINE_GUID( PROPID_ACC_ROLE             , 0xcb905ff2, 0x7bd1, 0x4c05, 0xb3, 0xc8, 0xe6, 0xc2, 0x41, 0x36, 0x4d, 0x70);")
cpp_quote("DEFINE_GUID( PROPID_ACC_STATE            , 0xa8d4d5b0, 0x0a21, 0x42d0, 0xa5, 0xc0, 0x51, 0x4e, 0x98, 0x4f, 0x45, 0x7b);")
cpp_quote("DEFINE_GUID( PROPID_ACC_HELP             , 0xc831e11f, 0x44db, 0x4a99, 0x97, 0x68, 0xcb, 0x8f, 0x97, 0x8b, 0x72, 0x31);")
cpp_quote("DEFINE_GUID( PROPID_ACC_KEYBOARDSHORTCUT , 0x7d9bceee, 0x7d1e, 0x4979, 0x93, 0x82, 0x51, 0x80, 0xf4, 0x17, 0x2c, 0x34);")
cpp_quote("DEFINE_GUID( PROPID_ACC_DEFAULTACTION    , 0x180c072b, 0xc27f, 0x43c7, 0x99, 0x22, 0xf6, 0x35, 0x62, 0xa4, 0x63, 0x2b);")
cpp_quote("")
cpp_quote("DEFINE_GUID( PROPID_ACC_HELPTOPIC        , 0x787d1379, 0x8ede, 0x440b, 0x8a, 0xec, 0x11, 0xf7, 0xbf, 0x90, 0x30, 0xb3);")
cpp_quote("DEFINE_GUID( PROPID_ACC_FOCUS            , 0x6eb335df, 0x1c29, 0x4127, 0xb1, 0x2c, 0xde, 0xe9, 0xfd, 0x15, 0x7f, 0x2b);")
cpp_quote("DEFINE_GUID( PROPID_ACC_SELECTION        , 0xb99d073c, 0xd731, 0x405b, 0x90, 0x61, 0xd9, 0x5e, 0x8f, 0x84, 0x29, 0x84);")
cpp_quote("DEFINE_GUID( PROPID_ACC_PARENT           , 0x474c22b6, 0xffc2, 0x467a, 0xb1, 0xb5, 0xe9, 0x58, 0xb4, 0x65, 0x73, 0x30);")
cpp_quote("")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAV_UP           , 0x016e1a2b, 0x1a4e, 0x4767, 0x86, 0x12, 0x33, 0x86, 0xf6, 0x69, 0x35, 0xec);")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAV_DOWN         , 0x031670ed, 0x3cdf, 0x48d2, 0x96, 0x13, 0x13, 0x8f, 0x2d, 0xd8, 0xa6, 0x68);")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAV_LEFT         , 0x228086cb, 0x82f1, 0x4a39, 0x87, 0x05, 0xdc, 0xdc, 0x0f, 0xff, 0x92, 0xf5);")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAV_RIGHT        , 0xcd211d9f, 0xe1cb, 0x4fe5, 0xa7, 0x7c, 0x92, 0x0b, 0x88, 0x4d, 0x09, 0x5b);")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAV_PREV         , 0x776d3891, 0xc73b, 0x4480, 0xb3, 0xf6, 0x07, 0x6a, 0x16, 0xa1, 0x5a, 0xf6);")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAV_NEXT         , 0x1cdc5455, 0x8cd9, 0x4c92, 0xa3, 0x71, 0x39, 0x39, 0xa2, 0xfe, 0x3e, 0xee);")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAV_FIRSTCHILD   , 0xcfd02558, 0x557b, 0x4c67, 0x84, 0xf9, 0x2a, 0x09, 0xfc, 0xe4, 0x07, 0x49);")
cpp_quote("DEFINE_GUID( PROPID_ACC_NAV_LASTCHILD    , 0x302ecaa5, 0x48d5, 0x4f8d, 0xb6, 0x71, 0x1a, 0x8d, 0x20, 0xa7, 0x78, 0x32);")
cpp_quote("")
cpp_quote("// Value map, used by sliders and other controls...")
cpp_quote("DEFINE_GUID( PROPID_ACC_ROLEMAP          , 0xf79acda2, 0x140d, 0x4fe6, 0x89, 0x14, 0x20, 0x84, 0x76, 0x32, 0x82, 0x69);")
cpp_quote("DEFINE_GUID( PROPID_ACC_VALUEMAP         , 0xda1c3d79, 0xfc5c, 0x420e, 0xb3, 0x99, 0x9d, 0x15, 0x33, 0x54, 0x9e, 0x75);")
cpp_quote("DEFINE_GUID( PROPID_ACC_STATEMAP         , 0x43946c5e, 0x0ac0, 0x4042, 0xb5, 0x25, 0x07, 0xbb, 0xdb, 0xe1, 0x7f, 0xa7);")
cpp_quote("DEFINE_GUID( PROPID_ACC_DESCRIPTIONMAP   , 0x1ff1435f, 0x8a14, 0x477b, 0xb2, 0x26, 0xa0, 0xab, 0xe2, 0x79, 0x97, 0x5d);")
cpp_quote("")
cpp_quote("DEFINE_GUID( PROPID_ACC_DODEFAULTACTION  , 0x1ba09523, 0x2e3b, 0x49a6, 0xa0, 0x59, 0x59, 0x68, 0x2a, 0x3c, 0x48, 0xfd);")
cpp_quote("")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Interface Definitions")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")

//
//  IAccessible
//


#define DO_NO_IMPORTS
import "oaidl.idl";

[
	object,
	uuid(618736e0-3c3d-11cf-810c-00aa00389b71),
	hidden,
	dual,
	pointer_default(unique)
]

interface IAccessible : IDispatch
{
		// PROPERTIES:  Hierarchical

		const long DISPID_ACC_PARENT				= -5000;
		const long DISPID_ACC_CHILDCOUNT            = -5001;
		const long DISPID_ACC_CHILD                 = -5002;
                                             
		// PROPERTIES:  Descriptional

		const long DISPID_ACC_NAME					= -5003;
		const long DISPID_ACC_VALUE                 = -5004;
		const long DISPID_ACC_DESCRIPTION           = -5005;
		const long DISPID_ACC_ROLE                  = -5006;
		const long DISPID_ACC_STATE                 = -5007;
		const long DISPID_ACC_HELP                  = -5008;
		const long DISPID_ACC_HELPTOPIC             = -5009;
		const long DISPID_ACC_KEYBOARDSHORTCUT      = -5010;
		const long DISPID_ACC_FOCUS                 = -5011;
		const long DISPID_ACC_SELECTION             = -5012;
		const long DISPID_ACC_DEFAULTACTION         = -5013;

		// METHODS

		const long DISPID_ACC_SELECT				= -5014;
		const long DISPID_ACC_LOCATION              = -5015;
		const long DISPID_ACC_NAVIGATE              = -5016;
		const long DISPID_ACC_HITTEST               = -5017;
		const long DISPID_ACC_DODEFAULTACTION       = -5018;

		typedef [unique] IAccessible *LPACCESSIBLE;

		//
		// Input to DISPID_ACC_NAVIGATE
		//

		const long NAVDIR_MIN						= 0x00000000;
		const long NAVDIR_UP						= 0x00000001;
		const long NAVDIR_DOWN						= 0x00000002;
		const long NAVDIR_LEFT						= 0x00000003;
		const long NAVDIR_RIGHT						= 0x00000004;
		const long NAVDIR_NEXT						= 0x00000005;
		const long NAVDIR_PREVIOUS					= 0x00000006;
		const long NAVDIR_FIRSTCHILD				= 0x00000007;
		const long NAVDIR_LASTCHILD					= 0x00000008;
		const long NAVDIR_MAX						= 0x00000009;

		// Input to DISPID_ACC_SELECT
		const long SELFLAG_NONE						= 0x00000000;
		const long SELFLAG_TAKEFOCUS				= 0x00000001;
		const long SELFLAG_TAKESELECTION			= 0x00000002;
		const long SELFLAG_EXTENDSELECTION			= 0x00000004;
		const long SELFLAG_ADDSELECTION				= 0x00000008;
		const long SELFLAG_REMOVESELECTION			= 0x00000010;
		const long SELFLAG_VALID					= 0x0000001F;

cpp_quote("#ifndef STATE_SYSTEM_UNAVAILABLE")
		// Output from DISPID_ACC_STATE
		const long STATE_SYSTEM_NORMAL				= 0x00000000;
		const long STATE_SYSTEM_UNAVAILABLE			= 0x00000001;  // Disabled
		const long STATE_SYSTEM_SELECTED			= 0x00000002;
		const long STATE_SYSTEM_FOCUSED				= 0x00000004;
		const long STATE_SYSTEM_PRESSED				= 0x00000008;
		const long STATE_SYSTEM_CHECKED				= 0x00000010;
		const long STATE_SYSTEM_MIXED				= 0x00000020;  // 3-state checkbox or toolbar button
		const long STATE_SYSTEM_INDETERMINATE		= STATE_SYSTEM_MIXED;
		const long STATE_SYSTEM_READONLY			= 0x00000040;
		const long STATE_SYSTEM_HOTTRACKED			= 0x00000080;
		const long STATE_SYSTEM_DEFAULT				= 0x00000100;
		const long STATE_SYSTEM_EXPANDED			= 0x00000200;
		const long STATE_SYSTEM_COLLAPSED			= 0x00000400;
		const long STATE_SYSTEM_BUSY				= 0x00000800;
		const long STATE_SYSTEM_FLOATING			= 0x00001000;  // Children "owned" not "contained" by parent
		const long STATE_SYSTEM_MARQUEED			= 0x00002000;
		const long STATE_SYSTEM_ANIMATED			= 0x00004000;
		const long STATE_SYSTEM_INVISIBLE			= 0x00008000;
		const long STATE_SYSTEM_OFFSCREEN			= 0x00010000;
		const long STATE_SYSTEM_SIZEABLE			= 0x00020000;
		const long STATE_SYSTEM_MOVEABLE			= 0x00040000;
		const long STATE_SYSTEM_SELFVOICING			= 0x00080000;
		const long STATE_SYSTEM_FOCUSABLE			= 0x00100000;
		const long STATE_SYSTEM_SELECTABLE			= 0x00200000;
		const long STATE_SYSTEM_LINKED				= 0x00400000;
		const long STATE_SYSTEM_TRAVERSED			= 0x00800000;
		const long STATE_SYSTEM_MULTISELECTABLE		= 0x01000000;  // Supports multiple selection
		const long STATE_SYSTEM_EXTSELECTABLE		= 0x02000000;  // Supports extended selection
		const long STATE_SYSTEM_ALERT_LOW			= 0x04000000;  // This information is of low priority
		const long STATE_SYSTEM_ALERT_MEDIUM		= 0x08000000;  // This information is of medium priority
		const long STATE_SYSTEM_ALERT_HIGH			= 0x10000000;  // This information is of high priority
		const long STATE_SYSTEM_PROTECTED			= 0x20000000;
		const long STATE_SYSTEM_VALID				= 0x7FFFFFFF;
cpp_quote("#endif //STATE_SYSTEM_UNAVAILABLE")

// winuser.h already defines the above, so anything within the
// above ifdefs will be pulled from winuser.h, not oleacc.h.
// New stuff has to be added outside those ifdefs, otherwise
// anything that includes winuser won't see it.
cpp_quote("#ifndef STATE_SYSTEM_HASPOPUP")
		const long STATE_SYSTEM_HASPOPUP			= 0x40000000;
cpp_quote("#endif //STATE_SYSTEM_HASPOPUP")

		// Output from DISPID_ACC_ROLE

		const long ROLE_SYSTEM_TITLEBAR				= 0x00000001;
		const long ROLE_SYSTEM_MENUBAR				= 0x00000002;
		const long ROLE_SYSTEM_SCROLLBAR			= 0x00000003;
		const long ROLE_SYSTEM_GRIP					= 0x00000004;
		const long ROLE_SYSTEM_SOUND				= 0x00000005;
		const long ROLE_SYSTEM_CURSOR				= 0x00000006;
		const long ROLE_SYSTEM_CARET				= 0x00000007;
		const long ROLE_SYSTEM_ALERT				= 0x00000008;
		const long ROLE_SYSTEM_WINDOW				= 0x00000009;
		const long ROLE_SYSTEM_CLIENT				= 0x0000000A;
		const long ROLE_SYSTEM_MENUPOPUP			= 0x0000000B;
		const long ROLE_SYSTEM_MENUITEM				= 0x0000000C;
		const long ROLE_SYSTEM_TOOLTIP				= 0x0000000D;
		const long ROLE_SYSTEM_APPLICATION			= 0x0000000E;
		const long ROLE_SYSTEM_DOCUMENT				= 0x0000000F;
		const long ROLE_SYSTEM_PANE					= 0x00000010;
		const long ROLE_SYSTEM_CHART				= 0x00000011;
		const long ROLE_SYSTEM_DIALOG				= 0x00000012;
		const long ROLE_SYSTEM_BORDER				= 0x00000013;
		const long ROLE_SYSTEM_GROUPING				= 0x00000014;
		const long ROLE_SYSTEM_SEPARATOR			= 0x00000015;
		const long ROLE_SYSTEM_TOOLBAR				= 0x00000016;
		const long ROLE_SYSTEM_STATUSBAR			= 0x00000017;
		const long ROLE_SYSTEM_TABLE				= 0x00000018;
		const long ROLE_SYSTEM_COLUMNHEADER			= 0x00000019;
		const long ROLE_SYSTEM_ROWHEADER			= 0x0000001A;
		const long ROLE_SYSTEM_COLUMN				= 0x0000001B;
		const long ROLE_SYSTEM_ROW					= 0x0000001C;
		const long ROLE_SYSTEM_CELL					= 0x0000001D;
		const long ROLE_SYSTEM_LINK					= 0x0000001E;
		const long ROLE_SYSTEM_HELPBALLOON			= 0x0000001F;
		const long ROLE_SYSTEM_CHARACTER			= 0x00000020;
		const long ROLE_SYSTEM_LIST					= 0x00000021;
		const long ROLE_SYSTEM_LISTITEM				= 0x00000022;
		const long ROLE_SYSTEM_OUTLINE				= 0x00000023;
		const long ROLE_SYSTEM_OUTLINEITEM			= 0x00000024;
		const long ROLE_SYSTEM_PAGETAB				= 0x00000025;
		const long ROLE_SYSTEM_PROPERTYPAGE			= 0x00000026;
		const long ROLE_SYSTEM_INDICATOR			= 0x00000027;
		const long ROLE_SYSTEM_GRAPHIC				= 0x00000028;
		const long ROLE_SYSTEM_STATICTEXT			= 0x00000029;
		const long ROLE_SYSTEM_TEXT					= 0x0000002A;  // Editable, selectable, etc.
		const long ROLE_SYSTEM_PUSHBUTTON			= 0x0000002B;
		const long ROLE_SYSTEM_CHECKBUTTON			= 0x0000002C;
		const long ROLE_SYSTEM_RADIOBUTTON			= 0x0000002D;
		const long ROLE_SYSTEM_COMBOBOX				= 0x0000002E;
		const long ROLE_SYSTEM_DROPLIST				= 0x0000002F;
		const long ROLE_SYSTEM_PROGRESSBAR			= 0x00000030;
		const long ROLE_SYSTEM_DIAL					= 0x00000031;
		const long ROLE_SYSTEM_HOTKEYFIELD			= 0x00000032;
		const long ROLE_SYSTEM_SLIDER				= 0x00000033;
		const long ROLE_SYSTEM_SPINBUTTON			= 0x00000034;
		const long ROLE_SYSTEM_DIAGRAM				= 0x00000035;
		const long ROLE_SYSTEM_ANIMATION			= 0x00000036;
		const long ROLE_SYSTEM_EQUATION				= 0x00000037;
		const long ROLE_SYSTEM_BUTTONDROPDOWN		= 0x00000038;
		const long ROLE_SYSTEM_BUTTONMENU			= 0x00000039;
		const long ROLE_SYSTEM_BUTTONDROPDOWNGRID	= 0x0000003A;
		const long ROLE_SYSTEM_WHITESPACE			= 0x0000003B;
		const long ROLE_SYSTEM_PAGETABLIST			= 0x0000003C;
		const long ROLE_SYSTEM_CLOCK				= 0x0000003D;
		const long ROLE_SYSTEM_SPLITBUTTON			= 0x0000003E;
		const long ROLE_SYSTEM_IPADDRESS			= 0x0000003F;
		const long ROLE_SYSTEM_OUTLINEBUTTON		= 0x00000040;

		// Hierarchy Properties

		[hidden, propget, id(DISPID_ACC_PARENT)] HRESULT accParent([out, retval] IDispatch** ppdispParent);

		[hidden, propget, id(DISPID_ACC_CHILDCOUNT)] HRESULT accChildCount([out, retval] long* pcountChildren);

		[hidden, propget, id(DISPID_ACC_CHILD)] HRESULT accChild([in] VARIANT varChild, [out, retval] IDispatch** ppdispChild);

	    // Description Properties

		[hidden, propget, id(DISPID_ACC_NAME)] HRESULT accName([in, optional] VARIANT varChild,[out, retval] BSTR* pszName);

		[hidden, propget, id(DISPID_ACC_VALUE)] HRESULT accValue([in, optional] VARIANT varChild,[out, retval] BSTR* pszValue);

		[hidden, propget, id(DISPID_ACC_DESCRIPTION)] HRESULT accDescription([in, optional] VARIANT varChild,[out, retval] BSTR* pszDescription);

		[hidden, propget, id(DISPID_ACC_ROLE)] HRESULT accRole([in, optional] VARIANT varChild,[out, retval] VARIANT * pvarRole);

		[hidden, propget, id(DISPID_ACC_STATE)] HRESULT accState([in, optional] VARIANT varChild,[out, retval] VARIANT * pvarState);

		[hidden, propget, id(DISPID_ACC_HELP)] HRESULT accHelp([in, optional] VARIANT varChild,[out, retval] BSTR * pszHelp);

		[hidden, propget, id(DISPID_ACC_HELPTOPIC)] HRESULT accHelpTopic([out] BSTR * pszHelpFile,[in, optional] VARIANT varChild,[out, retval] long * pidTopic);

		[hidden, propget, id(DISPID_ACC_KEYBOARDSHORTCUT)] HRESULT accKeyboardShortcut([in, optional] VARIANT varChild,[out, retval] BSTR * pszKeyboardShortcut);

		[hidden, propget, id(DISPID_ACC_FOCUS)] HRESULT accFocus([out, retval] VARIANT * pvarChild);					
		
		[hidden, propget, id(DISPID_ACC_SELECTION)] HRESULT accSelection([out, retval] VARIANT * pvarChildren);

		[hidden, propget, id(DISPID_ACC_DEFAULTACTION)] HRESULT accDefaultAction([in, optional] VARIANT varChild,[out, retval] BSTR * pszDefaultAction);


		// Methods

		[hidden, id(DISPID_ACC_SELECT)] HRESULT accSelect([in] long flagsSelect,[in, optional] VARIANT varChild);

		[hidden, id(DISPID_ACC_LOCATION)] HRESULT accLocation([out] long * pxLeft,[out] long * pyTop,[out] long * pcxWidth,[out] long * pcyHeight, [in, optional] VARIANT varChild);

		[hidden, id(DISPID_ACC_NAVIGATE)] HRESULT accNavigate([in] long navDir,[in, optional] VARIANT varStart,[out, retval] VARIANT * pvarEndUpAt);

		[hidden, id(DISPID_ACC_HITTEST)] HRESULT accHitTest([in] long xLeft, [in] long yTop,[out, retval] VARIANT * pvarChild);

		[hidden, id(DISPID_ACC_DODEFAULTACTION)] HRESULT accDoDefaultAction([in, optional] VARIANT varChild);

		// Description Properties, puts

		[hidden, propput, id(DISPID_ACC_NAME)] HRESULT accName([in, optional] VARIANT varChild,[in] BSTR szName);

		[hidden, propput, id(DISPID_ACC_VALUE)] HRESULT accValue([in, optional] VARIANT varChild,[in] BSTR szValue);
}



[
	object,
	uuid(03022430-ABC4-11d0-BDE2-00AA001A1953),
	hidden,
	oleautomation,
	pointer_default(unique)
]

interface IAccessibleHandler : IUnknown
{
	typedef [unique] IAccessibleHandler *LPACCESSIBLEHANDLER;

	HRESULT AccessibleObjectFromID( [in] long hwnd, [in] long lObjectID, [out] LPACCESSIBLE *pIAccessible );
}




//
//
//  Annotation interfaces
//
//



typedef enum AnnoScope
{
    ANNO_THIS       = 0,    // Just this object
    ANNO_CONTAINER  = 1,    // This object, plus immediate children
} AnnoScope;



typedef GUID MSAAPROPID;


// This interface is used to expose an identity string that is used as a key
// into the annotation database.
[
    object,
    uuid(7852b78d-1cfd-41c1-a615-9c0c85960b5f),
    pointer_default(unique)
]
interface IAccIdentity: IUnknown
{
    HRESULT GetIdentityString (
        [in]                                DWORD               dwIDChild,

        [out, size_is(, *pdwIDStringLen )]  BYTE **             ppIDString,
        [out]                               DWORD *             pdwIDStringLen
    );
};



[
    object,
    uuid(76c0dbbb-15e0-4e7b-b61b-20eeea2001e0),
    pointer_default(unique)
]
interface IAccPropServer: IUnknown
{
    HRESULT GetPropValue (
        [in, size_is(dwIDStringLen)]        const BYTE *        pIDString,
        [in]                                DWORD               dwIDStringLen,

        [in]                                MSAAPROPID          idProp,
        [out]                               VARIANT *           pvarValue,
        [out]                               BOOL *              pfHasProp );
};


[
    object,
    uuid(6e26e776-04f0-495d-80e4-3330352e3169),
    pointer_default(unique)
]
interface IAccPropServices: IUnknown
{
    HRESULT SetPropValue (
        [in, size_is(dwIDStringLen)]        const BYTE *        pIDString,
        [in]                                DWORD               dwIDStringLen,

        [in]                                MSAAPROPID          idProp,
        [in]                                VARIANT             var
    );


    HRESULT SetPropServer (
        [in, size_is(dwIDStringLen)]        const BYTE *        pIDString,
        [in]                                DWORD               dwIDStringLen,

        [in, size_is(cProps)]               const MSAAPROPID *  paProps,
        [in]                                int                 cProps,

        [in]                                IAccPropServer *    pServer,
        [in]                                AnnoScope           annoScope
    );


    HRESULT ClearProps (
        [in, size_is(dwIDStringLen)]        const BYTE *        pIDString,
        [in]                                DWORD               dwIDStringLen,

        [in, size_is(cProps)]               const MSAAPROPID *  paProps,
        [in]                                int                 cProps
    );




    // Quick OLEACC/HWND-based functionality

    HRESULT SetHwndProp (
        [in]                                HWND                hwnd,
        [in]                                DWORD               idObject,
        [in]                                DWORD               idChild,
        [in]                                MSAAPROPID          idProp,
        [in]                                VARIANT             var
    );

    HRESULT SetHwndPropStr (
        [in]                                HWND                hwnd,
        [in]                                DWORD               idObject,
        [in]                                DWORD               idChild,
        [in]                                MSAAPROPID          idProp,
        [in, string]                        LPCWSTR             str
    );

    HRESULT SetHwndPropServer (
        [in]                                HWND                hwnd,
        [in]                                DWORD               idObject,
        [in]                                DWORD               idChild,

        [in, size_is(cProps)]               const MSAAPROPID *  paProps,
        [in]                                int                 cProps,

        [in]                                IAccPropServer *    pServer,
        [in]                                AnnoScope           annoScope
    );

    HRESULT ClearHwndProps (
        [in]                                HWND                hwnd,
        [in]                                DWORD               idObject,
        [in]                                DWORD               idChild,

        [in, size_is(cProps)]               const MSAAPROPID *  paProps,
        [in]                                int                 cProps
    );



    // Methods for composing/decomposing HWND based identity strings...

    HRESULT ComposeHwndIdentityString (
        [in]                                HWND                hwnd,
        [in]                                DWORD               idObject,
        [in]                                DWORD               idChild,

        [out, size_is(, *pdwIDStringLen )]  BYTE **             ppIDString,
        [out]                               DWORD *             pdwIDStringLen
    );


    HRESULT DecomposeHwndIdentityString (
        [in, size_is(dwIDStringLen)]        const BYTE *        pIDString,
        [in]                                DWORD               dwIDStringLen,

        [out]                               HWND *              phwnd,
        [out]                               DWORD *             pidObject,
        [out]                               DWORD *             pidChild
    );



    // Quick OLEACC/HMENU-based functionality

    HRESULT SetHmenuProp (
        [in]                                HMENU               hmenu,
        [in]                                DWORD               idChild,
        [in]                                MSAAPROPID          idProp,
        [in]                                VARIANT             var
    );

    HRESULT SetHmenuPropStr (
        [in]                                HMENU               hmenu,
        [in]                                DWORD               idChild,
        [in]                                MSAAPROPID          idProp,
        [in, string]                        LPCWSTR             str
    );

    HRESULT SetHmenuPropServer (
        [in]                                HMENU               hmenu,
        [in]                                DWORD               idChild,

        [in, size_is(cProps)]               const MSAAPROPID *  paProps,
        [in]                                int                 cProps,

        [in]                                IAccPropServer *    pServer,
        [in]                                AnnoScope           annoScope
    );

    HRESULT ClearHmenuProps (
        [in]                                HMENU               hmenu,
        [in]                                DWORD               idChild,

        [in, size_is(cProps)]               const MSAAPROPID *  paProps,
        [in]                                int                 cProps
    );


    // Methods for composing/decomposing HMENU based identity strings...

    HRESULT ComposeHmenuIdentityString (
        [in]                                HMENU               hmenu,
        [in]                                DWORD               idChild,

        [out, size_is(, *pdwIDStringLen )]  BYTE **             ppIDString,
        [out]                               DWORD *             pdwIDStringLen
    );


    HRESULT DecomposeHmenuIdentityString (
        [in, size_is(dwIDStringLen)]        const BYTE *        pIDString,
        [in]                                DWORD               dwIDStringLen,

        [out]                               HMENU *             phmenu,
        [out]                               DWORD *             pidChild
    );
};




cpp_quote("")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Type Library Definitions")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")

[
    uuid(1ea4dbf0-3c3b-11cf-810c-00aa00389b71),
    lcid(0),
    version(1.1),
    hidden
]

library Accessibility 
{
	importlib ("stdole2.tlb");
	interface	IAccessible;
	interface	IAccessibleHandler;

	interface	IAccIdentity;
	interface	IAccPropServer;
	interface	IAccPropServices;

	[
		uuid(b5f8350b-0548-48b1-a6ee-88bd00b4a5e7)
	]
	coclass CAccPropServices
	{
		interface IAccPropServices;
	}
}

