[办公]Autohotkey在office中的应用

Autohotkey,简称AHK,是一个开源的、极其强大的脚本编程工具。个人认为,在快捷键方面,似乎没有比其更牛的软件了。其与AU3功能相近,但是体积更小,更加方便应用。

AHK能做什么?

(1)快捷键的自定义,也许有人说,国产的按键精灵不行么?但是,经过对比,我感觉,也许在游戏中,按键精灵用来点鼠标用的更多些,但是其并不适用于办公,尤其是设置更加多样的快捷键方面。如你可以将左Win+t设置为一个快捷键来执行功能,也可以将右Win+t来执行另一个功能;可以设置按Capslock+q来打开百度搜索;可以设置右Ctrl+右Alt+鼠标右键来打开word的插入公式功能;而这些,按键精灵无法做到或很难做到;
(2)GUI功能,使用AHK可以方便的打造一个GUI,设置想要的控件,来实现想要的功能,这个功能也是区分与VBS、BAT、JS等脚本之处;
(3)调用系统函数:在AHK中,可以方便的使用SendMessage来发送消息,获取文件路径,而不需要复杂的遍历;当然通过Dllcall可以调用系统的API来进行执行更高级的功能;甚至有AHK高手曾言:除了不能用它来写硬件驱动,其他的功能全部都可以实现,足可显示其强大之处;
(4)可以方便的去创造效率工具。如使用AHK编写的Candy(万年书妖的作品)、QZ(Array的作品)、小仙并击(输入法)等等,可大大提升工作效率,有了AHK,可以将电脑中的快速启动软件、音量调节软件、鼠标穿透软件等一系列绿色软件统统淘汰掉了。因为其可以高效的实现这些功能。
(5)体积小。使用AHK可以一键将脚本编译为不到1M的exe可执行程序,非常方便使用。当然,还有更多的功能,限于本人的水平,无法一一列出
缺点:AHK比不上C的效率,在执行同一功能时比C的效率要低,而且其编译似乎也不是真正意义的编译。不过毫秒级别的差异根本感觉不到。此外,要作出更加美观的GUI,需要调用系统API,比较费劲,但是其重在效率和实用!

ahk在office中能做什么?

众说周知,如果在word中想要为一个功能定义快捷键,需要使用 KeyBindings.Add方法如:KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyR, wdKeyShift, wdKeyAlt), KeyCategory:=wdKeyCategoryCommand, Command:=”InsertCrossReference”可将ALt+shift+R指定为弹出交叉引用对话框的快捷键;
在Excel中,需要使用Application.onkey:
如Application.OnKey “%q”, “无格式粘贴” ,将Alt+q指定为无格式粘贴的快捷键;
那么PPT中呢?答案是NO!!!
你无法为ppt中现有的功能,或者是写的vba代码去指定快捷键,惟一能做的就是按Alt+F11,打开VBE代码窗口,找到代码,去运行,或者在2003版中,去加入一个自定义的菜单按钮,抑或是在07版以上的版本中,通过编辑XML代码来达到修改ribbonx界面增加按钮,通过按钮点击来执行自定义的功能。但是,当本人接触了AHK之后,这些就都不再是问题了。因为可以随心所欲的打造各种各样的快捷键,来一键实现所需的功能。本人接触AHK一年有余,粗略懂得些皮毛,其现将其在Office中应用的一些心得介绍下:

1.word

使用AHK的ComObjCreate(“word.application”)、ComObjActive(“word.application”)可以获取Word对象,如以下代码来实现按win键+q来无格式粘贴:

#q::ComObjActive("word.application").Selection.PasteAndFormat(2) 
说明:#----win键,!:alt键,^:Ctrl键,+:shift键

使用win+Alt+左中括号来实现减小段落间距(AHK来调用vba中的过程的示例):

#![::ComObjActive("word.application").run("缩小段落间距")

VBA 代码中的过程:

Sub 缩小段落间距()
    On Error Resume Next
    Application.ScreenUpdating = False
    With Selection.ParagraphFormat '研究下如何判断选择的单行或多行原则
            .LineUnitBefore = .LineUnitBefore - 0.1
        .LineUnitAfter = .LineUnitAfter - 0.1
    End With
    Application.ScreenUpdating = True
End Sub

其他的依次类推,不论03版还是高版本,都可以这样用AHK来调用。

2.Excel

高版本的Office有个特别不爽的功能,就是按Ctrl+o无法直接出现文件定位窗口,而是需要选择几次才出现,那么可以直接使用AHK来修改这一内部命令:

<^o::ComObjActive("excel.application").Workbooks.Open(filename:=ComObjActive("excel.application").GetOpenFilename)

可实现按左Ctrl+o来迅速调出文件选择对话框;
下面代码可实现按`+1来设置单元格为文本格式:

` & 1::ComObjActive("excel.application").ActiveCell.NumberFormatLocal:="@"

下面代码可实现按左Ctrl+[/]来增加和减小单元格字号:

<^]::
<^[::
    excel:=ComObjActive("Excel.Application")
    aa:=excel.Selection.Font.Size
    excel.Selection.Font.Size:=(aa=""?12:aa)
    excel.Selection.Font.Size+=(pkey()="["?-1:1)
return

使用AHK来直接运行VBA过程:按Ctrl+Win+E来横向合并选择的单元格;

3.PPT

获取COM对象的方法同以上两者,只是名称稍微修改下:ComObjCreate(“powerpoint.application”)、ComObjActive(“powerpoint.application”)
如按住Win+[/]来实现减小/增大行距:

#[::  ;调节行距;奇怪的问题,如果是不删除全局的<,则#]会导致#[失效,单独一个#[没有问题,即使不加<也没问题。
#]::
ComObjActive("powerpoint.Application").ActiveWindow.Selection.TextRange.ParagraphFormat.SpaceWithin+=(A_ThisHotkey="#["?-0.1:0.1)
return

调用VBA代码的例子:

如按Alt+X来为选定图像一键加入随机进入的动画:
!x::ComObjActive("powerpoint.Application").run("随机进入")

以上便是AHK在Word、Excel、PPT中的作用了,只需将ahk代码放入脚本,然后双击,便可以随意所欲的用快捷键来发动所需要的功能了。更方便的是,如果你想要修改快捷键,只需要在系统托盘右键–编辑脚本,快速修改后,重载(Reload)即可。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA捐赠
共{{data.count}}人
人已捐赠
其他应用

[游戏][守望先锋]守望先锋自秒脚本

2017-2-17 13:15:59

其他案例

[办公]input-ahk(Flapy-Autohotkey):用ahk写一个简单输入法

2017-2-20 17:08:58

9 条回复 A文章作者 M管理员
  1. 岭南飘雪

    我是来认真学习的,谢谢作者!

    • hexuren

      咋不感谢感谢我呢!

    • 清墨

      感谢老铁

  2. 墨斗

    感谢无私分享

  3. Yofa

    你好!你用comobjcreat()创建对象后,怎么知道可以采用哪些方法呢

  4. 不错,学到了!

  5. 长岛的雪。

    感谢大佬 的分享 ,学到 了! 😈

  6. 大道也

    感谢分享,学习了。

  7. 孤独求败

    感谢分享,学到了!

个人中心
购物车
优惠劵
有新私信 私信列表
搜索