`

AutoHotkey--Window平台下的使用

阅读更多

 

 翻译 :http://yonken.blogcn.com/diary,103098431.shtml

 

AutoHotkey官网:http://www.autohotkey.com/

 

转自:http://blog.csdn.net/vagrxie/archive/2009/10/21/4710832.aspx

 

 

Don’t Repeat yourself在编程领域成为DRY原则,是知道我们编写强壮代码的重要指导原则之一,但是,事实上在其他领域也是一样的(我也不知道此原则是否最先出现在编程领域)。Larry Wall的懒惰是程序员的美德的话我是记忆深刻。作为一个对计算机着迷,对程序无比投入的人,深知学海无涯,但是,正是因为学无止尽,更迫切的需要我们做追求效率的程序员,将重复的工作交给最擅长做重复工作的电脑去做,只有这样,我们才能将更多的时间节省下来,去干我们自己想干的事情。(虽然工作时不太可能-_-!但是起码能赢得一句手快的评价,再次-_-!)学习VIM,Bash,Python,Lua,Qt,SQL都是如此,在这条路上已经走了这么远的我们,又何惧为了更加提高效率,再多学AutoHotkey这样一个小工具呢?既然选择了远方,就只顾风雨兼程,既然选择了编程,就只能忘了远方。-_-!敲自己的键盘,让别人走路去吧。

AutoHotkey的名字大家说不上如雷贯耳,久仰大名,起码也是早有耳闻了吧。让我们不惧艰险(又是一种脚本语言-_-!)将AutoHotkey作为饭后甜点好好品尝一下吧吧^^

 

AutoHotkey是什么
AutoHotkey简单来说是一个附带键盘宏录制的脚本工具,但是因为功能太过强大了,叫做自动化工具也许较为合适。从自动化工作这一点来看,AutoHotkey类似Linux下的Bash,都不以脚本语言的逻辑表达能力取胜,专门针对自动化工作设计,只不过Bash是命令行下的,对窗口一无所知,而AutoHotkey可以说是专门针对Windows的窗口平台的,有对快捷键和窗口环境的强大支持。(我见人将其称作GUI-Scripting,实在贴切)也许可以说AutoHotkey就是GUI环境下的Bash。既然Linux下Bash是必学的(的确应该学),那么AutoHotkey也就顺面学了吧。

 

安装配置
下载安装我就不多说了,真的不知道这里有个地址可以去看看。善用佳软的AutoHotkey 0级教程,顺面推荐下善用佳软,推崇并介绍了很多好用的免费软件,个人很喜欢。

AutoHotkey的脚本是以ahk为后缀的文本文件,用你自己最喜欢的编辑器编辑吧,对于vim来说,已经内置了对ahk的语法高亮,我习惯将AutoHotkey的安装目录添加进环境的PATH中,这样用vim编辑脚本的时候可以直接简单的通过!Autohotkey %来运行脚本。(事实上我将其map到了F5上)但是愿意的话,其实.ahk文件在AutoHotkey安装后是与其关联的,直接双击也可以运行此脚本。

 

初步
首先编个最简单的脚本,看看效果先。

Run http://blog.csdn.net/vagrxie

将上一行的代码保存成文本,双击运行,或者用autohotkey运行之,会自动开启你机器上的默认浏览器登录我的博客,建议大家每天运行100次以上^^这个功能有点像Python的os模块的startfile函数,通过解析后面的字符串来判断应该使用什么与其关联的程序运行。当年工作的时候我有个开机脚本就是用Python此函数做的,功能就是开启工作需要的一大堆程序,VS,MSDN,TotalCommand自动一个一个开启并打开合适的工程或目录。现在这个功能也可以交由autohotkey来完成了。就是一条Run命名。

相对来说,对于特定用途的工具(比如Bash,autohotkey)来完成其擅长的事情是会比通用工具(比如Python)来的简洁的,此即一例,Python中虽然也能完成这样的工作(在没有学习Bash前,在linux下它都是我的脚本工具),但是,需要进行import模块,函数调用等一堆难看的东西,autohotkey只需要一个Run。这里之所以讲的多点,是想说明一个特定工具哪怕并不是完成了什么不可能完成的任务,也许仅仅是将任务完成的更加简洁高效和优雅,也是一个工具的用途体现。至于值不值得为了这份优雅付出学习的代价,那就见仁见智了。

再看个例子:

Run c:\DirTest.txt

此脚本会自动的用你机器配置的文本编辑器开启此文件。(文件必须存在)

但是以下脚本

Run notepad.exe c:\DirTest.txt

无论文件存在不存在都会开始记事本,其中的区别,大家自己体会一下。事实上解析的强度比一般人能够想象的还要厉害,帮助文件中有这个示例:

Run mailto:someone@somedomain.com

呵呵,什么意思大家都知道,牛吧。可惜我一般不用客户端写邮件-_-!

 

快捷键
AutoHotkey自然对Hotkey又特别支持啦,脚本中用符号表示快捷键,一次排列,几个常见的修饰键对应符号是#Win, !Alt,^Control,+Shift。那么什么叫依次排列呢?看下面的例子。

#space::Run http://blog.csdn.net/vagrxie

以上的例子即将Win + space 键设定为访问我的博客,运行后发现没有直接的反应,不像上述例子,此时AutoHotkey以trayicon小图标的形式运行于右下角,当你输入Win + space的时候会触发其运行默认的浏览器开启网站,并且一直有效,直到你将其关闭。(此例也推荐大家每日运行100遍^^与前面第一个例子结合交叉运行效果更佳)同理,要ctrl+space就是^space,要ctrl+alt+space就是^!space。

事实上,一个快捷键可以对应多个命令,也可以多个快捷键对应一个命令,格式有点不多,见下例。

#space::
Run http://blog.csdn.net/vagrxie
Run http://hi.csdn.net/vagrxie
return

#^a::
#^b::
Run http://blog.csdn.net/vagrxie
return

此例即是在按下Win + space时打开我的CSDN博客和空间两个网页,并且CTRL + WIN + A与CTRL + WIN + B都是打开我的博客。举这两个例子主要是告诉大家AutoHotkey的格式相对比较灵活,比如这里的一对多和多对一。当不是一对一并且写在一行时,需要以return来表示脚本的结束。

 

信息窗口
这也许是最先应该说的,MsgBox

MsgBox Text

即可以通过MessageBox弹出Text的信息,比较方便

可以通过MsgBox弹出Yes Or No等选项,并获取,以判断分支执行程序。

MsgBox, 4,?,Yes or No?
ifMsgBox Yes
    MsgBox You Said Yes!
else
    MsgBox You Said No?

分支执行的语法比较奇怪,通过if结合MsgBox构成一个IfMsgBox特别应对MsgBox的选择。

 

对窗口的控制
个人感觉,对窗口的控制是AutoHotkey的精髓所在,这也是为什么我将其比作GUI下的bash。这里我还是通过从简单到复杂的例子来描述。比如,我现在在编辑文档的时候常常会需要打开AutoHotkey的帮助文档查看,一般我的操作是用鼠标点击其最小化的窗口以激活,或者我也会需要开启gvim以编辑示例程序,也是需要用鼠标去激活,因为用atl+Tab的方式还不如用鼠标快,有了AutoHotkey,我们就有更方便的Hotkey去完成这样的任务了。

SetTitleMatchMode 2
#tab::
ifWinNotExist, GVIM
{
    MsgBox GVIM is not running
    return
}
IfWinNotActive,GVIM
    WinActivate,GVIM
else
    WinActivate,Windows Live Writer
return

如上脚本,先判断是否有标题包含GVIM的窗口存在,不存在则报告GVIM没有运行,不然WIN+TAB键的效果就是在GVim与Windows Live Writer之间切换,非常方便。ifWinNotExist如其名,用于判断一个窗口是否存在,ifWinNotActive也如其名用于判断一个窗口是否激活,第一个参数都是表示窗口标题文字的匹配,匹配模式由SetTitleMatchMode决定。

1: A window's title must start with the specified WinTitle to be a match.
2: A window's title can contain WinTitle anywhere inside it to be a match.
3: A window's title must exactly match WinTitle to be a match.

我们使用的是2,表示任意位置都匹配,默认是1,速度最快,必须是开始位置匹配。if一组的函数都还支持其他参数,具体的请查看帮助文档了,我这里主要是展示一下用途。

实际上AutoHotkey对窗口的控制还有很多强大的功能,一篇小文无法一一尽数,这里再举个例子:

SetTitleMatchMode 2
Loop, 10
{
    Random, x, 0, 50
    Random, y, 0, 50
    WinMove,GVIM,, %x%, %y%
    WinHide,GVIM
    Sleep, 100
    WinShow,GVIM
}

上述程序运行后,GVIM窗口会变的疯狂。。。WinMove,WinHide,WinShow的意思都很明显,分别是移动,隐藏,显示窗口,这里有两个有新意的地方,一个是Random和x,y,有点编程知识的人都看出来了,AutoHotkey是允许设定变量的,此处的x,y就是,引用变量的方式是前后各1个百分号,与windows批处理程序的一样。另外就是Loop,10表示的循环结构了。

 

操作记录器
这个功能有点像国内一个也比较强大的软件键盘精灵的功能(当年玩那种泡菜网络游戏没有少用过它,单纯的键盘鼠标模拟功能不比AutoHotkey差),就是将键盘鼠标操作记录下来,自动生成AutoHotkey的脚本。省去了重复工作的脚本编写之苦。带GUI界面,截图如下:

 点击左上角的Record按钮就开始记录键盘鼠标的操作了。然后通过点击录制时屏幕左上角的Stop停止录制。上面的脚本是我录制的一段激活Windows live Writer和最小化Windows live Writer的过程。

WinWait, ,
IfWinNotActive, , , WinActivate, ,
WinWaitActive, ,
MouseClick, left,  1159,  889
Sleep, 100
WinWait, xfsdlaf.ahk (E:\work) - GVIM,
IfWinNotActive, xfsdlaf.ahk (E:\work) - GVIM, , WinActivate, xfsdlaf.ahk (E:\work) - GVIM,
WinWaitActive, xfsdlaf.ahk (E:\work) - GVIM,
MouseClick, left,  908,  17
Sleep, 100
WinWait, ,
IfWinNotActive, , , WinActivate, ,
WinWaitActive, ,
MouseClick, left,  33216,  32891
Sleep, 100
WinWait, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
IfWinNotActive, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer, , WinActivate, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
WinWaitActive, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
MouseClick, left,  1362,  10
Sleep, 100
MouseClick, left,  1387,  10
Sleep, 100

会发现自动生成的代码较人工的代码还是乱了很多-_-!机器嘛,不是那么聪明。上面代码很重要的一个就是通过MouseClick来模拟鼠标的点击,有了这个功能,想干什么都可以了………………顺面提及一下,也可以通过

Send Keys
SendRaw Keys
SendInput Keys
SendPlay Keys
SendEvent Keys

来模拟键盘的输入。下面是一个当你暂时离开机器却有不想锁屏时可以提出警告的脚本。:)

SetTitleMatchMode 2
SetKeyDelay 50
Words = WARNING{!} DO NOT OPERATE MY COMPUTER{!}

KeyWait, LButton, D
run,gvim YouAreUnderMonitored,,Max
WinWait,YouAreUnderMonitored
Send i%Words%{Esc}

此脚本等待鼠标左键单击,然后自动开启gvim并最大化,然后一个字一个字输入警告信息^^不明就里的人一看估计碰鬼了。

 

小结
对于AutoHotkey这样强大的东西,一篇3000来字的小文实在是无法详细尽数其功能,而本人的目的也就是提供给觉得AutoHotKey复杂而不去学习的人尝个鲜,知道了AutoHotkey没有那么难以后,伴随着使用,参考着帮助文档,慢慢的会发现AutoHotkey也是一个离不开的工具了。我就在网上看到很多人狂喊,Linux下什么都好,就是没有AutoHotkey-_-!(其实类似的言论非常多,比如也没有Windows Live Writer equivalent)


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/vagrxie/archive/2009/10/21/4710832.aspx

分享到:
评论

相关推荐

    AutoHotkey.zip

    window AutoHotkey中文版热键下载window AutoHotkey中文版热键下载window AutoHotkey中文版热键下载window AutoHotkey中文版热键下载window AutoHotkey中文版热键下载window AutoHotkey中文版热键下载window AutoHot...

    AutoHotkey中文帮助文档.7z

    最后,文档中的API参考部分详细列出了所有内置函数和命令,以及它们的参数、返回值和使用示例,这是编写AutoHotkey脚本的重要参考资料。 总的来说,“AutoHotkey中文帮助文档.7z”是一个全面的资源库,对于任何想要...

    AutoHotKey帮助文档【部分汉化】

    这个“AutoHotKey帮助文档【部分汉化】”是AutoHotKey中文论坛社区成员的努力成果,旨在为中文用户提供更易理解的使用指南。 1. **AutoHotKey基础** - **脚本语言**:AutoHotKey基于自己的脚本语言,它简洁且易于...

    Win7Drag (AutoHotKey)

    这是一段 AutoHotKey 脚本, 用来模拟 windows 7 的窗口拖拽操作: * 拖拽到屏幕顶端, 最大化; * 拖拽到屏幕左/右侧, 占据...资源包中有 autohotkey 脚本源文件和编译好的 exe 文件, 没有 autohotkey 软件也可以运行.

    Autohotkey 不专业教程

    下面是 Autohotkey 的安装和使用指南。 安装 Autohotkey 1. 首先,下载 Autohotkey 的安装文件 AutoHotkey104805_Install.exe,然后双击该文件以开始安装。 2. 在授权页面中,可以检查 Autohotkey 的授权协议,...

    ahkscripts:AutoHotKey脚本

    4. **窗口控制(Window Manipulation)**:AutoHotkey能够识别和控制窗口,包括最小化、最大化、移动、隐藏、显示窗口等。这对于多任务处理和窗口管理非常有用。 **ahkscripts-main内容可能包括** 在"ahkscripts-...

    Hide Window Hotkey(隐藏窗口热键)

    Hide Window Hotkey(隐藏窗口热键)是隐藏程序窗口的一个实用软件,能通过鼠标或键盘立即隐藏全部或部分程序窗口。它同样能自动按规则调整你的程序窗口,比如最大化、最小化、正常或是最小化到系统栏。 提示: 配合...

    初级java笔试题-stars:星星

    AutoHotkey - Tiling Window Manager for Windows - 键盘代替鼠标 - 让所有 Windows 桌面程序拥有 Vim 操作风格的辅助工具 - - VimifiedExplorer is an AHK script that provides vim/vifm like bindings for ...

    PoE_MultiScript:PoE 多脚本

    PoE_MultiScript 需要 Autohotkey 才能运行 安装的 Autohotkey 应该是 Unicode x32 版本。 ================================================== ================== 热键: [F1] --- 使用重新同步命令。 [F2] --- ...

    Auto-Beer-Drinker--Deep-Rock-Galaxtic-

    要运行脚本版本,您将需要安装AutoHotkey 。 循环的数量取决于您要喝多少啤酒。 该程序已经设置为叶子爱好者特别版。 如果要更改它,您将必须打开window spy(一个已经与Auto Hot Key捆绑在一起的程序),然后将...

    .ahk-wt-shortcut:通过键盘快捷键启动各种Windows终端配置文件的Autohotkey脚本

    .ahk-wt-快捷方式通过键盘快捷键启动各种Windows终端配置文件的Autohotkey脚本。 通常在这里是因为当我不可避免地忘记它时,请重新安装Windows,并记得在硬盘擦拭完成时将其备份。 为什么要使用AHK脚本而不是Window...

    WINDOWS 一键改变鼠标左右键

    因为有需求,懒, 到网上找切换鼠标左右键便捷小工具, 之后心间不是很好, 写了这个小程序后, 心情好一点了。 源码下面几行: #include int main(int argc, char*argv[]){ if(::SwapMouseButton(true)){ ...

    700k大小的多线程下载器MetaProducts Download Express(中文)

    - Please hold the Shift key down when clicking to have MetaProducts Download Express ignore a link. Mozilla FireFox 1.x - 2.x, Netscape 8.x, SeaMonkey, Flock browsers plug-in Click here to download ...

    可以以另类方式打开Window

    这可能是一款实用程序,如AutoHotkey(用于创建自定义快捷键和脚本)或者PowerShell(用于更强大的命令行操作),也可能是某种编程接口,如Windows API,允许开发者直接与窗口交互。 标签“界面相关类”暗示了这个...

    au3反编译源码

    AutoHotKey was developed from AutoIT and so scripts are nearly the same. Drag the compiled *.exe or *.a3x into the AutoIT Script Decompiler textbox. To copy text or to enlarge the log window double ...

    FastReport.v4.15 for.Delphi.BCB.Full.Source企业版含ClientServer中文修正版支持D4-XE5

    FastReport® provides all the tools necessary for developing reports, including a visual report designer, a reporting core, and a preview window. It can be used in Embarcadero (ex Borland and ...

    DFFOO-Macro:Dissidia Final Fantasy Opera Omnia的自动化宏,需要在模拟器上玩游戏

    这是使用AutoHotkey编写的宏,它允许玩家/用户自动完成特定任务的无聊过程 免责声明 自动化软件和宏的使用与游戏的服务条款背道而驰。 尽管被禁止使用此宏的可能性极小,但请注意,风险仍然存在。 您应对自己的行为...

    BURNINTEST--硬件检测工具

    - Added a hot Key, F4, to set the auto run flag and run the tests (i.e. set "-r" and then run the tests). - Other minor changes. Release 5.3 build 1018 WIN32 release 16 April 2008 - Added an ...

    Inspect7.0 查找AutomationId工具

    编写autohotkey小代码时,有时需要用到window spy工具,自带的不怎么好用。 看到网上用这个测试菜单类的AutomationId属性,然后使用,效果比较好。

    快捷键隐藏某个程序

    4. **编程实现**:对于高级用户,可以通过编写批处理脚本或使用VBScript、AutoHotkey等自动化工具,定义特定的快捷键来实现程序的隐藏和显示。例如,用AutoHotkey可以编写如下脚本: ``` #h:: ; Win+H 作为隐藏...

Global site tag (gtag.js) - Google Analytics