autoit快速开发指南_第1页
autoit快速开发指南_第2页
autoit快速开发指南_第3页
autoit快速开发指南_第4页
autoit快速开发指南_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*Autoit快速开发指南2012年9月6日Autoit开发指南启动程序启动exe类型文件,一般使用Run函数Run(路径”)如:Run(“D:JavaMyEclipse6eclipseeclipse.exe”)如果运行该函数,程序还没有启动起来,请配置好程序运行的工作目录Run(路径”,工作目录”)如:Run(“D:JavaMyEclipse6eclipseeclipse.exe”:D:JavaMyEclipse6eclipse”)目栋类型应用程序目标teS:ac=lipsa注:有时程序的目录不一定和工作目录相同启动lnk,txt等文件一般使用ShellExecute函数该函数除了可以指定工

2、作目录外,还可以设置启动参数1窗口操作窗口处理一般都是针对WindowsGUI窗口的操作,常用的如下:;窗口是否存在还有其他一些处理函数,这个可以直接去查找Autolt的帮助文档。下面是一个例子,一般在很多地方用到,特别是程序启动或者运行到某个步骤,等待其他窗口处理,一般采用以下脚本判断WinWait(“窗口标题”,窗口文本,等待时间”)IfWinExists(窗口标题”)ThenWinActivate(窗口标题”)Endlf不建议使用WinWaitActive(窗口标题”,窗口文本等待时间”),否则,如果该窗口处于非激活状态,会使脚本一直等待直到超时,按照非预设的流程解析运行下去,得不到预期

3、结果。1菜单操作wEl文件:丄、K石2】IM憎.FiEUJ-fitjli0Then$originalStr=StringReplace($originalStr,$array$i,XXX)EndlfEndIf其他可以参考官方帮助文档。4.数组处理数组可以包含不同数据类型的数据,处理起来有两种情况需要注意9.1一般数组9.2特殊数组特殊数组指某些函数的返回值为数组的情况,或是在运行脚本时候,传递给命令行的参数,AutoIT会初始化一个特殊的数组,这些数组下标也是从0开始,但是为0的项保存的是数组的个数。命令行返回数组对于脚本参数数组为$CmdLine,可以直接使用$CmdLine0;参数的数量$

4、CmdLine1;第一个参数(脚本名称后面)$CmdLine2;第二个参数$CmdLine$CmdLine0;可以用来表示得到最后一个参数.如果脚本是像下面这样被运行的话:AutoIt3.exemyscript.au3参数1这是一个其它参数$CmdLine0等价于.2$CmdLine1等价于.参数1$CmdLine2等价于.这是一个其它参数ScriptName等价于.myscript.au3函数返回数组前面用到的StringSplit函数返回值也是一个数组,0位保存的是数组项的个数,数组内却是从1开始计数$matchStr二11&22&33$array=StringSplit($matchSt

5、r,1)如上:$array0等于4$array1等于11”$array2等于22$array3等于33其他还有另外一些特殊的函数,如FileGetTime,WinList等等很多函数,返回值都是数组的情况,具体用法可能有些差异,这些可以参考相关文档。5.日期时间当前日期时间,可以直接从日期和时间宏中获取,如:SEC当前时钟的秒值,值的范围是00到59MIN当前时钟的分值,值的范围是00到59HOUR当前时钟的时值(24时制),值的范围是00到23MDAY当天属本月的第几天值的范围是01到31MON当前月份,值的范围是01到12YEAR当前年份(4位数)计算指定日期间隔后的新日期:_DateAd

6、d(“计算类型”,“间隔数”,指定日期”)计算两个指定日期的间隔:_DateDiff(“计算类型”,“计算的开始日期”,计算的结束日期”)6.像素捕获像素捕获主要去获取屏幕某块区域像素点的色值,以此和给定的颜色色值来比较判断是否一致。WinActivate(-窗口标题)$Handle=WinGetHandle(窗口标题,)AutoItSetOption(PixelCoordMode,2)$Color=PixelGetColor(X坐标,Y坐标:,$Handle)$ColorStr=Hex($Color,6)在实际情况中,有时可能不止获取一个点的像素就够了,这时可以通过获取窗口的相关WinGet

7、Pos(窗口标题,)坐标位置,然后对某个区块进行扫描。7.文件操作12.1.一般文件对于一般文本文件的读取:可以使用FileOpen打开文件,在按照要求读取文件内容:$fHandle=FileOpen(文件,0)if$fHandle-1ThenWhile1如果文件被独占打开,进行FileOpen操作时候,获取不到文件操作句柄,无法对文件进行读写操作,这时,如果只是针对文件读,可以将独占打开的文件进行一下复制,然后用拷贝文件进行目标操作。FileCopy(原文件;目标文件或路径,1)12.2.ini文件对于ini类型文件,形如:字段名关键字二数值文件中可以有多个不同的字段名,每个字段名下有多个关

