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 的问题。
我有以下代码:
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 的问题。