Другой вариант - попробовать использовать собственный Windows UIA API через управляемую оболочку, созданную инструментом tlbimp. В качестве теста я просто сгенерировал обертку следующим образом ...
"C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ x64 \ tlbimp.exe" c: \ windows \ system32 \ uiautomationcore.dll /out:Interop.UIAutomationCore. dll
Затем я написал приведенный ниже код и сослался на оболочку в проекте C #.
Код получает элемент UIA в интересующей нас точке и запрашивает информацию о том, поддерживает ли элемент шаблон Value, и должна быть кэширована в то время, когда мы получим элемент. Это означает, что когда у нас есть элемент, мы можем узнать, поддерживает ли он шаблон Value, без необходимости делать еще один перекрестный вызов.
Было бы интересно сравнить производительность этого кода, работающего с интересующим вас элементом, по сравнению с управляемым .NET UIA API и использованием 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...
}
person
Guy Barker - Microsoft
schedule
22.09.2015