Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms word 我有一个VSTO应用程序作为MS Word的外接程序,我想设置功能区按钮的键盘快捷键_Ms Word_Vsto - Fatal编程技术网

Ms word 我有一个VSTO应用程序作为MS Word的外接程序,我想设置功能区按钮的键盘快捷键

Ms word 我有一个VSTO应用程序作为MS Word的外接程序,我想设置功能区按钮的键盘快捷键,ms-word,vsto,Ms Word,Vsto,当我开发这个应用程序时(在C#Visual Studio 2008中),我问了同样的问题(实际上我在微软论坛上找到了答案,为此我应该获得某种奖励)。MS给出的答案是,为自己的方法设置键盘快捷键的唯一方法是编写一个调用该方法的宏(显然是通过COM),并将快捷键设置为调用该宏 这真的不是我想听的答案。VSTO使构建一个非常好的应用程序成为可能,并能很好地利用ribbon等,但随后您不得不麻烦地通过COM公开整个应用程序,并通过宏在其中构建另一个接口。这除了浪费时间外,还完全绕过了MS在支持VSTO插

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

这真的不是我想听的答案。VSTO使构建一个非常好的应用程序成为可能,并能很好地利用ribbon等,但随后您不得不麻烦地通过COM公开整个应用程序,并通过宏在其中构建另一个接口。这除了浪费时间外,还完全绕过了MS在支持VSTO插件时内置的所有安全性

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


谢谢

现在回答太晚了,但值得分享

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

我需要在四个地方编写代码

  • 功能区按钮的操作方法称为单击事件

    public void btnInsertSignoff_Click(IRibbonControl control) 
    {
      InsertSignoff();//This method displays the sign off form 
    }
    
  • 以下代码在加载项启动/文档更改事件中将键盘快捷方式与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));
     }
    
  • 此链接显示如何使用键盘快捷键调用VBA代码。

    我遵循了这个示例,但在VSTO Addin Startup事件中没有使用VBA,而是使用了第二个参数“InsertSignOff”,这是步骤4中的VBA方法

  • 编写了另一个名为InsertSignOff的方法(在将VSTO方法公开给VBA之后)

  • 此链接说明如何向VBA公开VSTO代码

  • 在用户模板位置“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
    

  • 希望这对某些人有所帮助。

    您可以使用这里提到的全局键连接方法:

    您可以尝试全局键连接-并使用Excel应用程序的句柄(ThisAddIn.ExcelApplication.Hwnd)。谢谢,Mikael,我会尝试的。我仍然会有点失望,在Word 2007/2010用户界面中没有简单的方法可以让任何用户设置自己的捷径——也许他们不会喜欢我选择的捷径。我尝试了上述解决方案,但它设置了一个全局键(它就是这么说的),即使Word没有焦点,它也会触发“我的功能区按钮”事件,因此有点干扰性。如果您已将其全局挂接,只需测试以确保上下文(活动应用程序、活动窗口,而不是页眉/页脚中的)正确无误。听起来,如果你有一个全球钩子那么远,你就有90%在那里了。谢谢,drventure,当我拿起应用程序的那一部分时,我会尝试一下。再一次。目前,Word 2007/2010 Alt-key plus快速访问工具栏工作得非常好。我一直支持您,直到您需要编辑每个想要使用此工具的用户的计算机上的文件为止。我假设OP需要一个可以简单编码的通用解决方案。这个解决方案需要一个大的警告——“需要在每个用户的机器上编辑包含VBA代码的文件”,考虑到默认情况下office会阻止宏,这似乎不是最好的方案。
    Sub InsertSignOff ()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("Wordaddin.AddinAdapter")
        Set automationObject = addIn.Object
        automationObject.InsertSignOff  
    End Sub