Используя Windows.Automation, могу ли я найти элемент AutomationElement по регулярному выражению?
У меня есть дерево объектов, у которого есть объекты строк в родительской таблице. Я пытаюсь поместить все эти строки в AutomationElementCollection
AutomationElementCollection asdf = ParentTableObj.FindAll
(
TreeScope.Children,
new PropertyCondition
(
AutomationElement.NameProperty,
"I want to use regex here"
)
);
Все ряды AutomationElement.NameProperty
содержит строку "строка". Тем не менее, они являются вариациями этой строки - например, "Row1", "Row2", "TopRow", ...
Кажется, я что-то упускаю, так как FindAll
Метод позволяет определить TreeScope
и найти любой AutomationElement
, что соответствует предоставленному Condition
параметр. Я просто хочу, чтобы мое состояние было неограниченным, так как я уже могу контролировать область поиска с помощью TreeScope
,
2 ответа
//Example :
AutomationElement element = FindFirstDescendant(
AutomationElement.FromHandle(windows_hWnd),
(ele)=>Regex.IsMatch( ele.Current.Name, pattern)
);
//The generic method to find a descendant element:
public static AutomationElement FindFirstDescendant(AutomationElement element, Func<AutomationElement, bool> condition) {
var walker = TreeWalker.ControlViewWalker;
element = walker.GetFirstChild(element);
while (element != null) {
if (condition(element))
return element;
var subElement = FindFirstDescendant(element, condition);
if (subElement != null)
return subElement;
element = walker.GetNextSibling(element);
}
return null;
}
Как указано в документации, вы можете запросить сравнение без учета регистра. Нет флага "регулярное выражение". Вам придется выполнить фильтрацию вручную.