从AutoHotkey启动程序说起| 善用佳软

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

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

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

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

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

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

#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

  这样,无论在任何程序中,无论有无输入框,只要按下 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程序之间飞舞往返,行天使之善,精灵之魔力。(完)


B1:已有评论17 条

  • 非常感谢, 收益匪浅.
    当初就是通过善用佳软 认识了ahk, 到现在已经离不开ahk和我的那些热键了, 用别人的电脑都有些别扭了.
    顺便想请教下, ahk能不能实现如下功能:
    当scroll lock键盘灯亮时, ahk脚本中的热键有效, 反之ahk热键无效, 或ahk程序处于suspend状态.

    我在帮助文档中找了半天, 也没有合适的指令, 都是’ifwinactive’之类的,用某个程序的开启来控制脚本是否运行, 而没有用键盘的某个键来控制脚本是否运行的.

    在此先谢过了.

  • 快捷键的组合其实还可以扩展更多。
    要点是加入“模式“,可以复用快捷键,比如:
    在标题栏上点中键,最小化窗口
    在explorer的空白处点中键,后退
    当鼠标移动到屏幕边缘点中键,显示桌面
    三种模式下都用中键,定义的功能可以不同。也就是说无形中把快捷键的定义能力扩大了3倍。

    带模式的快捷键定义,可以用ahk写脚本(复杂一些),也可以用powerpro定义(有图形化界面,不过软件本身也相当复杂)。

    快捷键定义方式虽然多,但并不是所有软件都能适用。

    举例说明下,xbeta中的单字母快捷键,兼容性就不能做到xx。因为在使用快捷键之前输入过中文。再使用单字母快捷键就必须手动切换输入法到英文,这样反而降低了效率。
    兼容性{zh0}的还是ctrl,alt,shift加字母组合的快捷键。这也是很多软件为了兼容,没定义特别功能快捷键的原因。

    个人感觉,更强大和通用的快捷键模式,应该是menu式的。可以用user menu的方式来放置用户自定义的功能。具体方案可以参照tc的hot menu。
    比如ctrl+d呼出菜单,用单字母选择自己想要的功能。
    也就是说自定义的快捷键都可以用ctrl+d,xxx的字母序列各出,优点如下:
    1. 兼容性xx。只需要设定调用菜单的一个快捷键而已。其他功能都在菜单里完成,和其他软件快捷键不冲突。
    2. 定义的功能数量多,如果用3个字母,可以定义26×26×26种功能,足够了……
    3. 可以看到文字提示,更直观的学习快捷键。
    其实我说的这种快捷键方式,就是用alt+字母访问菜单功能快捷键的扩展,需要自己定义菜单。可以使用强大的autohotkey来自己做出菜单!

  • 关于TC的那段代码比我写的简洁多了,学习了,毕竟不是计算机专业。
    #a:: ;运行TotalCommander,快捷键win+a
    WinShow ahk_class TTOTAL_CMD
    IfWinNotExist ahk_class TTOTAL_CMD
    {
    run d:\shortcuts\T.lnk
    ;运行TotalCommander
    WinWait ahk_class TTOTAL_CMD
    WinActivate
    WinMaximize
    return
    }

    IfWinActive ahk_class TTOTAL_CMD
    {
    WinMinimize
    Return
    }

    IfWinNotActive ahk_class TTOTAL_CMD
    {

    WinActivate
    WinMaximize ahk_class TTOTAL_CMD
    Return
    }

  • 我一直采win+r,直接启动的程序也不多,大约不超过5个,太多记不住,有回忆快捷键的时间,还不如直接点了。在这方面,还是善用佳软的观点实在,适合才是{zh0}的。

    不过现在转到win7了,win+r或许都可以不用了,win7自带的快速启动十分方便,与win+r不相上下的,不知道善用佳软用的什么系统,对win7什么看法。

    ps:在这打个小广告,我在vimperator中提了个问题,那里人不多了,有知道的可以指点一下吗?

    谢谢。

  • TO mai (不知道为啥不能直接回复了,只能跟在评论{zh1}面)

    gui的代码简单举例:
    ---------------
    lalt & q::
    gui,destroy
    Gui, Add, Button, x185 y16 w80 h20 , cclean
    gui,show,,我的工具箱
    return

    buttoncclean:
    run,tool.alone\tool.ccleaner\CCleaner.exe
    gui,cancel
    return
    ————-
    x185 y16表示按钮坐标
    w80 h20表示按钮高度和宽度
    可以用smartgui制作gui框架,这样就能很好的控制上面的两个要素
    tool.alone文件夹放在autohotkey根目录下

我要发表评论

郑重声明:资讯 【从AutoHotkey启动程序说起| 善用佳软】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——