функция from_point не возвращает ожидаемый элемент управления в Windows CMD

#python #ui-automation #pywinauto

Вопрос:

У меня есть следующий код:

 from pywinauto import Desktop
from pyautogui import position

while True:
    desktop = Desktop(backend="uia")
    control = desktop.from_point(*position())
    control.draw_outline()
 

Таким образом, в каждом цикле кода pywinauto рисует зеленый прямоугольник на элементе управления текущей позицией мыши. Подобный этому:
с точки зрения

Но исключительно в приложении CMD from_point функция не находит строку состояния и полосу прокрутки. Он находит только текстовую область.

введите описание изображения здесь

Я думаю, что это что-то связанное с приложением CMD, вероятно, оно рисует свой элемент управления текстовой областью перед всеми остальными элементами управления. Поэтому я хочу знать, возможно ли преодолеть эту ситуацию , используя функции top_from_point и/или parent , возможно. Стоит отметить, что я не нашел ни одного другого приложения с таким же поведением, но, возможно, у какого-то другого приложения также есть эта проблема.

Ответ №1:

  • Это поведение может быть воспроизведено с помощью ‘Inspect.exe’: Если вы наведете курсор мыши на CMD Windows, он найдет только элемент управления «Текстовая область». Чтобы найти другие элементы управления, вы должны щелкнуть по дереву в графическом интерфейсе проверки.
  • С Pywinauto то же самое: если вы наведете курсор мыши на командную строку Windows, она найдет только элемент управления «Текстовая область». Чтобы найти другие элементы управления, необходимо выполнить следующий код: print(control.top_level_parent().потомки())

Реализация from_point находится в uia_element_info.py:

 @classmethod
def from_point(cls, x, y):
    return cls(IUIA().iuia.ElementFromPoint(tagPOINT(x, y)))
 

Он использует функцию API автоматизации пользовательского интерфейса MS от UIAutomationCore.dll

Поэтому я предполагаю, что это может быть проблема iuia.Элемент из точки.

Комментарии:

1. Я также пробовал использовать другие инструменты автоматизации, но произошло то же самое поведение. Спасибо, Дэвид.