8、键字,不同字段名下的关键字可以相同读取ini文件:IniRead(文件名,字段名,关键字,默认值)写入ini文件:IniWrite(文件名,字段名,键名,值)删除ini文件:IniDelete(文件名,字段名,关键字)&常用控件操作13.1.ListBox控件ListBox控件,如图所示:v09:06:58欢电总躁证型信如0引紂翦瑕収程厚CRcvSDQE,馥亟tl期対20061010nv09:06:59正狂连接服务8=5帀09:06:59与服务器5连接成功帀丁同:丁同:2010-082509:06:0209:06:02市开市时IB::09:55-11:00,11:05-11:45_门门匚士吉上

9、云矗2厝;半r-fTCVVTiPTT-1Qri9fl.frtlRl9n1n-nfl-c:noc-con在前面提到选择控件,ListBox也是其中一种,前面介绍了如何选中的某行选项,但是在真正的ListBox空间中,多半是记录相关软件运行时的一些状态参数记录,需要做的只判断其中打印的相关记录:$hWnd=ControlGetHandle(窗口标题,ListBox控件名)$count=_GUICtrlListBox_GetCount($hWnd)For$i=0To$count-1$hLabel=_GUICtrlListBox_GetText($hWnd,$i)Next其中第一行是获取控件操作句柄,

10、第二行根据句柄获取控件的记录条数,最后根据记录上遍历,获取每一条记录。132ListView控件ListView控件展示形如表格,如图所示:其操作如下ListView控件展示形如表格,如图所示:其操作如下$rows=ControlListView(窗口标题,ListView控件名,GetItemCount)For$i=0To$rows-1$iText=ControlListView(窗口标题,ListView控件名,GetText,$i,列名序号)Next上面代码,我们首先获取行数,然后指定某列,获取其所有行的文本。更多ListView操作可以参考ControlListView函数说明。9.运

11、行参数设置运行参数设置可以调整Autoit各种函数/参数的运作方式,可以通过Opt或者AutoltSetOption函数来设置:AutoItSetOption(选项,参数)如:Opt(PixelCoordMode,2)或AutoItSetOption(PixelCoordMode,2)常用的有:Opt(PixelCoordMode,2);设置用于象素函数的坐标参照Opt(GUIEventOptions,1);修改特殊的GUI函数的返回值类型Opt(MouseClickDelay,500);更改每个鼠标点击命令之间的延迟时间长度Opt(SendKeyDelay,1000);更改发送键击命令之间的

