玩转idMSO

  • 目录
  • 痛点需求
  • 技术原理
  • Excel热键定义示范
  • Outlook热键定义示范
  • 如何运行以上脚本
  • 如何定义热键
  • 其他扩展


目录

痛点需求

你有没有发现用鼠标在菜单项中寻找某个比较深的菜单项很烦,尤其是还要重复干这件事儿,是否能自己给这个深深的菜单项定义热键呢?比如下面这个功能,我想定义为Ctrl + Shift + C,这里只是举例你可以自己定义为任意想要的热键定义,只要不冲突,也可以定义成一个按键,本文最后面有AHK帮助文档,请自行学习。

[AHK]玩转idMSO为Office软件任意增加热键_热键

再比如在Outlook中我常用的一个打标记功能,我想定义为热键Win+T

[AHK]玩转idMSO为Office软件任意增加热键_热键_02

技术原理

微软的Office的Ribbon界面都支持一种叫idMso的标识,可以用来调用某个菜单项功能。具体idMso的值可以去MSDN查阅学习,这也是本文的目的,这个技术貌似网上还没谁教学推广。吐槽下 MSDN 这个资料并不好找。

还有些chm帮助文档提供idMso查阅,比如通过查阅OfficeidMsoViewer,得知上面的复制为图片的功能对应的idMso 为CopyAsPicture

[AHK]玩转idMSO为Office软件任意增加热键_热键_03


在度娘的帮助下,找到一个日本网站

Office 加载项(以前称为 Office 应用程序)和功能区的完整自定义信息列表

Office 365 图标 (imageMso) 列表

其中页面的 上部分是字面索引,下部分是图标对应的idMSO表格。截图示范如下:

[AHK]玩转idMSO为Office软件任意增加热键_热键_04


[AHK]玩转idMSO为Office软件任意增加热键_热键_05


以上是网站上F开头的部分Outlook的idMSO截图。

Excel热键定义示范

在Excel中定义热键:Ctrl + Shift + C来复制某个范围为图片

^+c::
ox:=ComObjActive("Excel.Application")
ox.Application.CommandBars.ExecuteMso("CopyAsPicture")
ObjRelease(ox)
return

Outlook热键定义示范

在Outlook中定义热键:Win + T来为某个邮件打上须今日处理的小旗子

#t::
ox:=ComObjActive("Outlook.Application")
ox.Application.ActiveWindow().CommandBars.ExecuteMso("FlagToday")
ObjRelease(ox)
return

如何运行以上脚本

  1. 下载AutoHotkey
  2. 将上面脚本写到一个扩展名为.ahk的文本文件中。
  3. 双击这个ahk文件运行即可。

如何定义热键

符号

按键

#

Win

^

Ctrl

+

Shift

Alt

其他扩展

2018年写过一篇了 [AHK]给Outlook的工具条上的功能单独设置快捷键,其中的方案二 没展开写,也可以试试。可能更通用。