如何解决from_point 函数不会在 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
和/或 parent
来克服这种情况。值得一提的是,我还没有发现任何其他应用程序具有相同的行为,但可能其他一些应用程序也存在此问题。
解决方法
-
可以使用“Inspect.exe”重现此行为: 如果您将鼠标光标悬停在 Windows CMD 上,它只会找到“文本区域”控件。要找到其他控件,您必须单击检查 GUI 中的树。
-
对于 Pywinauto,情况相同: 如果您将鼠标光标悬停在 Windows CMD 上,它只会找到“文本区域”控件。 要找到其他控件,您必须执行以下代码: 打印(control.top_level_parent().descendants())
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 的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。