Source code
Revision control
Copy as Markdown
Other Tools
# 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