12、延迟时间长度Opt(TrayIconDebug,1);在托盘图标上显示当前脚本执行到的那一行的相关信息(工具提示)以助调试Opt(WinWaitDelay,500);更改每次成功执行窗口相关操作后的延迟时间长度更多运行参数设置可以参考AutoItSetOption帮助文档说明10.加密解密15.1.加密;$bEncrypted为加密后字符串_Crypt_Startup()$hKey=_Crypt_DeriveKey(sop,$CALG_RC4)$bEncrypted=_Crypt_EncryptData(待加密字符,$hKey,$CALG_USERKEY)_Crypt_DestroyKey($

13、hKey)_Crypt_Shutdown()这里加密的是一个16进制的字符串,其中加密匙可以自己设置,示例中为sop,其中加密算法为AutoIt内置的$CALG_RC4,还可以为$CALG_RC2等等其他。15.2.解密;$encrypt为解密后字符串$bData=Binary(加密的字符”)$encrypt=BinaryToString(_Crypt_DecryptData($bData,sop,$CALG_RC4)很简单的两行,不过其中的解密匙和解密算法要跟之前的加密参数对应。11.GUI操作GUI操作包括创建窗口面板,在面板上创建表单控件及其互动事件处理等一系列连贯配置:$hWnd二GU

14、ICreate(加密,400,300,-1)$hlnputEdit二GUICtrlCreateEdit(,0,0,400,150,$ES_WANTRETURN)$hOutputEdit二GUICtrlCreateEdit(,0,150,400,150,$ES_READONLY)GUIRegisterMsg($WM_COMMAND,WM_COMMAND)GUISetState(SW_SHOW)_Crypt_Startup()$hKey=_Crypt_DeriveKey(sop,$CALG_RC4)Do$msg=GUIGetMsg()Until$msg=$GUI_EVENT_close_Crypt

15、_DestroyKey($hKey)_Crypt_Shutdown()FuncWM_COMMAND($hWinHandle,$iMsg,$wParam,$lParam)If_WinAPI_HiWord($wParam)=$EN_CHANGEAnd_WINAPI_LoWord($wParam)=$hInputEditThen$bEncrypted=_Crypt_EncryptData(GUICtrlRead($hInputEdit),$hKey,$CALG_USERKEY)GUICtrlSetData($hOutputEdit,$bEncrypted)EndIfEndFunc上面是一个简单界面包

16、装,一旦界面检测到$WM_COMMAND事件响应,即触发自定义函数WM_COMMAND,窗口包括两个简单的文本编辑控件。我们还可以设置其他控件的事件处理:Opt(GUIOnEventMode,1)$winTitle=配置密码$handle=GUICreate($winTitle,300,200)$btn=GUICtrlCreateButton(确定,15,60,50,25,$BS_CENTER)GUISetState(SW_SHOW,$handle)GUICtrlSetOnEvent($btn,GetPwd)FuncGetPwd($hWinHandle,$iMsg,$wParam,$lPara

17、m)EndFunc这里是针对按钮设置了点击触发事件。12.IE操作IE操作,不像GUI界面一样,通过AutoItWindowInfo就能得到相关控件,进而获取控件句柄进行操作。我们在操作IE网页时候,需要事先获取HTML页面中的相关Dom节点或元素,所以需要对HTML有一些了解。下面是一个简单的例子:$oIE=_IECreate(,0,1,1,0)_IEPropertySet($oIE,statustext,欢迎访问)$oForm=_IEFormGetObjByName($oIE,f);查找表单名$oQuery1=_IEFormElementGetObjByName($oForm,wd)查找表

18、单控件_IEFormElementSetValue($oQuery1,赋值);给控件赋值_IEFormSubmit($oForm,1);点击提交表单请求实例是一个简单操作,打开一个IE窗口,访问百度,然后在搜索网页表单,输入一个要查询的关键字,点击百度搜索。一般网页很多超链接,对于这些链接的页面,都有很多的Dom节点嵌套,单纯的以对象名称不一定能够获取到某个操作的对象,这时需要从顶级Dom节点,一级一级缩小范围,直到获取到最终操作对象节点,如下所示:$oIE=_IECreate(,0,1,1,0)$iFrame=_IEFrameGetObjByName($oIE,iFrame)$oDiv=_I

19、EGetObjById($iFrame,divId)$ohrefArray=_IETagNameGetCollection($oDiv,a)For$oLinkIn$ohrefArrayIf$oLink.href= HYPERLINK then_IEAction($oLink,click)ExitLoopEndIfNext这里实例主要是从一个打开的浏览器窗口,获取名为iFrame的frame页面,然后获取其中为Id为divId的节点,进而,取到divId节点下的所有超链接对象,最后一个一个判断,找到某个url,点击超链接。13.自定义函数把一些常用而相关逻辑的操作,抽离出来,独立成一个模块,供脚

20、本调用,这就需要涉及到自定义函数。用户可通过使用Func.EndFunc语句来自定义函数,函数中可以有Return返回值,也可以无,下面我们列出了一些常用的自定义函数,供参考:#inelude#Inelude#inelude#Inelude#Include#Include#include#include;获取配置文件FuncGetConfigFile()ReturnString(D:DigitalchinaAutoAgentscriptsConfigParameter.ini)EndFunc;根据给定的日期格式字符串转换成当前日期格式FuncReplaceDateStr($DateStr)Se

21、lectCaseStringlnStr($DateStr,YYYYMMDD)ReturnStringReplace($DateStr,YYYYMMDD,DateYYYY()&DateMM()&DateDD()CaseStringlnStr($DateStr,YYYY-MM-DD)ReturnStringReplace($DateStr,YYYY-MM-DD,DateYYYY()&-&DateMM()&-&DateDD()CaseStringInStr($DateStr,YYYY/MM/DD)ReturnStringReplace($DateStr,YYYY/MM/DD,DateYYYY()&/

22、&DateMM()&/&DateDD()CaseStringlnStr($DateStr,ABCDD-YYYY);ABC代表英文的短月份格式,如1月=JanReturnStringReplace($DateStr,ABCDD-YYYY,_DateToMonth(MON,1)&DateDD()&-&DateYYYYO)CaseStringInStr($DateStr,MMDD)ReturnStringReplace($DateStr,MMDD,DateMM()&DateDD()CaseElseReturn$DateStrEndSelectEndFunc;返回日期格式FuncDateYYYYORe

23、turnString(YEAR)EndFuncFuncDateYY()ReturnStringRight(String(YEAR),2)EndFuncFuncDateMM()ReturnString(MON)EndFuncFuncDateDD()ReturnString(MDAY)EndFunc;写日志,截屏等操作;$fileName日志文件;$flag操作标识1为成功,0为失败;$logTxt写入日志内容,增加在行尾FuncWriteLog($fileName,$flag,$logTxt);根据代理约定的相对目录$File_dat=$fileName&.dat$File_do=$fileNa

24、me&.do$File_jpg=$fileName&.jpg;截屏文件_ScreenCapture_Capture($Filepg);如果截屏失败,则启动画板IfFileExists($File_jpg)=0ThenSaveImage($File_jpg)EndIf;脚本执行结果文件$file1二FileOpen($File_dat,2)FileWriteLine($file1,$flag)FileWriteLine($file1,$logTxt)FileClose($file1);状态文件$file2二FileOpen($File_do,2)FileWriteLine($file2,ok)F

25、ileClose($file2)EndFunc;启动画图程序,将全屏截图保存为文件;$imgFile文件保存路径FuncSaveImage($imgFile)Send(PRINTSCREEN)$picProcess=mspaint.exe$pid=Run(mspaint.exe)$picWin=未命名-画图$warnWin=画图$saveWin=保存为$imgFilePathStringReplace(GetConfigFile(),scriptsConfigParameter.ini,$imgFile)IfWinWait($picWin,10)ThenWinActivate($picWin)

26、Send(人v)IfWinActivate($warnWin)ThenControlClick($warnWin,Button1)WinMenuSelectItem($picWin,文件保存)IfWinWait($saveWin,5)ThenWinActivate($saveWin)ControlSetText($saveWin,Edit1,$imgFilePath)JPEGControlCommand($saveWin,ComboBox3,SelectString,JPEG(*.JPG;*.JPEG;*.JPE;*.JFIF)ControlClick($saveWin,Button2)IfW

27、inWait($saveWin,已存在,5)ThenControlClick($saveWin,已存在,Button1)EndIfEndIfWinWait($imgFile)IfWinExists($imgFile)ThenWinClose($imgFile)EndIfEndFunc;判断窗口;$win窗口名称;返回值如果找存在返回1,否则返回0FuncChkProgram($win)Dim$ret$ret=-1IfWinExists($win)Then$ret=1Else$ret=0EndlfReturn$retEndFunc;判断程序进程;$process进程名称;返回值如果找存在返回1,

28、否则返回0FuncChkService($process)Dim$ret$ret=-1$flag=ProcessExists($process)If$flag=0Then$ret=0Else$ret=1EndIfReturn$retEndFunc;根据给定的字符串匹配ListBox控件中的数据;$title窗口标题;$listBoxCmpListBox控件;$matchStr匹配字符串.如果字符串以&连接,则匹配所有,如果字符串以|连接则匹配部分返回值如果找到匹配的字符串返回1,否则返回0FuncMatchListBox($title,$listBoxCmp,$matchStr)Dim$ret

29、,$count$ret=0$num=0$flag=1WinActivate($title)IfStringlnStr($matchStr,|)0Then$array=StringSplit($matchStr,|,1)$flag=0Else$array=StringSplit($matchStr,&,1)Endlf$hWnd=ControlGetHandle($title,$listBoxCmp)$count=_GUICtrlListBox_GetCount($hWnd)For$i=0To$count-1$hLabel=_GUICtrlListBox_GetText($hWnd,$i)IfMa

30、tchStrArray($hLabel,$array)Then$num=$num+1If$flagThenIf$num=$arrayOThen$ret=1ExitLoopEndIfElse$ret=1ExitLoopEndIfEndIfNextReturn$retEndFunc;匹配ListView控件字符串;$title窗口标题;$listViewCmpListView控件;$cols要查找的列,从0开始;$matchStr匹配字符串返回值如果找到匹配的字符串返回1,否则返回0FuncMatchListView($title,$listViewCmp,$cols,$matchStr)Dim$

31、ret,$count,$rows$ret=0WinActivate($title)$rows=ControlListView($Title,$listViewCmp,GetItemCount)$count=0For$i=0To$rows-1$iText=ControlListView($Title,$listViewCmp,GetText,$i,$cols)IfStringInStr($iText,$matchStr)0Then$count=$count+1EndIfNextIf$count=$rowsThen$ret=1Return$retEndFunc;匹配日志文件字符串;$logFile

32、日志文件;$matchStr匹配字符串.如果字符串以&连接,则匹配所有,如果字符串以|连接则匹配部分返回值如果找到匹配的字符串返回1,否则返回0FuncMatchLogFile($logFile,$matchStr)Dim$line,$array,$result,$count,$flag$result=0$count=0$flag=1IfStringlnStr($matchStr,|)0Then$array=StringSplit($matchStr,|,1)$flag=OElse$array=StringSplit($matchStr,&,1)Endlf$file=FileOpen($log

33、File,0)if$file=-1ThenReturn-1EndIfWhile1$line=FileReadLine($file)Iferror=-1ThenExitLoopEndIfIfMatchStrArray($line,$array)Then$count=$count+1If$flagThenIf$count=$array0Then$result=1ExitLoopEndIfElse$result=1ExitLoopEndlfEndIfWendFileClose($file)Return$resultEndFunc;匹配子字符串是否存在;$str目标字符串;$arr匹配字符串;返回值如

34、果找到匹配的字符串返回1,否则返回0FuncMatchStrArray($str,$arr)$flag=0For$i=1To$arr0IfStringinStr($str,$arr$i)0Then$flag=1ExitLoopEndIfNextReturn$flagEndFunc上面实例函数用到了Autolt内部函数库,通过#include关键字包含了进来。14.Windows锁屏处理办法锁屏解释:1、当windows操作系统被锁屏时,实际上是在所有窗口(包括隐藏的)的前面再新开了一个窗口,完全遮挡住先前的窗口,这样大家就看不到了,autoit说这个窗口叫AlwaysonTOP”2、被遮挡的窗

35、口虽然看不到了,但是还在,只是变成了隐藏模式,找到他们,是可以执行快捷方式命令的;但窗口界面操作是不行的,主要原因是没法激活Send和ControlSend命令Send命令必须要在激活窗口的条件下才能正确执行ControlSend命令可以不需要激活窗口就能执行*15s31、-40M油坦s孚茨瞬磬#inc-udeAinc.au3v#inc-udeAguiclnp.au3vM籀MfflDimsyyyylndLsyyyylnd2、syyyylnd3、sf-ag、sret跖艰啣3sf-agHoSretHo劳iniw弃召、sprogramparhnIniRead(GetconfigH一eosHQZR-:

36、programpa-h5JsshowDataFi-enIniRead(GetconfigFi-e()、=HQZR:showDataFi-e=、JshqDataFi-enIniRead(GetconfigFi-e()、=HQZR:hqDataFi-e=、JSXXDataFi-enIniRead(GetconfigFi-e()、=HQZR:XXDataFi-e=、J誌油JudgeTime因磐脣冊味玛母画吻坦920亘wIo建讪離騎迤臂、m坦920whi-eJudgeTimeoAOs-eep(loooo)WEnd;获取文件的修改时间,并按照一定的格式组合$d1=FileGetTime($showDat

37、aFile,0)$yyyymd1=$d10&$d11&$d12$d2=FileGetTime($hqDataFile,0)$yyyymd2=$d20&$d21&$d22$d3=FileGetTime($xxDataFile,0)$yyyymd3=$d30&$d31&$d32;将组合的日期格式代入函数MathDate中,判断其是否是当前日期;这里有三个文件的判断,都需要成立IfMathDate($yyyymd1)=1AndMathDate($yyyymd2)=1AndMathDate($yyyymd3)=1Then$flag=1EndIf;根据给定的路径,启动程序Run($programPath

38、);等待程序启动,并出现窗口WinWait($hqzrWinTitle,$WaitWinTime)翳冢Ihgffl册絵冊昌如朝蹂口口册絵冊S骰的粵昭故4IPULU(=瞅砸伺皿擦上=0=日u_pllos)60-l七MrDElu_Mzb5SOQWMS_LU(=日宦伺皿3a_lhr二=日u_pllos)60-l七Mu一u:一Spu:694s41世曬啦启即总仪r圧、檢国60七m旺飓胆瞬、4IPULU4IPULU(ooond一S:一Ssi、書2rDxLUzb5=一芒u_Mzbqs)p=polucofflffiJ條曙(一芒u_Mzbqs)2et;vu_Man-ulutIH6P541uLU(一芒u_Mzbq

39、s)HSxUJu_M七田社冏殴口*當魂*二、运行程序或打开文件1、运行程序Runt命令或者函数用来运行外部可执行文件,AHK还可利用它来直接打开文件。AHK:Run,目标文件,工作目录,Max|Min|Hide|UseErrorLevel,输出PID变量AU3:Run(文件名,工作目录,标志)【示例2.1.1】AHK:Run,Notepad.exeAU3:Run(Notepad.exe)上面的示例中都没有给出程序“Notepad.exe”的路径,为什么仍能执行?这是因为它们都会自动在脚本所在目录下搜寻目标文件,如有则运行,否则就到系统文件夹(PATH%)中搜寻。注意:A)某些程序必须给定工作目

40、录才能成功运行!B)给出完整的文件路径有助于轻微提高程序的可靠性。C)AHK的Run命令可以用来运行程序和直接打开文件,而AU3的Run函数则只能用来运行程序(可执行文件)或传递参数让某个程序打开目标文件。当然,运行程序的功能还不仅仅是这么简单,我们还可以指定运行程序的初始状态,比如让运行的记事本窗口以最大化状态显示(或者最小化、隐藏):【示例2.1.2】AHK:Run,Notepad.exe,MaxAU3:Run(Notepad.exe,SW_MAXIMIZE)2、打开文件前面已经提到,AHK的Run命令可以直接打开文件,而AU3的Run函数则只能用来运行程序,因此在打开文件的方式上有点不同

41、:AHK脚本中可直接给出目标文件,而AHK将自动运行该文件的关联程序来打开它;而AU3则必须由用户自己传递参数让某个程序打开目标文件。【示例2.2.1】AHK:Run,MyFile.txtRun,Notepad.exeMyFile.txtAU3:Run(Notepad.exeMyFile.txt)3、以命令行形式运行程序可以考虑运行系统的命令行解释器(cmd.exe/),然后指定要执行的命令并传递参数。假设我们要执行命令“dirC:WINDOWSsystem32”,用以列出指定目录的所有文件及子目录。【示例2.3.1】AHK:Run,%ComSpec%/kdirC:WINDOWSsystem3

42、2AU3:Run(ComSpec&/kdirC:WINDOWSsystem32)注意:ComSpec是脚本内建的用以指示命令行解释器位置的变量或宏。/k参数表示“执行字符串指定的命令但保留”,若改为/c则表示“执行字符串指定的命令然后终断”。对此比较直观的解释是/k将在执行完命令后保留命令提示窗口,而/c则将在执行完命令之后关闭命令提示窗口。C)符号“&”是AU3定义的字符串连接符。4、特殊应用A)打开网页【示例2.4.1】AHK:Run, HYPERLINK Run,%A_ProgramFiles%InternetExplorerIEXPLORE.EXE HYPERLINK AU3:Run(

43、ProgramFilesDir&InternetExplorerIEXPLORE.EXE)B)打开特殊文件夹系统的某些特殊文件夹被定义了相应的CLSID(请查看帮助文档),我们可利用它来打开相应的文件夹,比如打开回收站:【示例2.4.2】AHK:Run:645ff040-5081-101b-9f08-00aa002f954eAU3:不适用!C)运行控制面板工具微软已经为我们提供了通过命令行打开控制面板某个工具或项目的方式,比如打开系统属性窗口:【示例2.4.3】AHK:Runcontrolsysdm.cplAU3:Run(controlsysdm.cpl)关于访问控制面板项目的详细介绍请查看此

44、文:文章地址。指定搜索位置并打开搜索窗口假设我们要打开一个搜索窗口,而且要指定搜索位置,比如C:【示例2.4.4】AHK:Run,findC:AU3:不适用!显示指定文件的属性窗口假设我们要打开文件“MyFile.txt”的属性窗口,则使用关键字properties然后接上目标文件即可:【示例2.4.5】AHK:Run,propertiesMyFile.txtAU3:不适用!注意:AHK在退出前将自动关闭打开的属性窗口!F)用“资源管理器”打开指定文件夹我们知道使用Run,explorerC:或Run(explorerC:)即可打开指定的文件夹,可是有时候我们需要在资源管理器中打开它,这时可使

45、用关键字explore:【示例2.4.6】AHK:Run,exploreC:AU3:run(explorer.exe/e,C:)G)打印指定文件要打印指定文件,可使用关键字print:【示例2.4.7】AHK:Run,printMyFile.txtAU3:不适用!F)用“资源管理器”打开指定文件夹我们知道使用Run,explorerC:或Run(explorerC:)即可打开指定的文件夹,可是有时候我们需要在资源管理器中打开它,这时可使用关键字explore:示例2.4.6】AHK:Run,exploreC:AU3:不适用!run(explorer.exe/e,d:)这样就可以做到你说的打开树

