2016-09-30 99 views
0

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

回答

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来代替。

相关问题