有没有办法在Excel VSTO中使用C#和无VBA捕获HotKeys / Shortcuts?
所以我想在我们的Docuement级别的Excel VSTO插件中捕获一些关键命令。 我似乎无法find办法去做,除了使用VBA和我们的插件与VBA交谈。 任何帮助/例子将不胜感激。
我正在使用Excel 2007。
你只能通过调用API来调用Excel的子类并观察键盘命令。 这是较旧的,但仍然适用。
-
一种方法涉及使用Addin-Express的第三方解决scheme。 他们的产品包括能够将键盘快捷键作为属性添加到function区菜单命令。
-
另一种方法是利用低级别的键盘钩子,通过一些被称为Windows子类的 Win32 API 。 这里是一个很好的解释如何做到这一点的代码示例。 请注意,在VSTO中获取此代码所需的唯一“额外”操作是将
SetHook()
方法移至Startup
事件,将UnhookWindowsHookEx()方法移至Shutdown事件。查看Stephen Toub在MSDN上的文章。
-
最后是Addin类的
OnAction
属性的使用。 这种方法需要使用一些VBA( 用callback方法指向底层的.net插件 ),只要你愿意在你的解决scheme中分发一些VBA( 比如xls或者doc w / vba项目,或者可能是一个本地插件 )。 请注意,您还需要标记comvisible = true
,并公开GetAutomationServiceObject
方法,以便您的VBA可以引用VBA代码中的插件。看到这里的线程…
Geoff Darst给出的技术比较