我正在尝试使用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>"
}
]
}
这是按钮的图像:
但是现在出现了问题,因为程序有多个按钮,其中window_text
等于<TODOS>
:
区分那些我认为可以使用以下属性( inspect.exe )的元素:AutomationId, ClassName, RuntimeId, Name, LocalizedControlType
,但是对于所有按钮和{{ 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。