有没有办法在Excel VSTO中使用C#和无VBA捕获HotKeys / Shortcuts?

所以我想在我们的Docuement级别的Excel VSTO插件中捕获一些关键命令。 我似乎无法find办法去做,除了使用VBA和我们的插件与VBA交谈。 任何帮助/例子将不胜感激。

我正在使用Excel 2007。

你只能通过调用API来调用Excel的子类并观察键盘命令。 这是较旧的,但仍然适用。

  1. 一种方法涉及使用Addin-Express的第三方解决scheme。 他们的产品包括能够将键盘快捷键作为属性添加到function区菜单命令。

  2. 另一种方法是利用低级别的键盘钩子,通过一些被称为Windows子类的 Win32 API 。 这里是一个很好的解释如何做到这一点的代码示例。 请注意,在VSTO中获取此代码所需的唯一“额外”操作是将SetHook()方法移至Startup事件,将UnhookWindowsHookEx()方法移至Shutdown事件。

    查看Stephen Toub在MSDN上的文章。

  3. 最后是Addin类的OnAction属性的使用。 这种方法需要使用一些VBA( 用callback方法指向底层的.net插件 ),只要你愿意在你的解决scheme中分发一些VBA( 比如xls或者doc w / vba项目,或者可能是一个本地插件 )。 请注意,您还需要标记comvisible = true ,并公开GetAutomationServiceObject方法,以便您的VBA可以引用VBA代码中的插件。

    看到这里的线程…

    Geoff Darst给出的技术比较