前段时间,我一直认为,通过AutoIt进行自动化操作,也只有几个方法可以用,它们只是controlClick, controlsend等如下图:
我一直认为,AutoIt的所有的GUI 方法,都是用来创建界面使用的。
今天,开发找我,让我把他的一个GUI页面上所有的资源获取下来:
页面上一个ListView中,一共有大约70个list,我现在需要遍历这70个list,然后当该list获取焦点的时候,右键点击,然后在弹出框中点击第二个选项,从而保存图片?
我一直期待能找到一个函数,比喻:ControlGetFocusPos,可是没有这个函数,mouseGetPos函数只能获取鼠标所在的位置,google搜索也得不到想要的答案。
问题最终还是被我解决了:
1. 遍历每个list的位置坐标X, Y;
2. 在该坐标上右键点击;
3. 用键盘上的Down和Enter键,点击弹出框的第二个按钮;
4. 保存相应资源
具体代码如下:
#include <GuiListView.au3> ;获取窗口句柄 $handle = WinGetHandle(".NET Reflector 6") WinActivate($handle) ;获取控件句柄; $control = ControlGetHandle($handle,"","WindowsForms10.SysListView32.app.0.232467a_r11_ad11") ;获取列表中List数目 $count = ControlListView($handle,"",$control,"GetItemCount") for $i = 1 to 10 ;获取位置信息 $x = _GUICtrlListView_GetItemPositionX($control, $i-1) $y = _GUICtrlListView_GetItemPositionY($control, $i-1) ControlClick($handle,"", $control,"right",1, $x, $y) ControlSend($handle,"",$control,"{down 2}{enter}") WinWait("Save As") WinWaitActive("Save As") $handle2 = WinGetHandle("Save As") ControlSetText($handle2,"", "Edit1", "C:UserschenpassionDesktopAutoitpic" & $i & ".png") ControlClick($handle2,"","Button1") WinWaitClose("Save As") ControlSend($handle,"",$control,"{down}") Next
看来又有得深入学习了!
_GUICtrl***函数,是非常强大的,可以做更多的识别页面元素,操作Windows GUI 控件。