c# - 在 Word 'Save As' 对话框中拦截保存事件

标签 c# ms-word vsto

在 Word 中,我有一个打开的文档 - 我在“另存为”对话框中导航到一个目录并选择一个现有文件。当我现在单击“保存”而不是“取消”时,如果我想覆盖/合并现有文档,我会收到消息。

是否可以拦截“另存为”对话框中的“保存”事件,以便我可以更改打开文档的文件名,抑制覆盖/合并消息?非常感谢任何建议!

最佳答案

是的,拦截 Word 命令是完全可能的。在 VBA 时代,这就像创建一个与内部 Word 命令同名的宏一样简单。

在 VSTO 中,您需要将覆盖命令添加到功能区 XML,然后将回调添加到您的代码。

MSDN 中描述了整个过程: Temporarily Repurpose Commands on the Office Fluent Ribbon

示例功能区 XML(覆盖标准保存命令)

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" 
   onLoad="OnLoad" > 
   <commands> 
     <command idMso="FileSave" onAction="mySave" /> 
   </commands> 
   <ribbon startFromScratch="false"> 
     <tabs> 
       <tab id="tab1" label="Repurpose Command Demo" > 
         <group id="group1" label="Demo Group"> 
           <toggleButton id="togglebutton1"  
             imageMso="AcceptInvitation"  
             size="large"  
             label="Alter Built-ins"  
             onAction="changeRepurpose" /> 
         </group> 
       </tab> 
     </tabs> 
   </ribbon> 
</customUI>

功能区回调

public void mySave(IRibbonControl control, bool cancelDefault)
{
    MessageBox.Show("The Save button has been temporarily repurposed.");
    cancelDefault = false;
}

关于c# - 在 Word 'Save As' 对话框中拦截保存事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39159944/

相关文章:

c# - 从 C# 通过 PInvoke 调用 _msize()

c# - 用Access数据库建工程成功,可以查询数据但不能删除记录

html - 创建可粘贴到 Word 中的无边框表格

events - 在 Outlook 中捕获对 MailItem.SendUsingAccount 属性的更改

c# - 取消 Item_Open 导致崩溃

c# - 静态方法作为契约(Contract)的一部分

c# - 数学库中 Math.tanh 的倒数在哪里?

interop - 使用 Word 互操作设置自定义文档属性

api - MS Word 2000 的 ColdFusion COM 对象操作在 100 秒后终止

excel - 有人有解决方法来解决使用 Outlook 插件保存和发送的错误吗?