陈轶自定义的系统快捷键是使用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也支持参数,来忽略前后的分割符,摘录略……,详见帮助。
发表回复
要发表评论,您必须先登录。