Я пытаюсь использовать библиотеку 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
Получить вложенный элемент с использованием uiautomation elementfromcursor () не удалось, но с успешной информацией о до ⇐ C#
Место общения программистов C#
1749992839
Anonymous
Я пытаюсь использовать библиотеку [b] uiautomationClient [/b] в .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), которое я могу воспроизвести в своем собственном коде, чтобы получить доступ к тому же уровню детализации?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79666568/get-nested-element-using-uiautomation-elementfromcursor-failed-but-with-acces[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия