AutoHotkey 学习指南(最近更新: 2012-03-09)

2014-10-01 更新:AutoHotkey 学习指南系列教程来了。

AutoHotkey这不是一份AutoHotkey详尽教程, 而是一份向导, 由于经常遇到许多新人在刚开始接触 AutoHotkey 时看着帮助不知道如何上手, 所以amnesiac(AutoHotkey中文论坛管理员)写了这个向导,希望能节省大家入门 AutoHotkey 的时间, 并可以根据自己的需求有选择地学习。

提示: 欲先简要了解 AutoHotkey, 请参阅维基百科上的 AutoHotkey 词条.

目录:
一. 基础资料和工具
二. 入门教程
三. 进阶专题
四. 一些应用集合
五. 分享和贡献
六. 相关网站及讨论区
附录:文章更新历史

一. 基础资料和工具

1. 中文帮助

可到 AutoHotkey 中文站查看在线帮助或下载离线帮助.

2. 编辑工具推荐

(1) SciTE4AutoHotkey 详情介绍及下载

介绍: 当前版本为 v3.0 rc版, 对 AutoHotkey_L 的支持全面, 建议新人使用.

(2) 含有语法高亮支持的其他编辑工具

帮助 (1.1.00.00+ 版本) 的 Edit 命令中有相关说明和论坛链接, 请参见: [Edit 命令页面]

3. 从 Basic 到 AutoHotkey_L 的兼容问题

兼容性问题根据原因可大致分为编码问题和数据类型问题, 具体参见

(1) 帮助中 “AutoHotkey_L/脚本兼容性” 和其他相关部分.
(2) 官方 Wiki 中 AutoHotkey_L 主题

二. 入门教程

1. 帮助中的 “指南 (快速入门)” 和 “FAQ (常见问答)
2. 自动化操作入门指南 (作者: yoken)
3. [推荐]AutoHotkey 0级入门教程:让重复工作一键完成 (作者: xbeta)
4. [推荐]輕鬆學會彈指神功-揭露AutoHotkey絕技
5. [推荐]小众快餐店系列教程 (作者: sfufoet)
6. 小鸟学AHK系列教程 (作者: wildtoy)
7. 更快的使用你的键盘 (作者: Jerry He)
8. 使用 SciTE 编辑 AutoHotkey 的常见问答
9. [英文]Tutorial for Newbies (作者: jaco0646)
10. [英文]Turn Any Action into a Keyboard Shortcut
11. [英文]AutoHotkey Frequently Asked Questions
12. [英文]AutoHotkey Expression Examples: “” %% () and all that. (作者: deleyd)
13. [英文]Force an Expression (作者: evandevon)
14. [英文]Creating Your First AutoHotkey Script (作者: The Fattest)
15. [英文]Simple automation of Windows and programs (作者: Wolfgang Reszel)
16. [英文]Knock down repetitive email with AutoHotKey (作者: AdamPash)
17. [英文]10 Ways to Use AutoHotKey to Rock Your Keyboard (作者: Leo Babauta)
18. [英文]How to compile .AHK files and include your own icons (作者: deleyd)
19. [英文]Guide to the Ternary operator (a ? b:c) (作者: VxE)
20. [英文]Gaming Tutorial (作者: System Monitor)
21. [英文]Using GetKeyState to Extend Hotkeys

三. 进阶专题

1. 消息指南 (相关命令: SendMessage, PostMessage 和 OnMessage)

帮助中的 “向窗口或者窗口控件发送消息” (作者: Rajat)
帮助中的 “WinLIRC 客户端
系统消息使用简介
[英文]Find WM_COMMAND parameter with Winspector (作者: SKAN)
[英文]Tutorial: Message Stacking (作者: majkinetor)

2. 正则表达式

正则表达式第一阶
[英文]官方Wiki中的正则教程集合

3. COM教程

AHK的 Web 自动化编程 (作者: 彪悍的小玄)[AHKCN 群共享中, 已建议发到中文论坛]
数据库操作示例 (作者: linpinger)
WMI 脚本第一阶系列教程
[英文]IE and Gui Browser Com Tutorial (作者: tank)
[英文]Basic Webpage Controls with JavaScript / COM – Tutorial (作者: jethrow)
[英文]IE Web Recorder Developers Needed (作者: tank)
[英文]Example of Navigating a Website (作者: deleyd)
[英文]Internet Explorer Control

4. 脚本辅助工具

Script Manager [AutoHotkey 脚本管理器]
Easy Automation AHK
AHK Window Info [窗口信息查看工具]
Auto-Syntax-Tidy [自动整理脚本语法]

5. 其他

帮助中 “自动化 Winamp
HK4WIN [通过热键执行系统中的大量常用操作](作者: 宋瑞华)
发送消息到QQ网站 (作者: ddandyy)
Candy [把内容通过关联程序的快捷操作扩展](作者: 万年书妖)  Candy改进版使用介绍
Lock Screen Appinn [屏幕密码锁]
GridMove [便捷窗口管理工具](作者: GridMove)
Folder Menu [文件夹快速切换工具](作者: rexx) 使用介绍
AHK俄罗斯方块 (作者: dracula004)
Qliner Hotkeys [使用屏幕键盘设置热键] 使用介绍
Texter [在 GUI 中设置热字串](作者: AdamPash) 简单介绍
验证码识别 (作者: lskxt)
ViATc [使用类 VI 模式操作 TC](作者: linxinhong)
Appifyer [应用程序集成和启动工具](含视频)(作者: sumon)
nDroid [快速启动程序的工具](作者: Rajat)
林可LINK [快捷方式管理及通过热字符启动](作者: megalove)
[英文]Tutorial: Message Stacking (作者: majkinetor)
[英文]AutoHotkey Scripts to Automate Firefox (作者: nigelle)
[英文]PostgreSQL Functions and a simple test script (作者: Dave)

