AutoIt教程:10. 模拟键盘鼠标操作

by xiaolai on 2010/05/07 · 8 comments

in Auto-It

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 }

liyi May 7, 2010 at 11:02

终于看到我感兴趣的东西了。 :-) 谢谢~~

Reply

yyasong May 7, 2010 at 14:58

第5行
CopyEntryFromCollinsToWordPad($line, “Document – WordPad”)
函数调用这里,不加后面的”Document – WordPad”是不是会更好啊,这样只要打开一个写字板程序和打开Collins词典就能运行了

Reply

李笑来 May 7, 2010 at 15:21

嗯,那是为了照顾不同版本的windows

Reply

pc May 7, 2010 at 23:41

我也是
终于看到感兴趣的东东了
呵呵
其实股沟一哈也很多
就是懒
看笑来兄的亲身体验更爽些

Reply

bao June 29, 2010 at 22:55

不知道xiaolai为什么到10才提到模拟鼠标键盘,这应该才是autoIT最初的由来,如其名,也是最具优势的地方。前面章节所说的概念,各类语言大同小异,而在某些具体应用时,特殊的语言更为合适(譬如文本处理时perl之类)

Reply

dongdong July 2, 2010 at 16:17

如果是金山词霸也可以么

Reply

biu September 5, 2010 at 16:06

終於找到這個了…!!!…類牛滿面…

Reply

addbluee June 3, 2011 at 10:51

学了几天正准备自己依葫芦画瓢写个类似的程序,却发现用AutoIt Windows Info无法获取控件上的文本框的ID.想请问笑来老师,这种情况下是不是就不能用autoit进行批量处理了?

Reply

Leave a Comment

Previous post:

Next post: