IAccessible - идентификация контролов
От: Freid  
Дата: 06.09.12 15:48
Оценка:
Добрый день.

Я занимаюсь разработкой программы по автоматизации графического интерфейса и столкнулся с принципиальной проблемой.

Для получения дерева контролов я использую IAccessible интерфейс. Всё прекрасно, но быстро выяснилось, что объекты не имеют никаких уникальных свойств, которые позволяли бы четко идентифицировать каждый конкретный контрол. То есть, прежде всего у них нет никакого уникального ID. Каждый элемент, фактически, имеет всего два свойства — Имя и Роль. Мало того, что имя может меняться, что оно может многократно повторятся внутри одного приложения, так оно еще может вообще быть пустым. Роль — тоже никак не является уникальной. Поэтому нет никакой возможности достоверное определить элемент!

А мне просто необходимо вести точный учет контролов и, более того, хранить всё дерево в базе данных для последующего его использования, при поиске маршрутов к тем или иным контролам.

Собственно, вопрос. Существет ли какая-то возможность идентификации? Хотя бы в рантайме.

Inspect.exe, среди прочих свойств объекта, показывает два поля:

RuntimeId
AnnotationID (в режиме MSAA)

Что это за айди такие? Откуда они берутся и как ими пользоваться? Я гуглил, но не смог найти вообще ничего по этому вопросу.

И еще, Inspect.exe работает в двух режимах: MSAA и UI Automation. В чем их различие??? Разве IAccessible — это не часть MSAA?
msaa ui automation
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.