如何区分pywi​​nauto上的两个控件

时间:2019-01-15 14:00:35

标签: python-3.x windows pywinauto

我正在尝试使用pywinauto创建宏生成器。我正在开发两个应用程序,宏记录器和宏播放器。记录器会监视每个鼠标和键盘事件,然后将其保存到json文件中,以便宏播放器能够重新创建事件。

用户单击元素时,记录器使用以下代码转换鼠标坐标UIAWrapper

def coords_to_UIAWrapper(coords):
    x, y = coords
    elem = IUIA().iuia.ElementFromPoint(tagPOINT(x, y))
    element = UIAElementInfo(elem)
    wrapper = UIAWrapper(element)
    return wrapper

然后,记录器将事件和wrapper.window_text()保存在json文件中,如下所示:

{
    "events": [
        {
            "device": "mouse",
            "action": "press",
            "text": "<TODOS>"
        },
        {
            "device": "mouse",
            "action": "release",
            "text": "<TODOS>"
        }
    ]
}

这是按钮的图像:

Button

但是现在出现了问题,因为程序有多个按钮,其中window_text等于<TODOS>

All buttons

区分那些我认为可以使用以下属性( inspect.exe )的元素:AutomationId, ClassName, RuntimeId, Name, LocalizedControlType,但是对于所有按钮和{{ 1}}每次打开应用程序时都是不同的。因此,我该如何区分两个元素,以便能够序列化事件并将其复制到宏播放器中。

1 个答案:

答案 0 :(得分:0)

有趣的工作!我们正在开发脚本记录器,该记录器将成为pywinauto的一部分(可见的请求将很快创建)。您可以在这里查看架构:'recorder/event_patterns' branch in the fork。我想邀请您参加讨论。一些帮助将是巨大的。 milestone pywinauto 0.7.0

中还有很多问题

解决您的问题的主要想法是让整个UI树与所有父母和孩子在一起。因此,完整的窗口规范可能有助于按父项区分按钮。 best_match算法中还有其他规则可以分隔事物:Getting Started Guide -> How to know magic attribute names