四. 一些应用集合

1. 帮助中的 “脚本展示
2. [英文]Ahk Standard Library Collection (作者: Tuncay)
3. [英文]List of AutoHotkey Scripts
4. [英文]List of AutoHotkey Functions
5. [英文]1 HOUR SOFTWARE by Skrommel [合集下载]
6. [英文]AHK-Scripts for TotalCMD [合集下载]
7. [英文]Rosetta Code AutoHotkey Category [合集下载]
8. [英文]Overcards.com AutoHotkey Category
9. [英文]JGPaiva’s AutoHotkey Coding Snacks

说明: 上面这些合集的制作均使用AutoHotkey和其他工具半自动收集整理而成的.

五. 分享和贡献

1. 如果您想和大家分享脚本, 却苦于没有空间或不会制作网页, 那么这些都不再是问题了, 详情请参见: 欢迎在 AutoHotkey.net 上分享您的脚本

2. 如果您对 AutoHotkey 有浓厚兴趣, 那么欢迎进行罗赛塔挑战, 详情请参见: 实现罗赛塔任务 – 提升 AutoHotkey

感想: 贡献不如我们想象的那么难, 使用它本身也是贡献. 在别人有需要时, 向其介绍这个脚本语言的相关情况. 进一步地, 例如在官方论坛/中文论坛或其他问答类网站, 在力所能及时帮忙回答, 或者和大家分享您的脚本工具/函数等. 还有帮忙反馈 bug 和相关情况或提供自己的建议, 帮助作者改进. 如果您有能力, 还可以协助参与开发 (这是开源项目的好处之一).

六. 相关网站及讨论区

官方网站[英文]: http://www.autohotkey.com
中文站: http://cn.autohotkey.com
AHKCN QQ群: 58806956


附录:文章更新历史

2012-03-09: 增加几个工具和应用, 去除过时信息, 更新过时链接, 一些细节的人性化调整.
2012-01-29: 增加几个教程和应用及其他细节调整.
2011-11-16: 与 Chris Mallett 交流后建立 AutoHotkey 中文站 (域名由他免费提供), 迁移在线帮助到中文站中, 同时更新本文中相关链接. 增加 WMI 教程, 系统消息教程, 还有后续内容且有待进一步完善, 期待大家的反馈.
2011-06-22: 由于在官方论坛和中文论坛中, AutoHotkey_L 成为多数人的首选, 为了不给初学者造成困惑, 这个指南中将逐渐减少对 Basic 的关注. 增加中文在线帮助, 增加脚本辅助工具, 增加分享和贡献部分, 增加一些应用.
2011-04-28: 一些应用集合增加打包下载, 增加一些不错的应用, 更新失效链接, 更新中文帮助.
2011-02-02: 初稿.

Candy改进版:自适应一键划词搜索/一键输入搜索

君子生非异也,善假于物也!本文就是一个极好的例子:万年书妖用AHK开发了超级小工具Candy,而网友Xu Sylve又进行改进,以满足个性化需求,打造出最轻灵便捷的启动与调用搜索的解决方案。

[引言] 关于“Candy”

Candy是由万年书妖用AutohotKey写成的。
它目前还是个小众的程序,但我相信它会跟Everything一样,成为Windows平台下的必备良品。
因为在我看来:
Candy就像是Windows平台上所有程序和内容关联操作的精准化智能扩展。辟混沌以赋秩序,律秩序以洽混沌,自适自应,无为即为。
对参差多态的类型目标,或在Ctrl+C能用的地方,Candy都能化腐朽为神奇。

Candy相关链接:
– Candy主页:Candy @ Google Code
– Candy作者:万年书妖的博客
《以简驭繁,弹指神通——超绝神器Candy小窥》(注:由于Candy的更新,Candy在ini文件的配置上已经不同于该链接中提供的内容,但有相似处,可做参考。)
《Candy20111204版配置讲解》

[正文] Candy改进版:自适应一键划词搜索/一键输入搜索

网友Xu Sylve对Candy进行了修改,增加了强大的一键搜索功能。(Candy 20111204 改进版下载链接)

一键划词搜索:
在任何地方(包括文本编辑器、浏览器、资源管理器里重命名时)选中文本,按下Capslock键,弹出选项丰富的搜索菜单,来供你做出选择。

一键输入搜索:
在任何地方,按下Capslock键,弹出一个对话框,来输入待搜索内容。输入完毕,回车,弹出选项丰富的搜索菜单,来供你做出选择。

简而言之,就是:
有选中内容时,按下Capslock键,就可以实现一键划词搜索(先选中后搜索)
无选中内容时,按下Capslock键,就可以实现一键输入搜索(先输入后搜索)
【注:切换英文大写字母可以按Ctrl+Capslock键,当然快捷键也可以自由设定为别的键】
candy一键划词搜索 candy一键输入搜索 candy一键输入搜索

[附1] 我是这样用Candy的

1、在Windows Explorer等资源管理器中

若选中图片,按下Capslock键,就可以通过Candy弹出的菜单来做出选择。
决定是用Picasa查看,还是用画图编辑,抑或是用photoshop编辑。

若选中MP3,按下Capslock键,就可以通过Candy弹出的菜单来做出选择。
是用WMP打开,还是用Foobar打开,抑或是其他播放器。

若选中txt,按下Capslock键,就可以通过Candy弹出的菜单来做出选择。
决定是用vim编辑,还是用记事本打开,抑或是其他文本编辑器。

candy文件格式

