字带命令拦截
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 应用程序加载正确的文件。
你好 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 应用程序加载正确的文件。