Другой вариант - попробовать использовать собственный API UIA Windows через управляемую оболочку, сгенерированную инструментом tlbimp. В качестве теста я просто сгенерировал обертку следующим образом:
«C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Инструменты \ x64 \ tlbimp .exe "c: \ windows \ system32 \ uiautomationcore.dll /out:Interop.UIAutomationCore.dll
Затем я написал код ниже и ссылался на обертку в проекте C#.
Код получает элемент МАУ в интересующей точке и запрашивает, чтобы информация о том, поддерживает ли элемент шаблон значения, должна быть кэширована в момент получения элемента. Это означает, что после того, как мы получим этот элемент, мы можем узнать, поддерживает ли он шаблон Value без необходимости повторного вызова.
Было бы интересно сравнить производительность этого кода, работающего над интересующим вас элементом, относительно управляемого .NET API UIA и использования UIAComWrapper.
IUIAutomation uiAutomation = new CUIAutomation8();
int patternIdValue = 10002; // UIA_ValuePatternId
IUIAutomationCacheRequest cacheRequestValuePattern = uiAutomation.CreateCacheRequest();
cacheRequestValuePattern.AddPattern(patternIdValue);
IUIAutomationElement element = uiAutomation.ElementFromPointBuildCache(pt, cacheRequestValuePattern);
IUIAutomationValuePattern valuePattern = element.GetCachedPattern(patternIdValue);
if (valuePattern != null)
{
// Element supports the Value pattern...
}