# type: ignore import enum import os import comtypes.client # Get IAccessible2 constants for helper functions below ia2_tlb = os.path.join( os.path.dirname(os.path.realpath(__file__)), "ia2_api_all.tlb", ) ia2_mod = comtypes.client.GetModule(ia2_tlb) # Add to globals the many IAccessible2 constants. These will also be imported # when this file is imported. globals().update((k, getattr(ia2_mod, k)) for k in ia2_mod.__all__) class Role(enum.IntEnum): # MSAA roles - constants not provided via oleacc ROLE_SYSTEM_TITLEBAR = 1 ROLE_SYSTEM_MENUBAR = 2 ROLE_SYSTEM_SCROLLBAR = 3 ROLE_SYSTEM_GRIP = 4 ROLE_SYSTEM_SOUND = 5 ROLE_SYSTEM_CURSOR = 6 ROLE_SYSTEM_CARET = 7 ROLE_SYSTEM_ALERT = 8 ROLE_SYSTEM_WINDOW = 9 ROLE_SYSTEM_CLIENT = 10 ROLE_SYSTEM_MENUPOPUP = 11 ROLE_SYSTEM_MENUITEM = 12 ROLE_SYSTEM_TOOLTIP = 13 ROLE_SYSTEM_APPLICATION = 14 ROLE_SYSTEM_DOCUMENT = 15 ROLE_SYSTEM_PANE = 16 ROLE_SYSTEM_CHART = 17 ROLE_SYSTEM_DIALOG = 18 ROLE_SYSTEM_BORDER = 19 ROLE_SYSTEM_GROUPING = 20 ROLE_SYSTEM_SEPARATOR = 21 ROLE_SYSTEM_TOOLBAR = 22 ROLE_SYSTEM_STATUSBAR = 23 ROLE_SYSTEM_TABLE = 24 ROLE_SYSTEM_COLUMNHEADER = 25 ROLE_SYSTEM_ROWHEADER = 26 ROLE_SYSTEM_COLUMN = 27 ROLE_SYSTEM_ROW = 28 ROLE_SYSTEM_CELL = 29 ROLE_SYSTEM_LINK = 30 ROLE_SYSTEM_HELPBALLOON = 31 ROLE_SYSTEM_CHARACTER = 32 ROLE_SYSTEM_LIST = 33 ROLE_SYSTEM_LISTITEM = 34 ROLE_SYSTEM_OUTLINE = 35 ROLE_SYSTEM_OUTLINEITEM = 36 ROLE_SYSTEM_PAGETAB = 37 ROLE_SYSTEM_PROPERTYPAGE = 38 ROLE_SYSTEM_INDICATOR = 39 ROLE_SYSTEM_GRAPHIC = 40 ROLE_SYSTEM_STATICTEXT = 41 ROLE_SYSTEM_TEXT = 42 ROLE_SYSTEM_PUSHBUTTON = 43 ROLE_SYSTEM_CHECKBUTTON = 44 ROLE_SYSTEM_RADIOBUTTON = 45 ROLE_SYSTEM_COMBOBOX = 46 ROLE_SYSTEM_DROPLIST = 47 ROLE_SYSTEM_PROGRESSBAR = 48 ROLE_SYSTEM_DIAL = 49 ROLE_SYSTEM_HOTKEYFIELD = 50 ROLE_SYSTEM_SLIDER = 51 ROLE_SYSTEM_SPINBUTTON = 52 ROLE_SYSTEM_DIAGRAM = 53 ROLE_SYSTEM_ANIMATION = 54 ROLE_SYSTEM_EQUATION = 55 ROLE_SYSTEM_BUTTONDROPDOWN = 56 ROLE_SYSTEM_BUTTONMENU = 57 ROLE_SYSTEM_BUTTONDROPDOWNGRID = 58 ROLE_SYSTEM_WHITESPACE = 59 ROLE_SYSTEM_PAGETABLIST = 60 ROLE_SYSTEM_CLOCK = 61 ROLE_SYSTEM_SPLITBUTTON = 62 ROLE_SYSTEM_IPADDRESS = 63 ROLE_SYSTEM_OUTLINEBUTTON = 64 # IAccessible2 roles IA2_ROLE_CANVAS = ia2_mod.IA2_ROLE_CANVAS IA2_ROLE_CAPTION = ia2_mod.IA2_ROLE_CAPTION IA2_ROLE_CHECK_MENU_ITEM = ia2_mod.IA2_ROLE_CHECK_MENU_ITEM IA2_ROLE_COLOR_CHOOSER = ia2_mod.IA2_ROLE_COLOR_CHOOSER IA2_ROLE_DATE_EDITOR = ia2_mod.IA2_ROLE_DATE_EDITOR IA2_ROLE_DESKTOP_ICON = ia2_mod.IA2_ROLE_DESKTOP_ICON IA2_ROLE_DESKTOP_PANE = ia2_mod.IA2_ROLE_DESKTOP_PANE IA2_ROLE_DIRECTORY_PANE = ia2_mod.IA2_ROLE_DIRECTORY_PANE IA2_ROLE_EDITBAR = ia2_mod.IA2_ROLE_EDITBAR IA2_ROLE_EMBEDDED_OBJECT = ia2_mod.IA2_ROLE_EMBEDDED_OBJECT IA2_ROLE_ENDNOTE = ia2_mod.IA2_ROLE_ENDNOTE IA2_ROLE_FILE_CHOOSER = ia2_mod.IA2_ROLE_FILE_CHOOSER IA2_ROLE_FONT_CHOOSER = ia2_mod.IA2_ROLE_FONT_CHOOSER IA2_ROLE_FOOTER = ia2_mod.IA2_ROLE_FOOTER IA2_ROLE_FOOTNOTE = ia2_mod.IA2_ROLE_FOOTNOTE IA2_ROLE_FORM = ia2_mod.IA2_ROLE_FORM IA2_ROLE_FRAME = ia2_mod.IA2_ROLE_FRAME IA2_ROLE_GLASS_PANE = ia2_mod.IA2_ROLE_GLASS_PANE IA2_ROLE_HEADER = ia2_mod.IA2_ROLE_HEADER IA2_ROLE_HEADING = ia2_mod.IA2_ROLE_HEADING IA2_ROLE_ICON = ia2_mod.IA2_ROLE_ICON IA2_ROLE_IMAGE_MAP = ia2_mod.IA2_ROLE_IMAGE_MAP IA2_ROLE_INPUT_METHOD_WINDOW = ia2_mod.IA2_ROLE_INPUT_METHOD_WINDOW IA2_ROLE_INTERNAL_FRAME = ia2_mod.IA2_ROLE_INTERNAL_FRAME IA2_ROLE_LABEL = ia2_mod.IA2_ROLE_LABEL IA2_ROLE_LAYERED_PANE = ia2_mod.IA2_ROLE_LAYERED_PANE IA2_ROLE_NOTE = ia2_mod.IA2_ROLE_NOTE IA2_ROLE_OPTION_PANE = ia2_mod.IA2_ROLE_OPTION_PANE IA2_ROLE_PAGE = ia2_mod.IA2_ROLE_PAGE IA2_ROLE_PARAGRAPH = ia2_mod.IA2_ROLE_PARAGRAPH IA2_ROLE_RADIO_MENU_ITEM = ia2_mod.IA2_ROLE_RADIO_MENU_ITEM IA2_ROLE_REDUNDANT_OBJECT = ia2_mod.IA2_ROLE_REDUNDANT_OBJECT IA2_ROLE_ROOT_PANE = ia2_mod.IA2_ROLE_ROOT_PANE IA2_ROLE_RULER = ia2_mod.IA2_ROLE_RULER IA2_ROLE_SCROLL_PANE = ia2_mod.IA2_ROLE_SCROLL_PANE IA2_ROLE_SECTION = ia2_mod.IA2_ROLE_SECTION IA2_ROLE_SHAPE = ia2_mod.IA2_ROLE_SHAPE IA2_ROLE_SPLIT_PANE = ia2_mod.IA2_ROLE_SPLIT_PANE IA2_ROLE_TEAR_OFF_MENU = ia2_mod.IA2_ROLE_TEAR_OFF_MENU IA2_ROLE_TERMINAL = ia2_mod.IA2_ROLE_TERMINAL IA2_ROLE_TEXT_FRAME = ia2_mod.IA2_ROLE_TEXT_FRAME IA2_ROLE_TOGGLE_BUTTON = ia2_mod.IA2_ROLE_TOGGLE_BUTTON IA2_ROLE_UNKNOWN = ia2_mod.IA2_ROLE_UNKNOWN IA2_ROLE_VIEW_PORT = ia2_mod.IA2_ROLE_VIEW_PORT IA2_ROLE_COMPLEMENTARY_CONTENT = ia2_mod.IA2_ROLE_COMPLEMENTARY_CONTENT IA2_ROLE_LANDMARK = ia2_mod.IA2_ROLE_LANDMARK IA2_ROLE_LEVEL_BAR = ia2_mod.IA2_ROLE_LEVEL_BAR IA2_ROLE_CONTENT_DELETION = ia2_mod.IA2_ROLE_CONTENT_DELETION IA2_ROLE_CONTENT_INSERTION = ia2_mod.IA2_ROLE_CONTENT_INSERTION IA2_ROLE_BLOCK_QUOTE = ia2_mod.IA2_ROLE_BLOCK_QUOTE IA2_ROLE_MARK = ia2_mod.IA2_ROLE_MARK IA2_ROLE_SUGGESTION = ia2_mod.IA2_ROLE_SUGGESTION IA2_ROLE_COMMENT = ia2_mod.IA2_ROLE_COMMENT class MsaaState(enum.IntFlag): STATE_SYSTEM_UNAVAILABLE = 0x00000001 STATE_SYSTEM_SELECTED = 0x00000002 STATE_SYSTEM_FOCUSED = 0x00000004 STATE_SYSTEM_PRESSED = 0x00000008 STATE_SYSTEM_CHECKED = 0x00000010 STATE_SYSTEM_MIXED = 0x00000020 STATE_SYSTEM_READONLY = 0x00000040 STATE_SYSTEM_HOTTRACKED = 0x00000080 STATE_SYSTEM_DEFAULT = 0x00000100 STATE_SYSTEM_EXPANDED = 0x00000200 STATE_SYSTEM_COLLAPSED = 0x00000400 STATE_SYSTEM_BUSY = 0x00000800 STATE_SYSTEM_FLOATING = 0x00001000 STATE_SYSTEM_MARQUEED = 0x00002000 STATE_SYSTEM_ANIMATED = 0x00004000 STATE_SYSTEM_INVISIBLE = 0x00008000 STATE_SYSTEM_OFFSCREEN = 0x00010000 STATE_SYSTEM_SIZEABLE = 0x00020000 STATE_SYSTEM_MOVEABLE = 0x00040000 STATE_SYSTEM_SELFVOICING = 0x00080000 STATE_SYSTEM_FOCUSABLE = 0x00100000 STATE_SYSTEM_SELECTABLE = 0x00200000 STATE_SYSTEM_LINKED = 0x00400000 STATE_SYSTEM_TRAVERSED = 0x00800000 STATE_SYSTEM_MULTISELECTABLE = 0x01000000 STATE_SYSTEM_EXTSELECTABLE = 0x02000000 STATE_SYSTEM_ALERT_LOW = 0x04000000 STATE_SYSTEM_ALERT_MEDIUM = 0x08000000 STATE_SYSTEM_ALERT_HIGH = 0x10000000 STATE_SYSTEM_PROTECTED = 0x20000000 STATE_SYSTEM_HASPOPUP = 0x40000000 class Ia2State(enum.IntFlag): IA2_STATE_ACTIVE = ia2_mod.IA2_STATE_ACTIVE IA2_STATE_ARMED = ia2_mod.IA2_STATE_ARMED IA2_STATE_CHECKABLE = ia2_mod.IA2_STATE_CHECKABLE IA2_STATE_DEFUNCT = ia2_mod.IA2_STATE_DEFUNCT IA2_STATE_EDITABLE = ia2_mod.IA2_STATE_EDITABLE IA2_STATE_HORIZONTAL = ia2_mod.IA2_STATE_HORIZONTAL IA2_STATE_ICONIFIED = ia2_mod.IA2_STATE_ICONIFIED IA2_STATE_INVALID_ENTRY = ia2_mod.IA2_STATE_INVALID_ENTRY IA2_STATE_MANAGES_DESCENDANTS = ia2_mod.IA2_STATE_MANAGES_DESCENDANTS IA2_STATE_MODAL = ia2_mod.IA2_STATE_MODAL IA2_STATE_MULTI_LINE = ia2_mod.IA2_STATE_MULTI_LINE IA2_STATE_OPAQUE = ia2_mod.IA2_STATE_OPAQUE IA2_STATE_PINNED = ia2_mod.IA2_STATE_PINNED IA2_STATE_REQUIRED = ia2_mod.IA2_STATE_REQUIRED IA2_STATE_SELECTABLE_TEXT = ia2_mod.IA2_STATE_SELECTABLE_TEXT IA2_STATE_SINGLE_LINE = ia2_mod.IA2_STATE_SINGLE_LINE IA2_STATE_STALE = ia2_mod.IA2_STATE_STALE IA2_STATE_SUPPORTS_AUTOCOMPLETION = ia2_mod.IA2_STATE_SUPPORTS_AUTOCOMPLETION IA2_STATE_TRANSIENT = ia2_mod.IA2_STATE_TRANSIENT IA2_STATE_VERTICAL = ia2_mod.IA2_STATE_VERTICAL def msaa_state_list_to_string(states): state_strings = [] for state in MsaaState: if states & state: state_strings.append(state.name.removeprefix("STATE_SYSTEM_")) return state_strings def state_list_to_string(states): state_strings = [] for state in Ia2State: if states & state: state_strings.append(state.name.removeprefix("IA2_STATE_")) return state_strings