46、状文件了注意:窗口标题和窗口文本参数总是对大小写敏感的。1、等待窗口系列命令/函数AHK和口AU3都提供了用法类似的一组窗口等待命令/函数:WinWait/WinWaitActive/WinWaitClose它们分别用于等待窗口出现、等待窗口被激活、等待窗口被关闭。由于这些命令/函数的参数类似,现仅以WinWait为例说明。AHK:WinWait,窗口标题,窗口文本,超时时间,排除标题,排除文本AU3:WinWait(窗口标题,窗口文本,超时时间)WinWait的作用是在目标窗口出现之前不再执行后面的所有语句。假设我们要运行记事本程序,并在其窗口出现时提示用户:示例3.1.1】AHK:RunN

47、otepadWinWait,无标题-记事本MsgBox记事本窗口已被打开!AU3:Run(Notepad)WinWait(无标题-记事本)MsgBox(0,记事本窗口已被打开!)2、激活窗口相关命令/函数让目标窗口成为活动窗口的办法就是激活它,可用的命令/函数是WinActivate:AHK:WinActivate,窗口标题,窗口文本,排除标题,排除文本AU3:WinActivate(窗口标题,窗口文本)3、关闭窗口关闭窗口有两种方式,一种是正常的关闭窗口(WinClose),另一种则是强行关闭窗口(WinKill):AHK:WinClose/WinKill,窗口标题,窗口文本,超时时间,排除

