可视化 如何在 C++ 自动化中启动 ms Word 时防止运行自动宏

visual How to prevent the running of auto macros when starting ms word in c++ automation

本文关键字:运行 Word ms C++ 自动化 启动 可视化      更新时间:2023-10-16

我正在使用c ++为办公文件生成缩略图。我使用类似于以下内容的自动化打开并保存文件:https://support.microsoft.com/en-us/kb/179494。由于文件很多,这需要很多时间,程序应该整夜运行。

一切正常,除了文件包含自动启动宏时,它甚至不存在。

Sub AutoOpen()
    Application.Run ("stupidMacroWhichDoesntExist")
End Sub

在这种情况下,循环将停止,并显示一条错误消息,指出无法执行宏。

当然,我已经将信任中心的宏设置设置为 ->禁用所有宏而不通知

错误消息仍然出现

在Excel中,我可以通过以下方法防止这种情况:

objExcelApp.SetEnableEvents(false);

不幸的是,c++ 中的"应用程序"一词没有 SetEnableEvents 方法。我已经用谷歌搜索了很多,发现了很多VB代码来防止这种情况。大多数情况下是这样的:

objWord.WordBasic.DisableAutoMacros 1

但是我在c ++中没有找到任何东西

我非常感谢您的帮助。

我相信

你正在寻找:

WordApplication.AutomationSecurity = msoAutomationSecurityForceDisable

"信任中心"设置不适用于使用自动化打开的文档。此属性及其枚举对应于对象模型中的该设置。

FWIW WordBasic方法也应该可以使用C++。我不知道C++语法,但是对于C#,我需要使用PInvoke(GetType()。调用成员)直接与IDispatch通信(我认为这是正确的术语)。

我已经解决了。我正在备份单词文件夹中的实际宏(vbaData.xml和vbaProject.bin),将虚拟宏放入word文件中,通过自动化打开它并保存以生成缩略图。之后,我将备份的宏放回word文件中。由于虚拟宏不执行任何操作,因此我可以安全地执行任何操作,无论原始宏中编程什么。