经过尝试,对AutoIt中Control和Window有了新的认识,分享一下

1.Control

现在我想对一个WinForm架构的应用程序进行自动化操作,得到控件Advanced Mode属性为[Name:XXX]。

然而在该窗口中有多个相同属性的Control,而依该属性只能操作最靠前的一个,无法获取其它。

尝试解决如下,私自加入Instance属性,[Name:XXX;Instance:i](i=1,2,3,4,...)

顺利达成目的,可以推测,AutoIt获取到的某个控件句柄原本是一个数组,默认取的第一个值

2.Window

仍然是这样的一个WinForm界面,当我获取该界面A下的控件[Name:XXX;Instance:1]执行ControlGetFocus时,

却被强制转移到先前打开的另一个雷同的WinForm界面B,将焦点转移到了那个界面B的雷同Control上,

问题点在于用WinText,WinTitle等都无法分离这两个WinForm窗口,因为它们的属性都一样。

发现,控件[Name:XXX;Instance:1]在大的控件X中,而X是比较独特的

尝试解决如下,先获取控件X的句柄$hWnd(ControlGetHandle),再将$hWnd当做Win的句柄执行ControlGetFocus

顺利解决这一问题,可见,Win和Control在有些情况下并不需要分的那么清楚

05-11 15:20