字带命令拦截

Word Ribbon Command Interception

你好 Whosebugers,

我在 Word 插件 (VS 2012/.NET 4.5) 中有以下功能区 xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >

  <commands>
    <!-- Working commands -->
    <command idMso="ReviewTrackChanges"  onAction="onMsoToggleCommand"/>
    <command idMso="SmartArtInsert" onAction="onMsoCommand"/>
    <command idMso="Thesaurus" onAction="onMsoCommand"/>

    <!-- NOT Working commands -->
    <command idMso="MailMergeStartLetters" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartEmail" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartEnvelopes" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartLabels" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartDirectory" onAction="onMsoToggleCommand"/>
    <!-- NOT Working commands as well?!-->
    <command idMso="ReviewCompareTwoVersions" onAction="onMsoCommand"/>
    <command idMso="ReviewCombineRevisions" onAction="onMsoCommand"/>
  </commands>
</customUI>

对应的回调是:

public void onMsoToggleCommand(IRibbonControl control, bool pressed, ref bool cancelDefault)
{
   cancelDefault = false;
   Logger.LogEvent(control.Id);
}

并且:

public void onMsoCommand(IRibbonControl control, ref bool Cancel)
{
   Cancel = false;
   Logger.LogEvent(control.Id);
}

我想拦截这些命令来做额外的任务。对于 Word 2010 和 2013,一切都按预期工作,但是,对于 Word 2007,只有前 3 个命令似乎在工作,关于可能的原因有什么建议吗?

附上我要拦截的两组命令:



谢谢,

根据@Eugene Astafiev 的评论,我终于能够解决这个问题。事实上,最初的 XML 功能区代码是这样的(注意中间存在一些 Excel 命令):

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
  <commands>
    <!-- Working Word commands -->
    <command idMso="ReviewTrackChanges"  onAction="onMsoToggleCommand"/>
    <command idMso="SmartArtInsert" onAction="onMsoCommand"/>
    <command idMso="Thesaurus" onAction="onMsoCommand"/>

    <!-- Excel Commands -->
    <command idMso="Connections" onAction="onMsoCommand"/>
    <command idMso="Refresh" onAction="onMsoCommand"/>
    <command idMso="RefreshAll" onAction="onMsoCommand"/>

    <!-- NOT Working Word commands -->
    <command idMso="MailMergeStartLetters" onAction="onMsoToggleCommand"/>
    <command idMso="MailMergeStartEmail" onAction="onMsoToggleCommand"/>
    <!-- Remaining Word commands.. -->
  </commands>
</customUI>

因此,当 Word 2007 尝试读取此 XML 时,它会遇到 Excel 命令,并且由于它无法识别它们,所以它会忽略它们以及 XML 的其余部分,因此不会调用其余的 Word 命令!对于 Word 2010 和 2013,它运行得非常完美。
我最终将 Word 和 Excel 功能区命令分成两个 xml 文件,然后根据 Office 应用程序加载正确的文件。