2016-09-22 4 views
9

Я хотел бы знать, в .NET, если (управляемый) Microsoft UI Automation основы обеспечивает некоторый способ для создания экземпляра AutomationElement типа заданного значения окна AutomationId, подавляя таким образом необходимость поиска окна с помощью дескриптора окна или другого идентификатора.Может ли быть создан экземпляр типа AutomationElement с учетом значения AutomationId?

Псевдо пример написанный в VB.NET, чтобы понять свою цель:

Dim automationId As Integer = 1504 
Dim element As AutomationElement = AutomationElement.FromAutomationId(automationId) 
+0

Лучшее, что я мог найти, это [это] (https://msdn.microsoft.com/en-us/library/aa349646 (v = vs.110) .aspx). В противном случае я бы сказал, постройте свои собственные классы (если возможно) и заткните/переопределите свойство 'AutomationId'. Затем, когда выполняется его сеттер, вы сохраняете «окно»/«управление» в глобальном, общем списке/словаре. –

+0

@Visual Vincent Thankyou, «проблема», которую я вижу, заключается в том, что это решение является методологией поиска, а также нужно, чтобы AutomationElement выполнял поиск по своим элементам - дорогому алгоритму поиска. Я хотел бы знать, существует ли более «прямой» способ избежать всего этого. – ElektroStudios

ответ

3

Ну, нет. Любое свойство автоматизации является свойством элемента. Элементы автоматизации необязательно соответствуют HWND (каждый HWND имеет элемент автоматизации, но очень немногие элементы автоматизации имеют HWND, особенно в современных интерфейсах пользовательского интерфейса), и поэтому требуется прогулка по дереву. Кроме того, приятная вещь в UI Automation заключается в том, что древовидная прогулка происходит со стороны провайдера, а не в вашем приложении, что сокращает количество перекрестных вызовов.