我有一个VSTO应用程序作为MS Word的加载项,我想设置键盘快捷键到功能区按钮

Pet*_*ter 6 vsto ms-word

当我开发这个应用程序时(在C#Visual Studio 2008中)我问了同样的问题(实际上设法在MS论坛上找到答案,我应该得到某种奖品).MS的答案是,为您自己的方法设置键盘快捷键的唯一方法是编写一个调用该方法的宏(显然是通过COM.)并设置调用该宏的快捷方式.

这真的不是我想听到的答案.VSTO可以很好地利用功能区等构建一个非常好的应用程序,但是你必须通过COM暴露整个事物并通过宏构建另一个接口.除了浪费时间之外,它完全绕开了MS为支持VSTO加载项而构建的所有安全性.

我的问题是:这真的是必要的(整个COM /宏的东西),还是有一种方法可以为我自己的功能区项目分配键盘快捷键?Word 2007?Word 2010?

谢谢

Kir*_*iru 9

回答太晚了但值得分享.

我在项目中使用过键盘快捷键.基本上这个快捷键应该带一个名为SignOff的WPF表单.可以通过单击功能区选项卡中的按钮或使用键盘快捷键(Ctrl + Shift + S)来显示此WPF表单.

我需要编写代码的地方有四个.

  1. 单击事件时调用功能区按钮的操作方法.

    public void btnInsertSignoff_Click(IRibbonControl control) 
    {
      InsertSignoff();//This method displays the sign off form 
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 以下代码将键盘快捷键与Addin Startup/Document Change事件中的VBA代码绑定在一起

     private void ThisAddIn_Startup(object sender, System.EventArgs e)
     {
      Globals.ThisAddIn.Application.KeyBindings.Add(WdKeyCategory.wdKeyCategoryCommand,    "InsertSignOff ", Globals.ThisAddIn.Application.BuildKeyCode(WdKey.wdKeyControl,   WdKey.wdKeyShift, WdKey. wdKeyS));
     }
    
    Run Code Online (Sandbox Code Playgroud)

此链接显示如何使用键盘快捷键调用VBA代码. http://www.wordbanter.com/showthread.php?t=31813

我按照这个例子但是在VSTO Addin Startup事件中我没有使用VBA,而是第二个参数"InsertSignOff"是步骤4中的VBA方法.

  1. 写了另一个名为InsertSignOff的方法(将VSTO方法暴露给VBA之后).

    [ComVisible(true)]
    public interface IAddInAdapter 
    {
       void InsertSignOff ();
    }
    
    
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddinAdapter : IAddInAdapter
    {
       public void InsertSignOff()
       {
          InsertSignoff();//This method displays the sign off form
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)

此链接说明如何向VBA公开VSTO代码 http://msdn.microsoft.com/en-us/library/bb608604.aspx

  1. 在用户模板位置"C:\ Users \\ AppData\Roaming\Microsoft\Templates"中创建了一个.dotm文件,其中包含以下VBA代码

    Sub InsertSignOff ()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("Wordaddin.AddinAdapter")
        Set automationObject = addIn.Object
        automationObject.InsertSignOff  
    End Sub
    
    Run Code Online (Sandbox Code Playgroud)

希望这对某人有所帮助.

  • 我一直陪着你,直到你需要在每个想要使用它的用户的机器上编辑文件 - 我假设 OP 需要一个可以简单编码的通用解决方案。这个解决方案需要一个很大的警告——“需要在每个用户的机器上编辑带有 VBA 代码的文件” (2认同)