Получить вложенный элемент с использованием uiautomation elementfromcursor () не удалось, но с успешной информацией о доC#

Место общения программистов C#
Ответить
Anonymous
 Получить вложенный элемент с использованием uiautomation elementfromcursor () не удалось, но с успешной информацией о до

Сообщение Anonymous »

Я пытаюсь использовать библиотеку uiautomationClient в .net, чтобы получить элемент под курсором мыши с использованием elementFrompoint (). Это работает в целом, но когда я нажимаю на любые элементы на слайдах PowerPoint, я могу получить только элемент внешнего панели, а не глубоко вложенные элементы. < /P>
Однако, если я открываю insights.exe < /strong> для Windows в заднем плане, он может получить вложенный элемент (ChistryPe ControlPe является Image), и вдруг мой код также может увидеть, что элементы, которые можно увидеть, не вдруг. Здесь "src =" https://i.sstatic.net/j897ptfd.png "/>
Вот мой код:
public static IUIAutomationElement getElementFromCursor(int x, int y) {
CursorPoint cp = new CursorPoint(x, y);
GetPhysicalCursorPos(ref cp);
System.Windows.Point point = new System.Windows.Point(cp.X, cp.Y);
IUIAutomationElement element = null;

tagPOINT p = new tagPOINT();
p.x = (int)point.X;
p.y = (int)point.Y;
try {
element = cui.ElementFromPoint(p);
} catch (COMException) {
return null;
} catch (TimeoutException) {
} catch (Exception) {
}

return FindDeepestContainingPoint(cui, element, p);
}

private static IUIAutomationElement FindDeepestContainingPoint(CUIAutomation cui, IUIAutomationElement element, tagPOINT pt) {
IUIAutomationTreeWalker walker = cui.RawViewWalker;

IUIAutomationElement child = walker.GetFirstChildElement(element);
IUIAutomationElement result = null;

while (child != null) {
double left, top, width, height;
left = child.CurrentBoundingRectangle.left;
top = child.CurrentBoundingRectangle.top;
width = child.CurrentBoundingRectangle.right - child.CurrentBoundingRectangle.left;
height = child.CurrentBoundingRectangle.bottom - child.CurrentBoundingRectangle.top;

if (PointInRect(pt, left, top, width, height)) {
result = FindDeepestContainingPoint(cui, child, pt);
if (result != null)
return result;
}

child = walker.GetNextSiblingElement(child);
}

return element;
}
< /code>
Это заставляет меня думать, что доступность каким -то образом заставляет Powerpoint раскрыть больше своего дерева Uiautomation. Есть ли что -то, что делает Insights Insights (например, инициализация событий или «пробуждение» дерева UIAutomation), которое я могу воспроизвести в своем собственном коде, чтобы получить доступ к тому же уровню детализации?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... with-acces
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»