AutoIt:AutoIt比我想象的更加强大

前段时间,我一直认为,通过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:\Users\chenpassion\Desktop\Autoit\pic\" & $i & ".png")
    ControlClick($handle2,"","Button1")
    WinWaitClose("Save As")
    ControlSend($handle,"",$control,"{down}")
Next

 

看来又有得深入学习了!

_GUICtrl***函数,是非常强大的,可以做更多的识别页面元素,操作Windows GUI 控件。

 

 

posted @ 2013-09-03 17:49  chenpassion  阅读(24004)  评论(1编辑  收藏  举报