经过尝试,对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在有些情况下并不需要分的那么清楚