一:问题描述
问题一:通过查找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)
问题二:这个问题困扰了好久,从网上查了好多资料,还是没能解决这个问题。