AutomationElement: кэшированный элемент (через GetCachedChildren) для «живого» элемента - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть ComboBox, содержащий список (который является стандартным для выпадающего списка), который содержит много элементов - более 100. Я хочу найти определенные записи, чтобы выбрать их. Чтобы найти записи, я сравниваю данный шаблон с именем каждого элемента.

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

Здесь возникает проблема: у меня есть правильный индекс, который я хочу, у меня также есть кэшированный AutomationElement, но, поскольку я указал AutomationElementMode.None в CacheRequest (мне все еще нужно проверить, влияет ли это на производительность) невозможно преобразовать кэшированный элемент в элемент, который я могу использовать для будущих вызовов («живой» элемент).

Я пробовал преобразование через NativeWindowHandle (так как есть функция AutomationElement.FromWindowHandle), но дескриптор, кажется, равен 0, так что это не так.

Я также еще не пытался использовать кэшированный SelectionPattern - поскольку ComboBox-ы иногда создаются на заказ, хотя я не знаю, будет ли это работать во всех случаях (если вообще будет).

У меня есть дочерний индекс, я могу получить все значения, которые я могу кэшировать - как я могу получить рабочий / живой AutomationElement кэшированного элемента?

Спасибо Andreas

(использование C # в Windows 7 64 с приложением win32 (в качестве цели автоматизации), хотя это не должно иметь большого значения)

Ответы [ 2 ]

0 голосов
/ 09 августа 2012

На самом деле, использование AutomationElementMode. Ни одна из них не была лучшей идеей.Время, затрачиваемое на кеширование, кажется, лишь незначительно зависит от того, запрашиваете ли вы живой элемент и сколько свойств запрашиваете.(Поправьте меня, если я ошибаюсь - я не проводил систематическое тестирование, но недавно почувствовал это при работе с некоторыми опциями в моем запросе кеша.)

Похоже, что это в основном зависит от количества элементов пользовательского интерфейса, которые вы запрашиваетево-первых.

Так что я мог бы запросить прямую ссылку в первую очередь.

Это заставляет меня задаться вопросом, будет ли доступ через некоторую функцию Win32SDK более быстрым ..

0 голосов
/ 05 июня 2012

У вас есть дочерний текст, который вам нужен в дополнение к указателю? Если это так, можно ли отправить дочерний текст в поле со списком, как если бы пользователь печатал, чтобы выбрать нужного вам ребенка, вместо того, чтобы пытаться получить элемент автоматизации?

Всегда есть IUIAutomationLegacyIAccessiblePattern, к которому можно обратиться, но я думаю, что это только в основном API, а не в клиенте (AutomationElement).

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