2、在Chrome中

若选中地址栏中的网址,
按下Capslock键,就可以通过Candy弹出的菜单来做出选择。
决定是将当前地址用Firefox、IE、TheWorld抑或是其它浏览器打开。
这可以为Chrome节省一个IETab扩展。
candy chrome

3、在任意程序中,也包括Chrome

若选中短文本,
按下Capslock键,就可以通过Candy弹出的搜索菜单来做出选择。
你可以决定是用google搜索,还是用百度搜索;是用verycd搜索电子书,还是用音乐搜索引擎搜索歌曲。
————即本文主要讨论的“一键划词搜索/一键输入搜索”。

[附2] 再谈Candy

《以简驭繁,弹指神通——超绝神器Candy小窥》这篇文章中提到Candy的工作方式是:
选中一个目标–>通过特定的方式启动Candy–>根据被选中目标的类型执行特定的操作–>Candy退出
简约来说就是一步式的选中一个目标->直接执行特定的操作。

想想在任意程序中点击右键的过程:
选中或不选中目标->弹出右键菜单->用户选择特定的操作->右键菜单退出

两者之间是何其类似,(夸张点说,使用者甚至可以在Candy菜单中定义复制/剪切/粘贴来替换掉右键菜单。)
所以我更愿意把Candy比作是Windows平台上程序的第二个右键菜单
这也就是我把上文中的“Candy弹出的菜单”中的“弹出的”划掉了。
基于“第二个右键菜单”这个比喻,Candy的工作方式可描述为:
选中一个目标->弹出Candy菜单->用户选择特定的操作->Candy菜单退出

注1:本文提供的Candy源码是得到万年书妖准许后发布的,特此感谢。
注2:感谢塞壬在本文发表过程中给予的有益评论与帮助。

AutoHotkey 0级入门教程:让重复工作一键完成 (2011-10-24修订)

AutoHotkey AutoHotkey是一个神奇的工具。为了便于新人上手,xbeta写了此篇最最傻瓜的0级入门教程。

1 何为AutoHotkey

AutoHotkey是一个小工具软件,可以简化你的重复性工作。
比如要登录某论坛,你只要按一个键,AutoHotkey就会替你:打开浏览器、输入网址、输入用户名和密码、回车,完成登录过程。
只要有想像力,AutoHotkey可以完成更多工作,参见 AutoHotkey,让win+run如虎添翼,及更多文章

2 下载及安装

软件名称: AutoHotkey
软件版本: 1.1.05.01
软件大小: 2+MB
软件授权: 免费、开源
适用平台: Windows 98-Win7
下载地址:点击这里下载

安装:按提示操作即可。我习惯上装在 d:\program files\AutoHotkey
第1屏是欢迎;点Next。
第2屏是版权声明;点I Agree。
第3屏是版本选择,可根据操作系统、需求,选择合适版本。比如我在WinXP下选择了 Unicode(32-bit)。
[image: AutoHotkey]

第4屏是安装内容:如下图。建议全部选中。
[image: AutoHotkey]

