当从控制台应用程序打开文档时,我能否禁用Word按钮?

3

我正在使用C#编写控制台应用程序,该程序接收文档路径并在Microsoft Word 2010中打开它。

Word.Application oWordApp = new Word.Application();
        DisableSaveAsButton(oWordApp);
        oWordApp.Visible = true;

        try
        {
            Word.Document doc = oWordApp.Documents.Open(docFile);
            doc.Activate();
        } catch (System.Exception e)
        {
            Console.WriteLine("Error opening document\n"+ e.ToString() + "\n" +e.StackTrace);
        }

其中docFile是.doc文件路径。

我想打开Word,使“另存为”按钮无法使用,显示为灰色。我发现了DisableSaveAsButton方法,应该像这样:

private void DisableSaveAsButton(Word.Application oWordApp)
    {
        Object MenuBar = 40;
        Object FileMenu = 1;
        Object SaveAsButton = 5;
        var saveAsBtn = oWordApp.CommandBars[MenuBar].Controls[FileMenu].accChild[SaveAsButton] as CommandBarButton;

        saveAsBtn.Enabled = false;
    }

但是这个方法不起作用。从我所看到的,大多数人通过编辑项目中的Ribbon1.xml来找到这个解决方案,但我的程序是一个带有Word功能的控制台应用程序,而不是Word插件,并且它没有任何ribbon xml文件。因此,我想知道是否可以从控制台应用程序中禁用“另存为”按钮(老板的要求),而不是使用具有自己模板的插件?


你读过这篇微软文章了吗?它介绍了如何使这些功能无效 - 你可以添加一个弹窗,显示“此选项已禁用”或其他信息。 - BugFinder
我已经考虑过了,但在此之前,我想知道是否有可能禁用按钮本身。另外,我真的不理解你链接的那篇文章的上下文。代码片段很有意义,但我不知道该怎么做或在哪里编写它。 - Gudra
1个回答

1
你找到的代码是旧技术 - 适用于Word 2007之前版本。CommandBar对象已被Ribbon XML取代,用于禁用功能的旧命令不再起作用。这是微软有意进行的设计决策。
在新的Ribbon界面中,只有在进程中运行的代码才能影响用户界面。因此,你想做的事情是不可能的,除非还加载了VBA或VSTO插件。
如果你不希望用户能够保存他们的工作,那么“阅读器”似乎比使用全功能的Word应用程序更好,因为它首先是一个编辑器。也许更好的方法是将文档保存为PDF文件格式,然后在Acrobat Reader等软件中打开。

非常有用的信息。想法是让用户编辑和保存文档,但不允许他们保存副本。所有更改都应在打开的文档上进行,因此我想禁用“另存为”,但保留“保存”功能。 - Gudra
在这种情况下,也许你可以利用DocumentBeforeSave事件做些什么?它有一个UI参数,让你确定是否应该显示UI。我现在无法测试,但我认为你应该能够使用它来防止任何“另存为”,只有你的代码负责保存。请注意,该事件适用于整个Word应用程序,因此您还需要检查触发它的文档(也是事件的参数)。 - Cindy Meister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接