如何学习 autohotkey
AutoHotkey是一个神奇的工具。为了便于新人上手,xbeta写了此篇最最傻瓜的0级入门教程。
1 何为AutoHotkey
AutoHotkey是一个小工具软件,可以简化你的重复性工作。
比如要登录某论坛,你只要按一个键,AutoHotkey就会替你:打开浏览器、输入网址、输入用户名和密码、回车,完成登录过程。
只要有想像力,AutoHotkey可以完成更多工作,参见 AutoHotkey,让win+run如虎添翼,及更多文章。
2 下载及安装
软件名称: AutoHotkey
软件版本: 1.0.96.00
软件大小: 2.5MB
软件授权: 免费、开源
适用平台: Windows 98-Win7
下载地址:点击这里下载
安装:按提示操作即可。我习惯上装在 d:\program files\AutoHotkey
第1屏是欢迎;点Next。
第2屏是版权声明;点I Agree。
第3屏是版本选择,可根据操作系统、需求,选择合适版本。比如我在WinXP下选择了 Unicode(32-bit)。
第4屏是安装内容:如下图。建议全部选中。
接下来是安装目录、开始菜单设置、安装过程。
最后,是安装成功提示:是否看帮助文件。AutoHotkey的帮助文件,写得很细。有耐心的就认真拜读,想成高手的必须要研读。(更多中文译本见这里)
3 应用例1:提示与访问网页
创建脚本文件
如下图,打开你的文本编辑器(notepad、或gVIM),新建一个文件,把下两行内容复制进去。
msgbox, 这是我的第一个AutoHotkey脚本 `n 我既关注效率,也尊重版权
run,
WinWaitActive, 网易 ;;等待网页加载成功(至少title显示出来)
sleep, 1000 ;;保险起见,再等1秒(视网速而定)
send, user-id{tab}password{enter};;模拟键入用户名、密码、回车
return
运行脚本……但没有反应?没错,这是因为脚本中为相应命令定义了热键。#1表示Win+1键。
按下Win+1键,脚本会自动打开163信箱、输入用户名、密码,完成登录。
注意:本例有实际执行中有可能不成功。因为邮箱登录页面可能已经保存了用户名,甚至也保存了密码,导致初始输入焦点不准确。笔者实际在用的例子是登录Lotus Notes客户端,并输入密码。代码如下:
#n::
run, "c:\Program Files\lotus\notes\nlnotes.exe"
winwait,,输入口令
sendinput, mypassword{enter}
return
6 后记
作为0级入门教程,就写到这里吧。只要大家边读、边动手实践,就不难从这些例子中发现 AutoHotkey 的神奇作用。
如要再进步发掘 AutoHotkey 的魔力,可以:
(1)阅读官方帮助文档。
(2)参见笔者使用AutoHotkey的更多实例,AutoHotkey|win run加它更方便,AutoIT3 vs AutoHotkey,AutoHotkey调用Irfanview把24位真彩图片优化到实际色深等。
(3)目前最全面的AutoHotkey学习资料,由 amnesiac 整理:AutoHotkey 学习指南
hotString 别名:
AutoHotKey 称之为hotStrings ,我叫它别名,叫缩写也可以
比如下面的几个例子
以第一个
::btw::by the way
为例 不论在什么地方,当你输入btw然后回车或空格或TAB之后,它会自动扩展为后
面的字符串by the way剩下的几个是公司几个同事的Ip地址,我访问他们的***享文件
时,只需要输入前面几个字母就可以了,而不用输入难记的IP.
::btw::by the way
::liuxjs::\\172.20.68.32
::lihts::\\172.20.68.55
::wanglins::\\172.20.68.51
::wangls::\\172.20.68.51
::kanban::WClass
PostMessage, 0x111, 28931,,, A
Return
}
比如把上面的函数绑定为 Ctrl+Alt+h
^!h::toggle_hide_file_in_explore()
但是,上面有一个问题,如果当前窗口不是资源管理器,它依然会调用这个函数,虽
然不会造成什么恶果,但是原本这个程序的Ctrl+alt+h 也绑定了一个功能的话,
这个功能就没法被调用到了,因为它被AutoHotKey 拦截到了。解决办法就是只在资源
管理器中启用这个键绑定。
代码如下
SetTitleMatchMode Regex ;可以使用正则表达式对标题进行匹配
#IfWinActive ahk_class ExploreWClass|CabinetWClass
^!h::toggle_hide_file_in_explore()
#IfWinActive
表示如果当前激活的窗口是"我的电脑"或者"我的文档"的话,就进行下面的操作。如
果不是,就不进行。#IfWinActive是一个结束标志,跟
#IfWinActive ahkclass ExploreWClass|CabinetWClass 相对应。
IfWinActive/IfWinExists 内容在这。 它是判断“符合某些条件”的“窗口”是否存有的一个
函数。它可以通过窗口标题是否含有特定的字符串,来判断。
如果你用的是英文版的Windows 的话,
IfWinExist Untitled - Notepad
^h::Send , hello
#IfWinActive
这段代码 当你在新打开的记事本(也就是标题正好是“Untitled - Notepad”的窗
口,不能多一个字也不能少一个字)按Ctrl+h ,的时候,会在其中插入"hello"这个单
词。依照正常人的思维,在中文系统里,相应的代码是
IfWinExist 无标题 - 记事本
^h::Send , hello
#IfWinActive
但是,AutoHotKey 对中文虽然支持,但支持的并不好。比如这个地方,中文就不好用。
刚才,进行窗口标题匹配的时候,要求整个标题必须完全匹配。,也可以做到只匹配
标题的一部分,
通过这个命令SetTitleMatchMode 事先进行设置
比如:
SetTitleMatchMode 2
; OR:
SetTitleMatchMode RegEx
可以有 1 2 3 Fast Slow ,RegEx ,六种值
1: 表示前端匹配, 2: 表示部分匹配 3: 表示完全匹配 RegEx:表示使用正则表达式进行匹配SetTitleMatchMode 2
IfWinExist Notepad
^h::Send , hello
#IfWinActive
这个只需要标题中含有Notepad这几个字就可以。
一个窗口,除了可以用标题进行匹配之外,还可以用窗口所具有的其他属性来匹配
比如window ID ,Window Class ,进程ID. 最常用的一个就是Window Class
但是怎样知道一个窗口的window class 是什么呢? AutoHotkey 提供了一个工具
“Window Spy”,运行这个工具,然后用鼠标点选目标窗口,就会出现这个窗口的一些
可用信息。包括window class .
比如这张图是鼠标点选“我的电脑”中地址栏后 的探测结果
红色的圈起来的是“我的电脑 ”的window class .
#IfWinActive ahk_class ExploreWClass
只在"我的电脑"中起作用的代码写在这里
#IfWinActive
SetTitleMatchMode Regex ;可以使用正则表达式对标题进行匹配
#IfWinActive ahk_class ExploreWClass|CabinetWClass
在"我的电脑" 有“我的文档” 中起作用的代码写在这里
#IfWinActive