AutoIt的独特之处之一在于它可以非常方便地模拟Windows上的键盘鼠标操作,进而“自动”、“批量”地完成一些复杂而又重复的操作。
想象一下:
你有一个词表,你想把它的所有单词在Collins COUBILD中的释义文本拷贝出来。
那么,你原本只能这样:
打开词表文本文件;
新建一个文本文档(如果想要保留格式的话,就要新建一个rtf文件──用“写字板”程序,而非“记事本”)
打开Collins词典(Collins COBUILD Dictionary On CDROM)从词表文件中Control+C拷贝出一个词
切换到Collins词典,将刚刚拷贝的词粘贴到输入框中,而后按回车键
再从菜单中选择Edit,再选择Copy Entry
切换到写字板程序,按Control+V粘贴
…
周而复始,直至所有词汇全部处理完毕……
也许过去你就是这么做的。可是,现在你可以像这段录像所演示的那样:RetriveEntryTextFromCollins(或者你可以在这个链接上点击鼠标右键,选择“另存为……”将其下载到本地查看。)
程序的代码很简单(点击这个链接下载这个代码和它所用到的词表文件;另,你的电脑上应该已经安装好Collins COBUILD Dictionary On CDROM;还有,在执行这个程序之前,你得先打开一个写字板程序、打开Collins词典……):
$file = FileOpen("WordList.txt") While 1 $line = FileReadLine($file) If @error = -1 Then ExitLoop CopyEntryFromCollinsToWordPad($line, "Document - WordPad") WEnd Func CopyEntryFromCollinsToWordPad($Entry, $WordPadTitle = "文档 - 写字板", $CollinsTitle = "Collins COBUILD - Lexicon") ControlSend($CollinsTitle, "", "Edit2", $Entry & "{Enter}", 0) WinWait($CollinsTitle,"") If Not WinActive($CollinsTitle,"") Then WinActivate($CollinsTitle,"") WinWaitActive($CollinsTitle,"") Send("{ALTDOWN}{ALTUP}ee") WinWait($WordPadTitle,"") If Not WinActive($WordPadTitle,"") Then WinActivate($WordPadTitle,"") WinWaitActive($WordPadTitle,"") Send("{CTRLDOWN}v{CTRLUP}") Send("{Enter}") Send("================================") Send("{Enter}") EndFunc ; Finished! MsgBox(0, "AutoIt Message", "Finished!")
试用过后,请打开AutoIt帮助文件,细读这段代码中所用到的所有函数帮助文档。
另,AutoIt有一个“AutoIt Windows Info”程序(在开始菜单中可以找到),是用来获得Windows窗口信息的,调用出来把玩一下:




{ 8 comments… read them below or add one }
终于看到我感兴趣的东西了。 :-) 谢谢~~
第5行
CopyEntryFromCollinsToWordPad($line, “Document – WordPad”)
函数调用这里,不加后面的”Document – WordPad”是不是会更好啊,这样只要打开一个写字板程序和打开Collins词典就能运行了
嗯,那是为了照顾不同版本的windows
我也是
终于看到感兴趣的东东了
呵呵
其实股沟一哈也很多
就是懒
看笑来兄的亲身体验更爽些
不知道xiaolai为什么到10才提到模拟鼠标键盘,这应该才是autoIT最初的由来,如其名,也是最具优势的地方。前面章节所说的概念,各类语言大同小异,而在某些具体应用时,特殊的语言更为合适(譬如文本处理时perl之类)
如果是金山词霸也可以么
終於找到這個了…!!!…類牛滿面…
学了几天正准备自己依葫芦画瓢写个类似的程序,却发现用AutoIt Windows Info无法获取控件上的文本框的ID.想请问笑来老师,这种情况下是不是就不能用autoit进行批量处理了?