Invantive Query Tool Multi-Platform can be used with a screen reader and driven by a program, such as a test tool or an AI assistant, through the accessibility interface of the operating system: Microsoft UI Automation on Microsoft Windows. This topic describes what such a client finds. ## Names and Descriptions Every button, field, tab and menu entry has a name, which is the text on screen in the language of the product. A control with a tool tip has the same text as its description, so a client reads what the control does and not only what it is called. A column of a result has a filter button and a menu button named after the column. ## Identifiers Every control also has an identifier that does not change with the language of the product, such as `ExecuteButton`, `SqlEditor`, `LogOnButton` or `Results`. A program that must work in every language selects on the identifier, not on the name. The identifiers of the cells of a result are made of the position: `ResultsRow_2` is the second row and `ResultsCell_2_1` its first cell. The identifiers of the two elements below are part of the interface of the product. The others follow the layout of the window and can change with a release. ## Messages and the State of a Statement A client does not have to read the Messages pane or wait for a progress bar. Two texts in the main window, which do not show on screen, report what happens: | Identifier | Contains | |---|---| | `AnnouncerText` | The last message, with its message code when it has one. | | `OperationState` | `idle` when nothing runs, `running` while a statement runs, `done` when it ended, `failed` when it ended with an error, and `cancelled` when you stopped it with Cancel. | Both are live regions: a screen reader announces a change without being asked. An example with the database `Demo\Data Dictionary`, which uses the `Dummy` platform and needs no credentials. After `select name, type from SystemTables@DataDictionary limit 5` the state is `done` and the last message reads `Select: 5 row(s) in 1.857 ms.` After a statement on a table that does not exist the state is `failed` and the last message starts with the message code: `itgengpr015: Unknown table 'TABLE_THAT_DOES_NOT_EXIST_XYZ'.` After Cancel on a statement that is still running the state is `cancelled` and the last message reads `Cancelled.` ## Reading a Result A result is a grid named `Results`. A client reads the rows that are visible and scrolls the grid to read the next ones; a result of a million rows is read in as many steps as the client asks for. Row numbers and cell values are available as text. ## Trying It Without Real Data Define a database on the `Dummy` platform, as described in [[Invantive Query Tool Multi-Platform/Adding a Database|Adding a Database]]. It needs no credentials and holds fixed data, so a script gives the same answer every time. ## Limitations - The Windows version of the product, [[Invantive Query Tool/Invantive Query Tool|Invantive Query Tool]], is also readable by a screen reader, but its identifiers of tree rows and of items of a tool bar made in code follow the language of the product. - On Linux and MacOS the accessibility interface of those systems is used. Names and identifiers are the same, but this has not been checked on those systems.