AU3窗口信息工具的使用.docx
《AU3窗口信息工具的使用.docx》由会员分享,可在线阅读,更多相关《AU3窗口信息工具的使用.docx(11页珍藏版)》请在冰豆网上搜索。
AU3窗口信息工具的使用
AU3窗口信息工具的使用
2010-02-2722:
16:
17| 分类:
默认分类| 标签:
|字号大中小 订阅
今天我们来讲一下AU3的一个基本而又重要的功能,自动控制.
所谓的自动控制就是我们通过编写AU3程序来让AU3代替我们去自动做一些事情(知道按键精灵的同学应该理解把)
现在,先在桌面上新建一个文本文档
我想让AU3帮我用鼠标双击打开他,既然要用到鼠标,那我们肯定是使用鼠标相关的函数,通过查找帮助文件,我们发现函数参考分类(AU3所有的内置函数都在这里了)下有一个鼠标管理分类,里面都是鼠标相关操作,继续看,我们发现了MouseClick,鼠标点击,ok就是他了.
我们来看他的函数说明
MouseClick("按钮"[,X坐标,Y坐标[,点击次数[,速度]]])
我们可以看到除了第一个参数以外,其他都是可选参数,也就是说你不给出方括号内的参数,函数也能工作
1.MouseClick("left")
如果只这样写,也可以通过编译,执行.意思是在鼠标当前位置点击一下左键,这显然不能满足我们的要求,我们想AU3去双击我们的新建文本文档.
看第二第三个参数,X坐标,Y坐标.相信顺利通过九年制义务教育的同学都知道,坐标就是通过X坐标和Y坐标来确定的,那么我们怎么知道我们的新建文本文档的坐标是多少呢
这时候我们在AU3安装目录里打开
(也可以在AU3工具箱内打开),这时候打开了窗口信息工具
这时候鼠标点住,查询工具的准星
拖动鼠标至新建文本文档上,松开鼠标
然后点击窗口信息工具的鼠标页
这时候我们看到鼠标页里的坐标属性已经有值了,这就是我们刚才取的新建文本文档在我们电脑屏幕上的坐标,当然你的文档在桌面上的位置和我不同,所以这里的值也会不同.
得到了他的位置我们就可以去点击他了.
1.MouseClick('left',110,571)
我们运行了一下后发现,只是选中了新建文本文档,而不是我们想要的双击打开,这时候我们发现了第四个参数,"点击次数".
1.MouseClick('left',110,571,2)
再运行,终于成功的双击打开了新建文本文档了.到此我们的需求就算实现了,但是实现结果是鼠标飘过去然后点击.似乎我们并不想这样,我们需要鼠标直接去点击.
我们来看MouseClick的最后一个参数"移动速度",那这个速度到底应该怎么设置呢,我们来看参数说明:
[可选参数]鼠标移动速度,可设数值范围在1(最快)和100(最慢)之间.若设置速度为0则立即移动鼠标到指定位置.默认速度为10.
通过说明我们可以了解到,如何我们需要鼠标立即移动过去就设置为0.
1.MouseClick('left',110,571,2,0)
运行一下后发现只有一个字爽.
至此我们已经完成一个解决需求的完整流程:
产生需求-->分析需求-->组织思路-->根据思路寻找函数-->根据函数说明设置参数完成思路-->修改已经完成的程序达到更好的效果.
虽然只有一句代码,但是以上的文章却已经从无到有的详细解释了一边,希望大家可以学习到这种方法,而不是直接复制一些代码去实现某些功能,学会了方法,任何需求都可以简单的应对.
在上一篇里,我们成功的通过AU3控制鼠标打开了一个文本文件,现在我们想往这个文本文件里输入一些文字.
在'函数参考'中的'键盘控制管理'分类中我们找到了Send函数.
现在我们打开一个'新建文本文档'
我们想用AU3来帮我们输入一些文字.
新建一个脚本,写上:
1.Send("我是用AU3打出来的!
")
然后按F5运行,这时候我们发现字是出来了(如果出来的是乱码,请升级到最新版AU3),可是怎么是在SciTE里,并不是我们期望的在文本文档里.
看了函数说明'向激活窗口发送模拟键击操作'后,原来Send函数只是向当前激活的窗口输入,那怎么办呢.
于是我们想给脚本加个延迟,好让我们有时间手动切换记事本窗口来让AU3输入文字.
1.Sleep(2000)
2.Send("我是用AU3打出来的!
")
这样按了F5后,我们用鼠标点一下记事本窗口,2秒后,在记事本窗口就出现"我是用AU3打出来的!
"字了
Sleep函数就是延迟,参数单位为毫秒,上面我们就让脚本开始后暂停了2秒什么都不干,2秒后才Send字符.
那如何自动把记事本设置为激活呢?
ok,打开
把瞄准镜
拖动到记事本窗口中.
因为要操作窗口,于是我们再次查找'函数参考',发现了'窗口管理'分类里有一个'WinActivate'函数,函数说明是:
激活指定的窗口(设置焦点到该窗口,使其成为活动窗口).
看来这就是我们要的函数
第一个参数就是你想激活的窗口的标题,这时候看上图中加亮的部分,这就是记事本的窗口标题于是我们可以这样写.
1.WinActivate("新建文本文档.txt-记事本")
2.Send("我是用AU3打出来的!
")
现在我们就不需要延迟了,因为AU3帮我们激活了记事本窗口.
这里第二个参数是可选参数,但是经验告诉我们AU3函数中的'窗口文本'这个参数,如果不是遇到很多标题相同的窗口的话,一般都是留空或者不填.
问题接着出现了,当我们再新建一个文本文档的时候这个脚本就无效了,那有没有办法可以激活记事本而不管标题是什么呢.
于是我们就去帮助文档(没错,你要的所有东西都在帮助文档里)里找到'使用AutoIt'下的'窗口标题与文本(高级)'.
我们还是看上面的图,注意标题下面有一个类,这里简单提一下什么叫类.
人,男人,女人.这里男人和女人可以看作是不同的窗口标题:
新建文本文档1和新建文本文档2.
而不管男人女人都是人,所以人就是他们的类名.所以我们写上
1.WinActivate("[CLASS:
Notepad]")
2.Send("我是用AU3打出来的!
")
运行一边,是不是不管记事本的标题是什么都可以激活呢,如果同时有很多个记事本被打开,AU3会激活最近被激活的一个窗口.
人总是贪婪的,这种方法能帮我输入了,但是我想让他在后台输入,不激活窗口,行不行?
当然是可以的.
我们再次打开窗口信息工具,把瞄准器拖拉到记事本中心,显示字的地方
你会发现有一个黑框,黑框框起来的区域就是我们要发送文本的控件,这里简单说一下控件.
把人看做一个窗口,耳朵,嘴巴,手,脚都是这个人的控件.
很显然你要对这个人说话,必须对耳朵说,如果你对脚说,这个人是不会理你的.
而我们现在就是要取得记事本接受文本输入的控件,这时候窗口信息工具里显示的是
希望从现在开始就养成用高级模式来确定控件这个习惯,不要使用ID和类别名来确定控件,虽然用高级模式也不是万无一失的,但是可靠度比其他两者来的高
CLASS我们前面说过了就是类,对窗口有类,控件也有类,这里看一下INSTANCE,叫实例,这里又简单的说一下什么叫实例.
人,男人,Sxd,thesnoW,Kodin.人是类,男人是人的一个子类(这里我们先不去管什么叫继承,如果你有兴趣了解OOP,可以自己去google搜索学习下),而Sxd就是男人这个类的实例,同样thesnoW和Kodin也是其他的两个实例.
在记事本里只有一个Edit控件,所以他就是第一个实例,INSTANCE:
1.通过这个我们就能确定是第一个实例化的Edit控件.至于怎么写我们只要双击上图高亮的地方然后粘贴到函数的控件ID参数的地方.
那么我们来看看应该用什么函数来实现我们的需求呢,既然我们知道了发送文本需要发送到控件上,我们就挨个的找哪些函数是控件相关的.
于是我们在'函数参考'下的'窗口管理'分类下的'Controls'(有可能以后的版本会汉化成'控件')里找到了一些操作控件的函数.
ControlSend很显然就是我们要用的根据上面的信息,我们这样写
1.ControlSend("[CLASS:
Notepad]","","[CLASS:
Edit;INSTANCE:
1]","我是用AU3打出来的!
")
这时候我们在SciTe编辑器里按F5的时候发现一点反映都没有,但是我们切换到记事本看看,字已经在后台打出来了.
希望大家可以举一反三,用其他软件来获取信息后发送文本或者按键,send可不是只能用来打字的.
大家可以自己仔细的看一下send的说明和例子,相信看到这里,一些解决需求的方法大家都已经看到过了,现在就是要运用这种方法去解决任何问题.
相信经过前面的文章,大家已经基本掌握了在获得一个需求后,如何去帮助文件里找到解决这个需求所要用到的函数的方法了,所以今后的文章讲不会讲的那么详细(啰嗦),如果还是有同学不太掌握解决需求的方法,请反复阅读前面的文章,学习下解决需求的方法.
在很多时候我们都有一个需求,那就是确定一个窗口的状态(激活,存在),下面就来说说关于窗口的操作.
确定一个窗口的状态首先就是要找到这个窗口,再判断这个窗口的状态.找到窗口最简单的方法就是通过窗口标题.
1.WinActivate("新建文本文档.txt-记事本")
这样就会激活新建文本文档这个记事本窗口.帮助里的说明也很重要大家要仔细看看:
"若同时有多个窗口符合匹配条件则程序将激活最近被激活的窗口,WinActivate在窗口最小化的情况下仍能正常工作.但是,"最顶层"窗口仍将覆盖在被激活窗口之上.@extended包含一个扩展信息,指明是否成功完成激活.
那如何区别2个相同窗口标题的窗口呢,那就要用到窗口文本,因为窗口标题是一样的,而窗口内的文本不太会一样,所以
1.WinActivate("新建文本文档.txt-记事本","我是窗口1")
2.
有时候窗口标题会变化,针对这种情况我们需要用AutoItSetOption(Opt)这个函数来设置标题的匹配模式.
现在我们要激活任何一个记事本窗口,但是我们不知道文件名是什么xxxxx.txt-记事本,我们就把标题匹配模式设置为"标题的任意子串皆可匹配"
1.Opt("WinTitleMatchMode",2)
2.WinActivate("记事本")
这样只要窗口标题内有"记事本"3个字的窗口都会被匹配到,当然还有更灵活的匹配模式,请大家查阅AutoItSetOption函数,其中还包括很多其他au3的参数,比如两次按键之间的延迟,坐标系统的切换等.
有同学说,这些还不足以满足我确定窗口的需求,ok.现在来说下更高级的确定窗口的方法.
请把帮助翻到"使用AutoIt"--->"窗口标题与文本(高级)"一页.
∙TITLE窗口标题
∙CLASS窗口类名
∙REGEXPTITLE用正则表达式匹配窗口标题
∙REGEXPCLASS用正则表达式匹配窗口类名
∙LAST使用上一次成功匹配的窗口
∙ACTIVE当前激活的窗口
∙X/Y/W/H根据坐标和窗口大小匹配(是4个参数可以分开使用)
∙INSTANCE和类名搭配使用,类的第几个实例
有很多参数,现在用个例子来说明各个参数的用法.
现在我想关闭一个窗口,但是他的标题一直在变化(跑马灯),而且由于某种原因我无法知道他的类名,我们甚至可以用他的坐标和大小来确定这个窗口
使用au3info我们得到这个窗口的信息
我们假设这个窗口的位置大小不会改变.
1.WinClose("[X:
388;Y:
42;W:
686;H:
550]")
现在我想关掉大小为686,550的记事本窗口
1.WinClose("[CLASS:
Notepad;W:
686;H:
550]")
我想关掉当前激活的窗口
1.WinClose("[ACTIVE]")
或者
1.WinClose("")
2.
下面来说一下什么叫句柄.
句柄就好像是windows系统分配给每一个窗口的不会重复的身份证号码,我们可以通过WinGetHandle函数来获取一个窗口的句柄,这样无论这个窗口如何变化只要他不关闭我们都可以通过他的句柄找到他.
在au3里任何需要"窗口标题"的参数都可以使用"窗口句柄"来代替.