接下来是安装目录、开始菜单设置、安装过程。
最后,是安装成功提示:是否看帮助文件。AutoHotkey的帮助文件,写得很细。有耐心的就认真拜读,想成高手的必须要研读。(更多中文译本见这里

3 应用例1:提示与访问网页

创建脚本文件

如下图,打开你的文本编辑器(notepad、或gVIM),新建一个文件,把下两行内容复制进去。

msgbox, 这是我的第一个AutoHotkey脚本 `n 我既关注效率,也尊重版权
run, http://xbeta.info/autohotkey-guide.htm

先任意保存到一个地方(比如桌面),文件名任意(比如 new.ahk)
注意:①文件名后辍必须为ahk;②保存格式必须选为 UTF-8!
[image: AutoHotkey]

运行脚本文件

这时,双击new.ahk看到效果了:
先弹出如下提醒
[image: AutoHotkey]

你点击“确定”按钮后,就会启动浏览器,打开本文网址。

原理解释
所谓脚本,其实就是一个txt文件。它由用户编写,由AutoHotkey来执行。
第1句:msgbox是一个命令(或称为函数),AutoHotkey见到它,就知道要弹出一个消息窗口了。后面的文字是参数,在这一命令中,就是弹出消息的文字。其中的`n表示换行。中间用半角逗号分隔。
第2句:类似,函数是run,就是运行。后面的参数就是本文的url。也就是说,AutoHotkey的run功能,可以运行程序,也可以打开文档(如 d:\freeware-list.txt),也可以打开网址。

4 应用例2:缩写

将下面的语句保存为 new2.ahk (提醒 UTF-8 编码):

::test1:: 善用佳软。ひらがな 平仮名;カタカナ 片仮名。Korean/한국어/조선말。

运行后,在任何能正常显示 unicode 字符的程序中(比如浏览器的地址栏、MS Word),键入 test1后,再加空格、或tab、或回车,就可以触发缩写,“善用佳软……”内容就上屏了。

通过这一例子,可以看到 AutoHotkey 实现常用短语(地址、邮箱、密码、网址、签名)的缩写非常方便。
关于缩写功能,还有人用 AutoHotkey 开发过一款专门用于缩写功能的Texter呢,详见这里

5 自动登录网站

将下面的语句保存为 new3.ahk (提醒 UTF-8 编码):

#1::
run, http://mail.163.com
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 AutoHotkeyAutoHotkey调用Irfanview把24位真彩图片优化到实际色深等。
(3)目前最全面的AutoHotkey学习资料,由 amnesiac 整理:AutoHotkey 学习指南

注:xbeta用gVIM编辑ahk文件的,高亮效果如下:
[image: AutoHotkey]

附:文章更新历史

2011-10-24: 更新版本号、截屏。
2011-02-13:更新失效图片,把安装包更换为AutoHotkey_L,增加缩写、Notes登录实例。
2006-09-13:初稿于sina blog,并被转载至PConline 《演绎段氏”凌波微步” AutoHotkey 0级入门教程》>

ahk脚本:中键点击返回上级目录,适用TC/FC/资源管理器

簡睿发表了一篇ahk文章,介绍在档案总管(资源管理器)或FreeCommander中,按鼠标中键(滚轮),实现返回上级目录的功能。现做转载,并修改其ahk代码,目前支持TC(Total Commander)、FC(FreeCommander)、资源管理器,适用于 WindowsXP – Win7。

提醒:①脚本需要安装AutoHotkey才能运行;②脚本会导致这些程序中鼠标中键的其他功能失效(比如mymutou提到“TC鼠标中键关闭标签功能失效”。 所以本脚本仅供参考和特殊情况下使用。

ahk脚本:中键点击返回上级目录

簡睿原文

不論在檔案總管或FreeCommander裡,切換到上層目錄的按鍵不同,為了更方便的快速切換到上層資料夾,我使用了AutoHotkey將按滑鼠滾輪(滑鼠中鈕)變成切換的按鈕,這樣手不用離開滑鼠就能切換目錄:

用WinGetClass將目前視窗的類別存入變數sClass,當類別是”TFcFormMain”(即FreeCommander的視窗類別)則送出FreeCommander切到上層的退倒鍵{BS},當類別是”CabinetWClass”(即檔案總管的視窗類別)則送出檔案總管切換到上層的〔Alt+Up〕。

Autohotkey安裝資料夾裡的AU3_Spy.exe能找出開啟中視窗類別(參考:用AutoHotkey防止因按Esc鍵而不慎誤關視窗)。[via]

修改后的ahk代码

【功能】在TC(Total Commander)、FC(FreeCommander)、资源管理器 中,按鼠标中键(滚轮),返回上级目录。

【原理】其实这个脚本的核心就一句“收到中键,发出backspace或Alt+up”——因为这3个程序中,返回上级目录的热键都是backspace 或 Alt+up(Win7资源管理器)。

【点评】鼠标中键比backspace键更“快捷”吗?这主要看用户的当下状态:如果双手在键盘上,当然用backspace键;如果正用鼠标浏览文件,当然中键更方便。

$MButton::
WinGetClass,sClass,A
if (sClass=”TFcFormMain” or sClass=”TTOTAL_CMD” or sClass=”ExploreWClass”)
Send, {BS}
else if (sClass=”CabinetWClass” || sClass=”#32770″)
Send, !{up}
else sendplay {MButton}
return

3层金字塔模型:我的ahk使用和学习体系

声明:我从来就不是ahk高手,只是现用现学而已。并且,我不关心ahk的技术细节和深入功能,纯属“实用主义”——这与amnesiac更积极的研究、推广思路是不同的。两种方式无对错优劣,视个人精力与风格。

我使用和学习(没错,先使用,后学习)AutoHotkey 的经验,或者推广到任何软件,甚至任何工具,可以用一个3层金字塔模型来表现。

第一层:自己编写且在用的脚本。
* 仅在必须且可能的情况下,才自己编写(或录制)脚本。如果手工工作量不太,不一定用脚本。如果脚本太复杂,估计查文档、调脚本所需时间过多,也不用脚本。
* 多数情况下,这类脚本极简单,比如只涉及键盘和鼠标输入、热键定义等命令。
* 有些脚本极简单、无技术含量、不通用、但极有效。比如现在注册weibo,会强行关注几十个人。我就录了一个脚本,模拟点击,来取消默认关注。

第二层:别人编写的脚本。
* 多看别人的脚本,是高效而有趣的学习方式。
* 有的脚本可直接使用。
* 有的脚本可修改后使用。
* 有的脚本会让你学到新思路或新命令,以备后用。

第三层:官方技术文档。
* 帮助文档、官网、作者在论坛的讨论与回复……
* 能够整体理解 AutoHotkey,知道 ahk 能做什么不能做什么,擅长做什么不擅长做什么,一切心中有数。

这3层,从塔尖到塔基,从脚本数量看,越来越多;而从实际使用看,则距离越来越远;再从知识或应用可能性来看,则起来越根本,越来越变化无穷。各层之间,具体是何比例?这要因人而异,因事而异,因时而异。模型大处是哲学,落到细节便是艺术,都难以量化。如果纯从主观判断,答案仍旧是那句话“心安之处,便是吾乡”。

合理使用AutoHotkey+StrokeIt

xbeta注:在追求操作快捷与自动化的路上,有3款软件不得不提:超小的快捷键神兵hoekey,超小的鼠标手势之王StrokeIt,此外还有更富扩展性的AutoHotkey。前二者长于调用,而后者则强于功能。将两类软件结合在一起,双剑合璧,会有何等效果呢?且看dyseat网友的做法!

下文转载自dyseat文章,xbeta略有修改。

《合理使用AutoHotKey+StrokeIt》

工作中总是有一些重复的动作要做。操作的次数多了,就想找点自动完成之类的东西。找来找去,选中了Autohotkey。虽然内存占用比hoekey大了一点点,不过功能比hoekey要多一些,可完成的动作也要多一些。相比之下,还是可以接受的。

我的Autohotkey的ini文件所有动作全是自己做成的,一般来说分两部分:输出字段、实现动作。

1. 输出字段:让AHK自动输出日期时间

工作中,经常会遇到需要输入当前系统时间的情况。你会怎么做呢?
① 数字键直接输入:这是最简洁的办法,但也是最低效的。
② 输入法:目前多数输入法都支持输入当前(或指定)日期,并支持不同格式。但对于同时使用多种输入法的朋友来说,要保持一致的体验,并非易事——比如,要输入当前日期,有的输入法要键入dqrq,有的则要键入date。笔者经常使用中英日3种输入法,根本就放弃了这一想法。
③ AutoHotkey输入:虽然要编写代码,但输出格式、触发方式可完全自定义,也超越了输入法的限制。代码如下:

代码示例1:按下 /dd ,输出 YYYY-MM-DD HH:MM:SS

::/dd::
d = %A_YYYY%-%A_MM%-%A_DD% %A_Hour%:%A_Min%:%A_Sec%
clipboard = %d%
Send ^v
return

代码示例2:按 /rs 输出 MMDD

::/rs::
d = %A_MM%%A_DD%
clipboard = %d%
Send ^v
return

2. AHK实现动作

目前为止,只写了一个,是用来控制becky的。因为工作都是用mail联系的,平均一天要收50+的mail。所以经常要打开、最小化becky。一天重复N次,虽然说不麻烦,也都只是鼠标点一下。不过要移动鼠标到特定的点进行点击,所以还是要浪费一些脑细胞的。所以写了这个东西,检查becky是否打开。如果没有就打开,如果打开就判断是否激活;如果没有就激活,如果已经激活就最小化。好像QQ的Ctrl+Alt+Z 功能一样,而且比那个功能还好。按一下出来,再按一下还能回去!方便啊!

代码如下:

^!#a::
IfWinNotExist, xxxxx – Becky!
;判断becky是否启动
Run,c:\SystemTools\Becky_jp\B2.exe
;没启动则启动becky
Else
{
IfWinActive, xxxxx – Becky!
;启动的话则判断becky窗口是否激活
WinMinimize,
;激活的话就最小化
Else
WinActivate,
;没激活的话就激活
}
return

3. 让 StrokeIt 调用 AHK

本来用上面这些就应该差不多了…….. 不过既然已经懒了就想更懒点…. 这个还是要点键盘的…..而有的时候如果手不在键盘上就要挪过来然后点然后在挪回去这个…… 对懒人来说是无法忍受的. 还好还好鼠标几乎是不离手的恩…..那当然是立刻想到用StrokeIt了.

其实StrokeIt本身也有一些不错的功能的不过毕竟还是有限的哪有AHK强大我现在的做法是能用StrokeIt本身功能的就用不能用的就写到AHK里然后用StrokeIt调用AHK的快捷键这样一来…..真的是方便啊…..

经过如下配置:
StrokeIt调用AHK

最终效果是:
– 鼠标右下一拉 becky显示 再右下一拉 becky隐藏
– 向右一拉 输出 MMDD
– 拉个D 输出 YYYY-MM-DD HH:MM:SS
– 向左下拉 当前窗口最小化
– 向右上拉 显示刚才最小化的那个窗口 (我是用他调用 Alt+Shift+Tab 来做到的)
– 还有一些….是定义在特定窗口里的…
而且这样用还有一个好处:想用鼠标调用就用鼠标调用,不想用鼠标调用,也可以直接用键盘调AHK。两边都不影响。(正文完)

附1:相关链接
AutoHotkey 0级入门教程:让重复工作一键完成
[鼠标手势StrokeIt]一鼠走天下-兼谈电脑操作的便捷性

附2:更新历史
2011-04-11:更新图片;解释输出日期为什么没用输入法。>

AutoHotkey_L:支持unicode, 能发送中文的AutoHotkey分支

AutoHotkey原版的 AutoHotkey 不支持 unicode ,给中文用户带来极大不便。比如,sendinput 输入中文时,必须借助剪贴板 或 自定义函数

幸运的是,开源软件再一次带来了奇迹:早在2008年就出现了支持 unicode 的 AutoHotkey 分支——由Lexikos维护的 AutoHotkey_L

一、AutoHotkey_L 简介

AutoHotkey_L 是 AutoHotkey 的一个第三方分支版本,由 Lexikos 维护。主要增加和增强了对象、debug调试、unicode、64位、图标等功能。

AutoHotkey_L主页:http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

== AutoHotkey_L 主要特征 ==
* Objects (extensible associative arrays).
* Interactive debugging features, when used with a compatible debugging client.
* Significant functionality developed by other community members:
  + Native 64-bit support by fincs.
  + Native COM support by Sean.
  + Native Unicode support by jackieku.
  + Support for various text encodings.
  + New DllCall arg types for portability.
  + Object-oriented file I/O.
* #if expression – Similar to #IfWinActive, but for arbitrary expressions.
* Built-in support for menu icons and improvements to icon support.

二、AutoHotkey_L 下载、安装、体验

* 选择合适版本进行下载,比如我在测试中选择了Unicode x86
* 将解压出的 AutoHotkey.exe 覆盖原来安装的AutoHotkey.exe。
* 新建一个 test.ahk ,注意:文件编码务必选用 utf-8
* 复制如下代码到 test.ahk

::test1:: 善用佳软。ひらがな 平仮名;カタカナ 片仮名。Korean/한국어/조선말。

::test2::
sendinput, 善用佳软。ひらがな 平仮名;カタカナ 片仮名。Korean/한국어/조선말。
return

* 运行 test.ahk 。(此版本的AutoHotkey.exe系统托盘图标的H字符更加粗壮)
* 在任何能正常显示 unicode 字符的程序中(比如浏览器的地址栏),键入 test1 test2 应该都能上屏指定的文字,即 sendinput 与 hotstring 都支持中文(unicode)了。

欢迎AutoHotkey爱好者分享此消息,也欢迎提供 AutoHotkey_L 其他功能的应用举例。
* 《一键去掉Tweets中的所有“RT”字符|陈轶的盛夏厅》:避免英文Windows下,StringReplace, clipboard ……含有中文时的乱码问题。
* 《SuperMemo生词捕捉,词库制作工具:QArabbit》:使用SuperMemo的朋友,欢迎使用AutoHotkey_L写的词库捕捉制作工具QARabbit

附:AutoHotkey_L 发现记

我在wordpress撰写或修改博文,一向是用gvim手写源代码。当然,用 AutoHotkey 实现了一键操作。但 AutoHotkey fileappend 创建的文件,fenc=cp936,偶尔会保存出错,显然不如utf-8格式方便。尽管知道AutoHotkey不支持unicode,但是否有奇迹能设定fenc呢?Google 『AutoHotkey fileappend utf-8』,第一条结果就见到 AutoHotkeyU,进入后发现,该分支已经合并到 AutoHotkey_L ,下载后测试『FileAppend, %clipboard%, %tmpfile%, UTF-8』成功,再试了上面的sendinput依然成功,于是,写出来与大家共享。

当然,事后进一步搜索发现,http://ahk.5d6d.com/ 论坛上早就有关于 AutoHotkey_L 的讨论了。由此可知:①经常有人火星,所以,需要进一步分享。②凡事可以更乐观地搜索。

————————–
2010-09-14: 初稿。

从AutoHotkey启动程序说起

  陈轶自定义的系统快捷键是使用AutoHotkey的典型好例子。所谓“典型”,是指所用功能系AutoHotkey最基本、最常用者。所谓“好”,是指他总结出了自己的原则,比如“设置快捷键的时候,我首先考虑的是不会其他软件冲突……,所以最后使用的全局快捷键全部和Win键有关,原因是程序很少会把这个键关联到热键上去。” 要有自己的软件应用原则,这一点非常重要。因为,功能再多,也只属于软件;属于用户的,只有“应用”;而在纷繁的软件、千变万化的应用中,唯有“原则”才能让你不迷失于物、把握方向、不断前进。打个比方,没有提升出自己的原则,用过再多软件,也只是相当于读了中国的小学,又读美国的小学,再读法国的小学……;而提升出原则,则相当于从小学,进入中学。
  陈轶提及的快捷键,都是属于“快速启动某款程序”。我就此先做总结,后做扩展,并稍做评论,欢迎大家补充。

一、快速启动程序的另一个总结

  关于快速启动程序和文档,曾有一次未定稿总结,在理论篇提出了明确“需求、偏好、可承受成本”,是选择软件与方法的标准。在实践篇,把相关软件分了三类——但这种分类仍不够清晰,混杂了“通用vs专用”、“渐进vs终极”两个维度。现稍做补充。
  解决任何问题和需求,其方案可分为两类:专用方案、通用方案。比如,“如何批量转换图片”,走专用方案路线,就是搜索 batch image convert ;走通用路线,就是研究主流的图片类软件(如IrfanView、XnView),是否有此功能。相较而言,前者是“专家”或“秘方”;而后者是“大师”。当然,软件功能过多而体积庞大、且每一功能并不精深的情况,也是有的。但是,亦有一些绝顶软件,如TC、IrfanView,既博且深,深入掌握它们之后,对专用软件的需求会大幅度下降。一精胜十庸,一将能挡百万兵。
  所以,我多数情况下选择通用方法,这样所用软件数量虽少,但所能者多。
  回到快速启动,第一等通用方式就是利用操作系统的功能,比如win+r方式、批处理、vbs脚本。
  第二等通用方式,就是借助第三方更强大的脚本工具,比如AutoHotkey或AutoIt。
  专用方式当然就是专门的快速启动类软件,从略。
  实际上,还有一种“变通方式”,所谓至高境界,一花一叶皆可伤人,以刀行剑意,即是此理。比如,也可用Everything这样的搜索工具实现快速启动。

二、AutoHotkey启动程序的不同方法

  如果说AutoHotkey快速启动程序的应用中, #n:: run notepad 算是最基本、最实用的入门招式,则其变化、提升、进阶招式如下。

1. 从简单执行到区分场景

  #n:: run notepad 算是一键一招,无变化。而如下的代码,则是“一键多招,区分场景”。

  例1:win+t,打开TC:未启动则启动之,未激活则激活之,已正常则最小化。

#t::
DetectHiddenWindows, on
IfWinNotExist ahk_class TTOTAL_CMD
Run d:\Program Files\tc\TOTALCMD.EXE
Else
IfWinNotActive ahk_class TTOTAL_CMD
WinActivate
Else
WinMinimize
Return

  例2:我工作中要在不同系统中,为不同业务进行在线审批。按下win+a(agree),分别自动执行某些操作。

#a::
IfWinActive, cnooc/process
{……当在此类审批窗口时,按下win a(agree)表示同意后,自动执行的审批操作}
IfWinActive, Lotus Notes
{……当在Notes审批窗口时,按下win a(agree)表示同意后,自动执行的审批操作}
IfWinActive, bank
{……当在银行主数据类审批窗口时,按下win a(agree)表示同意后,自动执行的审批操作}

  再举一例,如下代码将ctrl-p在TC中定义上↑方向键,而在其他程序中不做定义。

^p::
IfWinActive Total Commander
send, {up}
else
sendplay, ^p
return

2. 从狭义的快捷键到广义快捷键

  一般人只把ctrl+s、F12这样的的键当作快捷键,这只是很狭义的理解。
  在IrfanView中,保存不是ctrl+s,而是s;在Vim中,复制是y,删除是d,粘贴是p——这是更快捷的快捷键。
  在MS Word中,alt-v-d 是显示文档结构图,alt-t-w 是统计字数;在桌面上,右键-r是属性——这些菜单、鼠标、键盘的组合使用,也是快捷键。
  回到AutoHotkey中,为了解决“狭义快捷键”不够用的情况,除了把一个键分场景映射之外,还有两大方法。

2.1 热字符串 (hotstring)

::znp::
run notepad
returnn

  这样,在大多数程序 [1]中,无论有无输入框,只要按下 znp 再加一个结束符(空格、回车等),即可执行记事本。其优点是全普通键盘操作,字符串无字数限制,便于记忆。更多参见AutoHotkey帮助文档。

2.2 普通键也可以组合

  所谓的组合键,仿佛汉字的形声字。比如ctrl+s,ctrl就是辅助键(或称为修饰键、特殊键、前辍键),s算是主键。但在AutoHotkey这种自由精神的倡导者眼中,辅助键不仅是 ctrl, alt, win, shift,其他键也可以担任辅助键!
  如果你认为传统意义的热键不够,推荐把z键再做为辅助键(基于位置、应用频度考虑)。这样,你可以实现 z+n 打开记事本……等功能了。

z & a::MsgBox You pressed z and a.
z & n::run notepad
z::send z
+z::send Z

  圣人者,方而不割。君子者,望之俨然,即之也温。AutoHotkey者,入门易而妙用无穷,在用户与windows程序之间飞舞往返,行天使之善,精灵之魔力。(完)

附:注释

  [1]: AutoHotkey的hot string在大多数情况下都能高优先级生效。但当另一些程序对键盘的优先级也很高、并且hotstring的字母在接受范围之内时,可能会引起失效或部分失效。例如:Total Commander 7.50a中,设定了任意字母直接激活快速搜索,上例(znp)中键入首字母z时,TC捕获并显示快速搜索框,继续输入np和结束符,并不能达到预期目的。再如,Lotus Notes的邮件列表中,也把键盘输入视为快速搜索。解决方法:①了解到原因是更高优先级的程序吃掉了第一个字符后,就可以先任输一字符让TC/Notes吃掉,再输入znp。这样就可以了。方法②,利用输入法的更高优先级,来屏蔽这类程序。比如在TC中激活输入法,再输入znp结束符,也能生效。
  [2]: 另外,hotstring通常用来解决缩写问题。有网友问:“我的ahk中有一个 ::chi::chinese 的hotstring ,在gvim中, 用 i 进入插入模式,这时候直接使用该hotstring的话,没有效果。非得在前面先输个标点符号(字母不行),比如 逗号 顿号 斜杠 什么的,hotstring才能正确响应” 答复如下: 默认情况下,需要键入 <分割符>chi<分割符> 才能触发, 你认为“已经输入了chi”,只是从自己和vim的立场。而在AutoHotkey看来,是分别是给出了ichi ixchi 的string,所以不触发chi的命令。 你可以修改hotstring或改变自己的键入。 或者,AutoHotkey也支持参数,来忽略前后的分割符,摘录略……,详见帮助。

CreaWriter: 可用AutoHotkey模仿之

  电脑玩物 介绍CreaWriter 软件。价值是通过“全屏图片背景+背景音乐+半透明的编辑窗口”,来实现或专心致志、或激发灵感的高效写作。如果我需要类似功能,会如何做呢?请 AutoHotkey(介绍) 作大厨,以几款常用经典软件为主料,则 CreaWriter 的替代套餐出炉了。效果图及代码分别见下:
[image]

SetTitleMatchMode, 2
run "d:\music\we-are-the-champion.mp3"
run "d:\Program Files\pic\IrfanView\i_view32.exe" "d:\pic\费德勒2010澳网再夺冠.jpg" /fs
run d:\Program Files\vim\vim72\gvim.exe "d:\xbeta-test\note.txt"
WinWait, vim
winmove, vim,,300, 100, 800, 600
WinSet, Style, -0xC00000, vim
WinSet, Transparent, 190, vim

  赤尊信退回己阵,心内一阵犹豫,不知要选取那种武器。浪翻云的剑势可柔可刚,可拙可巧,已经超越了长剑的限制。
  赤尊信是以天下兵器为己用。浪翻云却以手中一剑尽天下兵器的变化。一个由博入简。一个由简达博。
  在无数次的战斗,赤尊信都能迅速决定选用最佳的兵器,但这次面对可怕的覆雨剑,他第一次犹豫起来。赤尊信心中忽然醒觉自己已经输了,浪翻云专心一意,以剑制敌。自己却要在选取武器上,三心两意,甚至还不知道应要选取什么武器,以致气散神弛。
  ——黄易 《翻云覆雨·第9章》

vtano.ahk:GVIM+AHK实现顶层透明笔记本

有了超强的VIM,超强的Auto Hotkey,需要的只是用户的创造性了。本文介绍利用 AutoHotkey 让 gvim 窗口置于顶层、半透明、设定大小,以便于记录笔记。(参考文章:AutoHotkey入门教程:让重复工作一键完成普通人的编辑利器——VIM

截屏

  注意,上面的大窗口只是用来展示脚本在vim中的显示效果。左下角透明窗口才是这里所说的透明笔记本。
  GVIM+AHK实现顶层透明笔记本

相应脚本

  vtano.ahk 脚本及详细的注释如下。需要说明的是,脚本的代码颜色高亮也是用 Vim 的:TOhtml 功能导出的。

; 1. 基本信息
; 名称:vtano.ahk:GVIM+AHK实现顶层透明笔记本
; 作者:xbeta (善用佳软)
; 版本:v1.0 (2007-10-30)
; 网站:http://blog.sina.com.cn/xbeta
; 由来:经常在阅读文档时,希望有一个小巧的笔记工具,可以透明悬浮在顶层,随时键入文字,而不影响原来的阅读对象。由于我极喜欢GVIM,所以想到了用 Auto Hotkey设置GVIM置顶、透明的办法。当然,GVIM自身有一个VimTweak扩展,可实现类似功能。但VimTweak的透明是背景与文字整体 设定透明度,这样文字看起来不清晰。而AHK可以设定背景色完全透明(如果能设定透明度就更理想了),而文字正常显示,我认为这种效果更好一些。
; 适用对象:计算机上装有Auto Hotkey 和 GVIM,并且极其偏爱它们
; 2. 使用方法
; 将此文件放在加入path变量的目录(如系统目录)下,运行 vtano.ahk 即可
; 或任意放一位置,然后建立xx.lnk,运行 xx 即可
; 3. 说明
; ① 如果你不用AHK,也可以把此文档编译为exe
; ② 中间大段的send,也可以改写到vim脚本中
; ③ 如果想Gvim的标题栏也透明,只须让标题栏颜色(windows样式)、gvim背景色、ahk设定的窗口透明色三色相同。

SetTitleMatchMode, 2 ;设定ahk匹配窗口标题的模式
run d:\Program Files\gvim\vim71\gvim.exe ;启动gvim
winactivate, No Name ; 激活此窗口
sleep, 500 ; 延时,确保

send :hi clear Normal{enter} ;取消gvim的颜色
send :hi clear{enter} ;取消gvim的颜色
send :hi Normal guifg=red guibg=green{enter} ;设定为绿底红字
send :e c:\WINDOWS\Temp\vtano.text{enter} ;打开笔记文件,后缀为text是防止txt有其他语法加亮

sleep, 500
winmove, vtano.text,,50,50,300,150 ;设置窗口:大小、位置
winset AlwaysOnTop, ON, vtano.text ;设置窗口:置顶
WinSet, TransColor, 00FF00, vtano.text ;设置窗口:将绿色部分设为透明

附: 网友的 Fullscreen GVIM

  网友利用 AutoHotkey 制作了 全屏 gvim,原文见 此处。担心原网站停止维护,转载如下:

Fullscreen GVIM,03月 4th, 2008

我是在小众软件发现Q10这个软件的,用了过后很喜欢,但总觉得作为一个文本编辑器来说,Q10的功能弱了点,比如它似乎没有文本高亮,这样,如果我需要一个”专心致志代码编辑器”,它就无能为力了.

近日拜读了善用佳软的”GVIM+AHK实现顶层透明笔记本“一文,受此启发,加上我也是一个vim爱好者,心想何不用AHK+GVIM打造一个”专心致志编辑器”呢:-)
下面是我的实现, 供大家参考.

1. 设定GVIM,去掉menubar和toolbar
既然我们要打造的是一个”专心致志编辑器”,那么多余的东西一概不要,回复vim的本色.
编辑$VIMHOME\_vimrc文件,加入以下两行
set guioptions-=m “Remove menubar”
set guioptions-=T “Remove toolbar”
set guioptions-=r “Remove v_scroll bar”

2. 新建一个AHK脚本,例如gvimfull.ahk,输入以下内容后保存(PS,这个脚本是根据善用佳软的”GVIM+AHK实现顶层透明笔记本“的脚本改写的.)

SetTitleMatchMode, 2 ;设定ahk匹配窗口标题的模式
run c:\Program Files\vim\vim71\gvim.exe ;启动gvim
winactivate, No Name ; 激活此窗口
sleep, 500 ; 延时,确保
send :e d:\Notebook\txt\temp.txt{enter} ;打开一个临时的笔记文件
sleep, 500
winmove, temp.txt,,-1,-6,1408,1062 ;设置窗口:大小、位置, 这些数值需要根据使用者的屏幕分辨率调整,这是1400X1050分辨率屏幕的一个参考值

WinSet, Style, -0xC00000, temp.txt ;WS_CAPTION, 去掉title bar
WinSet, Style, 0×10000000, temp.txt ;WS_VISIBLE, 全屏模式

3. 双击gvimfull.ahk运行,下面是效果截图.

.

Full Screen GVIM – 修订版,03月 5th, 2008

今天抽空研究了一下AHK的帮助文档, 真是个好东东, 让我重新找回了在unix上工作的感觉.
花了点时间对昨天做的全屏GVIM的脚本做了一些改进,方便那些不懂AHK脚本的用户使用

– 用配置文件来设定GVIM路径,屏幕分辩率等
– 将以前用修改_vimrc来去除menubar, toobar的方式放到AHK脚本里来实现,这样你就不需要再修改vim的设定了
– 提供了一个编译后的exe文件.即使没有装AHK,也能实现全屏GVIM工作

点击这里下载源代码和配置文件 (为了表示对Q10和GVIM的尊重,我命名为G10^_^),解压缩后,修改 G10.conf配置文件
各个字段的含义如下(注意,请不要加入后面的中文注释)

GvimHome=C:\Program Files\vim\vim71\gvim.exe gvim的路径
X=-1 屏幕位置偏移量X
Y=-6 屏幕位置偏移量Y
ScreenWidth=1408 屏幕分辨率width
ScreenHeight=1062 屏幕分辨率height
AlwaysOnTop=0 1表示工作在Always On Top的模式(如果你要用金山词霸这样的软件,就设定为0,否则设定为1

修改完成后,点击Q10.exe或者Q10.ahk就可以执行啦

初稿:2007年10月;更新:2009-10-11