from_point 函数没有 returns windows CMD 上的预期控制

from_point function does not returns the expected control on windows CMD

我有以下代码:

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 and/or parent 来克服这种情况。值得一提的是,我还没有发现任何其他应用程序有相同的行为,但可能是其他一些应用程序也有这个问题。

  • 可以使用 'Inspect.exe' 重现此行为: 如果您将鼠标光标悬停在 Windows CMD 上,它只会找到“文本区域”控件。要找到其他控件,您必须单击检查 GUI.

    中的树
  • 用Pywinauto也是一样的: 如果您将鼠标光标悬停在 Windows CMD 上,它只会找到“文本区域”控件。 要找到其他控件,您必须执行以下代码: 打印(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)))

它正在使用来自 UIAutomationCore.dll

的 MS UI 自动化 API 功能

所以我认为这可能是 iuia.ElementFromPoint 的问题。