48、标题,排除文本AU3:winc_ose/winKi=(爾口茹冏二=8口总料)皆亩曲亠izjcll肾凹左將皆-庄煤郦4BSS恶7、bsd曲亠一凹、ani噩MM、4S3壽來SM-【書312】AHK-Run、sysdm.cp-WinWaiLWinActivate、SFWH?winwairActivpSFWH?s-eep、3000wincose洲为1DSwinwaitcosp洲SFWH?AU3-Run(nontro_sysdm.cp=)WinWait(鴻为WH?-)winACc+vate(_iSFJS1r)winwai(Acrive(=洲浮WH?-)s_eep(3000)wincose(=$wlr)W

49、inWaitC-ose(_iwH?=)建议:如果程序中频繁地出现要用到这些窗口标题的地方,会带来一个问题:脚本的可读性,也许你会想,这不是很直观吗?可问题是如果这个重复出现的窗口标题是个很长的字符串呢?这将严重影响整个代码的排版美观。而且我们也无从了解这些窗口标题的“来头”,不知道这个窗口标题究竟是怎么来的。而如果我们定义一个变量(假设变量名是“AppWindowl”)保存这个窗口标题,我们就能在命令/函数中用变量来表示它,这样就达到了让代码用意更清晰一点的目的。另外,就算目标软件因某些原因(比如升级)而改变了它的窗口标题,我们也能很方便地作出修改。4、更准确的标识窗口的方法(主要针对AHK脚

50、本)程序在运行时起码会有一个进程,如果能获得这个进程ID就能在一定程度上保证对窗口的准确标识。另外,每个窗口都有定义窗口类名(Class,比如说记事本窗口的类名就是Notepad),所以我们可以以此排除与目标窗口不同的其它窗口类。其实,我们还有一个更准确的方法:每个窗口(包括控件在内)都被Windows指派了一个可区别于其它窗口的唯一的标识符(ID),我们称之为窗口句柄(HWND)直接给定窗口标题来表示窗口的一个缺点就是无法保证在脚本运行的过程中始终以该窗口为操作目标,因为在这个过程中很有可能会有其它“同名”窗口(或者说满足匹配条件的窗口)出现,而如果我们使用这个标识符来表示窗口自然就能保证命

51、令/函数的操作窗口总是同一个窗口了。我们先来了解一下获得窗口句柄的命令/函数:AHK:WinGet,输出变量,ID,窗口标题,窗口文本,排除标题,排除文本AU3:WinGetHandle(窗口标题,窗口文本)其中WinGet获得的窗口ID将通过输出变量返回,而WinGetHandle的返回值就是获得的窗口ID。我们在进行自动化操作时是要先运行某个程序,如何获得这个程序成功运行后显示的窗口句柄?一个比较保险的办法是先获得这个程序的进程ID,然后根据这个进程ID获得它的窗口句柄,AHK支持使用进程ID作为窗口标题使用;但AU3不支持这样使用,只能先获得该窗口的类名再根据该类名来获得窗口句柄(不够保

52、险):【示例3.1.3】AHK:Run,NotePad,ThisPIDWinWait,ahk_pid%ThisPID%;这里的ahk_pid表明跟在后面的变量是进程IDWinGet,ThisID,ID,ahk_pid%ThisPID%;ThisID将保存获得的窗口句柄AU3:Opt(WinTitleMatchMode,4)Run(Notepad)$handle=WinGetHandle(classname=Notepad)现在暂且先忘记了AU3吧,因为它的窗口函数一般都不支持使用窗口句柄作为(窗口标题)参数。至于如何在AHK中使用窗口句柄,简单的说,凡是有“窗口标题”参数的命令就可以用窗口句柄

53、来代替,比如:【示例3.1.4】AHK:Run,Notepad,ThisPID;先获得运行的记事本程序的进程IDWinWait,无标题-记事本ahk_pid%ThisPID%;等待该进程窗口的出现WinGet,ThisHWND,ID,无标题-记事本ahk_pid%ThisPID%;获得窗口句柄WinActivate,ahk_id%ThisHWND%;这里的ahk_id表明跟在后面的变量是窗口句柄WinWaitActive,ahk_id%ThisHWND%Sleep,3000WinClose,ahk_id%ThisHWND%WinWaitClose,ahk_id%ThisHWND%1、模拟鼠标点

54、击(按钮等)控件既然是模拟用户操作,自然就包括了模拟鼠标点击在内。适用命令/函数:Click/MouseClick/ControlClick其中Click/MouseClick用来模拟用户的物理操作(点击),把鼠标点击事件发送到指定坐标位置(相对当前窗口或绝对位置)上,但这种方法并不能保证100%的准确性,屏幕分辨率、用户干扰和系统环境等都会影响到它们的执行结果,而ControlClick则直接把鼠标点击事件发送到目标窗口的目标空件上,因而更准确,一般我们不考虑使用坐标位置方式的点击,下面仅以ControlClick为例说明:AHK:ControlClick,目标控件或坐标位置,窗口标题,窗口

55、文本,鼠标按钮,点击次数,选项,排除标题,排除文本AU3:ControlClick(窗口标题,窗口文本,控件ID,按钮,点击次数)对AHK而言,目标控件参数是指要点击的控件的类别名(ClassNN)或控件文本,另外还可以使用控件句柄(若用的是控件句柄则第一个参数需留空,并在第二个参数中使用ahk_id%控件句柄)。Q:用什么工具来获得目标控件的这些信息呢?A:AHK用户请使用AutoIt3WindowSpy,AU3用户则请使用AutoItWindowInfo,你可以在相应的开始菜单项目里找到它们,或者到安装目录下寻找。Q:如何使用这两个工具?A:先打开你要进行操作的目标窗口,然后运行AutoI

56、t3WindowSpy或AutoItWindowInfo,接下来就是把鼠标移到目标控件上(比如某个按钮):AutoIt3WindowSpy使用演示截图:*AutoltWindowInfo使用演示截图:现在我们假设已打开并激活了“系统属性”窗口,而任务是点击它的“确定”按钮,则可用以下几种方法:AutoltWindowInfo使用演示截图:现在我们假设已打开并激活了“系统属性”窗口,而任务是点击它的“确定”按钮,则可用以下几种方法:【示例4.1.1】AHK:ControlClick,确定,系统属性ControlClick,Button2,系统属性AU3:ControlClick(系统属性,,1)

57、ControlClick(系统属性,,Button2)ControlClick(系统属性,,确定)提醒:即使目标窗口或控件是隐藏状态,ControlClick命令还是可以点击”目标控件,但不能保证成功率。2、模拟键盘操作键盘也是我们在操作窗口时会用到的工具,比如说在安装软件的时候经典的“一路回车大法”。下面简单介绍一下模拟键盘操作的方法。Send这个是最直接的方法,就是模拟用户按键行为,直接发送键击命令,用法请参考官方文档,在此不予说明。最简单的应用按回车:AHK:Run,ControlSysdm.cplWinWait,系统属性Send,EnterAU3:Run(ControlSysdm.cp

58、l)WinWait(系统属性)Send(Enter)常见的组合键Alt+X/Ctrl+N等等,在安装软件的时候经常会有提供一个按钮“下一步(N)”,表示按下Alt+N即可触发等同于点击该按钮的效果,其它的可触类旁通。以打开记事本窗口的“文件”菜单为例:AHK:Run,NotepadWinWait,无标题-记事本WinActivate,无标题-记事本WinWaitActive,无标题-记事本Send,!fAU3:Run(Notepad)WinWait(无标题-记事本)WinActivate(无标题-记事本)WinWaitActive(无标题-记事本)Send(!f)五、自动化操作轻松入门系列5控

59、件操作然而,在真正实现自动化时仅靠上面的技术往往难以达到预期目的。下面开始进入最为重要的控件操作。1设置文本在安装软件的过程中用户往往需要提供一些必需信息,比如安装目录。很多用户并不喜欢把软件安装到默认的C盘而更愿意把它们安装到别的地方,那么脚本究竟提供了什么方法能让我们修改如下图所示的路径呢?LobarLUUIJLobarLUUIJ我们先用上文中提到的AutoIt3WindowSpy或AutoItWindowInfo来获得这个路径的编辑框的信息,假设这个窗口的标题为Setupfoobar,该路径编辑框的类名是Edit1,而我们需要把它改成*“D:foobar2000”,接下来就可以使用下列命

60、令/函数来设置它的文本了:AHK:ControlSetText,目标控件,新文本,窗口标题,窗口文本,排除标题,排除文本AU3:ControlSetText(窗口标题,窗口文本,控件ID,新文本)具体用法如下:【示例5.1.1】AHK:ControlSetText,Edit1,D:foobar2000,SetupfoobarAU3:ControlSetText(Setupfoobar,Edit1,D:foobar2000)2、选中和取消选中单选框和复选框项目有时程序为了满足用户的个性化设置而需要用户提供更多的信息,我们经常会遇到这样的情况:匚|豆曲11卄磧灯斗1回快埋启动栏.tmjBH谕理强右

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论