pywinauto如何获取gridwindow控件的屏幕位置

一:问题描述

问题一:通过查找pywinauto在线文档,其中没有讲解到gridwindow控件的方法,我不知道这个控件是不是标准控件,还是pywinauto根本就没适配这个控件。从网上查询了好多资料,这类资料是相当的少啊。有一个项目要对这个控件进行操作,要统计这个控件的个数,还要进行控件的右键保存功能。

问题二:这类控件由于没有相关的API方法,无法获取这个gridwindow控件的行信息,列信息及表头信息。

二:解决方案

问题一:通过不断的尝试新方法,虽然这个控件没有API方法,但是这个控件可以通过print_control_identifers()方法打印出来这个控件的屏幕坐标信息,通过从控制台获取打印的信息,并进行处理得到该控件的坐标信息,通过坐标值可以用相对坐标来操作此类控件,具体实现可以看下面的代码:

#获取控制台打印的东西
class TextArea(object):
        def __init__(self):
                self.buffer = []
        def write(self, *args, **kwargs):
                self.buffer.append(args)

#连接工具
app = application.Application()
app.connect_(path = '工具路径')
time.sleep(2)
app = app.top_window_()
time.sleep(2)

stdout = sys.stdout
sys.stdout = TextArea()  #申请的空间
app.print_control_identifiers() #打印控件信息
text_area, sys.stdout = sys.stdout, stdout #获取控件信息
print text_area.buffer

gridlist = []
for tup in text_area.buffer:
        i = tup[0].find('要查找的控件')
        if i > -1:

                locate = []  #用于存控件的坐标
                grid = tup[0][tup[0].find('(')+1:tup[0].find(')')].split(',')
                for gridi in grid:
                        gridj = gridi.strip()
                        gridk = int(gridj[1:])
                        locate.append(gridk)
                       
                gridlist.append(locate)

 问题二:这个问题困扰了好久,从网上查了好多资料,还是没能解决这个问题。

原文地址:https://www.cnblogs.com/ybcao/p/5463030.html