星期二, 十月 30, 2007

AutoHotkey-自动化脚本工具

一、何为AutoHotkey

AutoHotkey 是一款免费的、Windows平台下开放源代码的热键脚本语言工具。有了它,您就可以:通过发送键盘或鼠标的键击动作命令来实现几乎所有操作的自动化。您可以自己编写 宏 或者使用宏录制器来生成;为键盘,游戏操纵杆和鼠标创建 热键。

  比如要登录某论坛,你只要按一个键,AutoHotkey就会替你打开IE(推荐使用FireFox、Opera或Maxthon),输入网址,输入用户名和密码,回车。

二、实现原理
  第一,用win+r启动程序。从软件如何快速启动来看,有两大流派:一是hoekey、slickrun、type and run等专用工具派。二是强化的win run派:快捷方式专用目录+自定义名称。
  第二,使用脚本工具实现自动化。好用的脚本工具有AutoIt3 和 Auto Hotkey。

三、应用举例:快速登录163信箱
  1. 下载 AutoHotkey,并解压或安装。
  2. 建立脚本文件。把下述内容复制到文本编辑器,保存为 m163.ahk。
run, http://mail.163.com
WinActivate, Maxthon ;;防止窗口不激活
winwait, 网易 ;;等待网页加载成功(至少title显示出来)
sleep, 500 ;;保险起见,再等0.5秒(视网速)
send, xbeta{tab}password{enter};;模拟键入用户名、密码、回车
return

  3. 为m163.ahk 建立快捷方式 m163.lnk,复制到已加入path的目录,就可以了
  4. 现在键入:win+r m163 enter,就是不是进入163信箱了。

 四、AutoHotkey命令解释

(1)运行文件或程序

Run 命令用在运行加载程序、文件、链接、快捷方式等,格式例如:

Run Notepad
Run C:\My Documents\Address List.doc
Run C:\My Documents\My Shortcut.lnk
Run www.yahoo.com
Run mailto:someone@somedomain.com

hotkey label 定义热键。第一句定义热键为:Win+N, 第二句定义为:Control+Alt+C

#n::Run Notepad
^!c::Run calc.exe

上面的例子只能定义只有一个命令的单行热键。用一个键包含更多命令的例子如下: 第一行定义热键,最后一行用return返回,中间为命令集。

#n::
Run http://www.google.com
Run Notepad.exe
return

run 包含绝对路径的命令的写法:Run %A_ProgramFiles%\Winamp\Winamp.exe

RunWait命令产生程序运行的延时。
MsgBox 命令则弹出提示框。例如:

RunWait Notepad
MsgBox The user has finished (Notepad has been closed).

(2)传递键盘输入和鼠标点击
Send将击键送入当前窗口
Click Click 112, 223点击鼠标左键。
MouseMove无点击移动鼠标
MouseClickDrag按下后移动鼠标

(3)激活和操作窗体

WinActivate激活一个窗体。


(4)接收用户输入:MsgBox, InputBox等
下面例子显示一个有两个按钮的对话框:

MsgBox, 4, , Would you like to continue?
IfMsgBox, No
return
; Otherwise, the user picked yes.
MsgBox You pressed YES.

InputBox命令提示用户输入一个字符串。
FileSelectFile FileSelectFolder提示用户选择一个文件。
Gui 命令建立更复杂的客户端数据输入表和用户界面。

(5)使用变量和剪切板

定义变量variables格式:
MyVar1 = 123
MyVar2 = my string

数学表达式expression
NetPrice := Price * (1 - Discount/100)

clipboard 粘贴板:
MsgBox %clipboard%


(6)系列动作的循环重复
loop 循环命令。例如下面例子循环msgbox3次:

Loop 3
{
MsgBox This window will be displayed three times.
}

循环次数可以是变量:
Loop %RunCount%
{
Run C:\Check Server Status.exe
Sleep 60000 ; Wait 60 seconds.
}

还可以和键操作关联起来,下面例子是按下F1时,自动点击鼠标左键:

$F1:: ; Make the F1 key into a hotkey (the $ symbol facilitates the "P" mode of GetKeyState below).
Loop ; Since no number is specified with it, this is an infinite loop unless "break" or "return" is encountered inside.
{
if not GetKeyState("F1", "P") ; If this statement is true, the user has physically released the F1 key.
break ; Break out of the loop.
; Otherwise (since the above didn't "break"), keep clicking the mouse.
Click ; Click the left mouse button at the cursor's current position.
}
return

更多用法见:

File-reading/writing loop: 逐行检索一个文本文件。

Files and folders loop: 逐个检索一个特殊的文件和文件夹。

Parsing loop: 逐个检索字符串中的子串。

Registry loop: 逐条检索registry子键。


(7)操作文件和文件夹

FileAppend命令,在文件末尾追加内容。用 `n 来分行。例如:
FileAppend, A line of text to append.`n, C:\My Documents\My Text File.txt

FileDelete用新文件覆盖一个存在的文件。例如:
FileDelete, C:\My Documents\My Text File.txt

其它文件操作命令:
(8)命令清单: command list

五、脚本应用举例

获取鼠标所在点的颜色值(RGB),然后发送到剪贴板

#c::
MouseGetPos, mouseX, mouseY
; 获得鼠标所在坐标,把鼠标的 X 坐标赋值给变量 mouseX ,同理 mouseY
PixelGetColor, color, %mouseX%, %mouseY%, RGB
; 调用 PixelGetColor 函数,获得鼠标所在坐标的 RGB 值,并赋值给 color
StringRight color,color,6
; 截取 color(第二个 color) 右边的 6 个字符,因为获得的值是这样的:#RRGGBB,一般我们只需要 RRGGBB 部分。把截取到的值再赋给 color(第一个 color)。
clipboard = %color%
; 把 color 的值发送到剪贴板
tooltip, 鼠标所在颜色值已发送到剪贴板。`n小众软件 - appinn.com`n 本系列教程作者:sfufoet
; tooltip 弹出鼠标提示的命令,后面加上要显示的语句。中间的 `n 表示回车
sleep 2000
; 时间暂停 两秒
tooltip,
; 关闭鼠标提示
return

使用方法,需要取屏幕上颜色值时,按下 Win + C。

yonken汉化的AHK帮助文件:下载地址Box.net下载
参考资料:
http://www.appinn.com/ahk-fast-food-restaurant-6-color-thief/
http://yonken.blogcn.com/index.shtml
http://blog.sina.com.cn/s/blog_46dac66f010005g7.html

没有评论: