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

时间:2016-09-30 15:56:14

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

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

1 个答案:

答案 0 :(得分:0)

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

简而言之:使用权限界面。属性已启用可以解答此问题。实际上该链接显示了.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