Microsoft Active Accessibility super sloooww при перечислении элементов управления. Помогите! - PullRequest
2 голосов
/ 04 июня 2009

Я использую активную платформу доступности, чтобы перечислить все элементы управления для данной программы. Проблема заключается в том, что когда я пересекаю дерево элементов управления, это всегда требует сложных приложений, таких как explorer или visual studio. Простые приложения занимают около секунды, но большие приложения с большим количеством элементов управления могут занимать 10 секунд. Кто-нибудь испытывает это? Я также нашел некоторые ссылки на использование MSAA в процессе и вне процесса. Что это значит?

1 Ответ

2 голосов
/ 13 сентября 2009

Прежде всего, будьте осторожны при рекурсивном обходе, потому что иногда случается, что в «дереве» есть «циклы», и вы не можете реально надежно сравнить объекты, чтобы увидеть, были ли вы уже на этом объекте ...

Основная причина, почему Active Accessibility является такой медленной, заключается в том, что ее просто не считают рекурсивным, а просто показывают подробности об одном элементе (ниже курсора) или, возможно, его дочерних элементах. Каждый запрос AA (для каждого свойства) должен будет переключать контекст на целевое приложение и обратно. И, если вы делаете АА правильно (с большим количеством описаний, прикрепленных ко всем вашим объектам пользовательского интерфейса), есть просто несколько тысяч объектов, для прохождения которых потребуется время ...

Если вы ищете что-то конкретное, может быть проще запросить это напрямую, а не обходить все элементы управления. Или, если вы ищете только некоторые виды объектов, которые появляются только для HWND с другими свойствами, которые вы знаете, намного быстрее сначала перечислить все HWND, а затем вызвать AccessibleObjectFromWindow для них (что не работает только для окон верхнего уровня , но и для детских окон). При перечислении их дочерних элементов вы можете остановиться, как только изменится свойство HWND.

И добавьте жесткий счетчик макс. Для глубины рекурсии, чтобы избежать попадания в один из этих циклов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...