如何在 COM 加载项中获取 Office 文档的 IRM 加密状态?

How to get IRM encryption status of an Office document in a COM Add-in?

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

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

简而言之:使用权限接口。 属性 Enabled 回答了这个问题。实际上 link 显示了 .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;

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

这是针对 Word 的。 Excel 将使用 ActiveWorkbook