【问题标题】:How to get IRM encryption status of an Office document in a COM Add-in?如何在 COM 加载项中获取 Office 文档的 IRM 加密状态?
【发布时间】:2017-02-09 06:27:06
【问题描述】:

我用 C++ (ATL) 编写了一个 Office COM 插件。现在我需要在加载项中知道当前文档是 IRM(信息权限管理)加密还是未受保护。或者,获取当前应用的 IRM 模板也可以。请注意,IRM 加密与设置文档密码不同。它实际上适用于 Office 2010,但我认为在较新版本中它是相同的。如果您知道 .NET COM 插件的答案,那可能也会有所帮助。

【问题讨论】:

    标签: ms-office atl office-addins office-2010 comaddin


    【解决方案1】:

    似乎没有人知道这一点,这是我找到的答案: Microsoft Permission interface.

    简而言之:使用 Permission 接口。 Enabled 属性回答了这个问题。实际上,该链接显示了 .NET Interop 接口,但从 C++ ATL 访问它是相似的,而且更直接(因此更快):

    首先,您需要存储 OnConnection 调用中对应用程序的引用。然后你可以像这样获取所需的属性(_app.ActiveDocument.Permission.Enabled):

    CComPtr<IDispatch> pApp=_app;
    CComVariant vDoc;
    pApp.GetPropertyByName(L"ActiveDocument", &vDoc);
    CComPtr<IDispatch> pDoc=vDoc.pdispVal;
    CComVariant vPermission;
    pDoc.GetPropertyByName(L"Permission", &vPermission);
    CComPtr<IDispatch> pPermission=vPermission.pdispVal;
    CComVariant vEnabled;
    pPermission.GetPropertyByName(L"Enabled", &vEnabled);
    fEnabled=vEnabled.boolVal!=VARIANT_FALSE;
    

    为简洁起见,此处省略了错误处理。确保您处理返回代码并检查返回的类型等。

    这是用于 Word 的。 Excel 将使用 ActiveWorkbook

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多