0
我用C++編寫了一個Office COM加載項(ATL)。現在,如果當前文檔是加密或不受保護的IRM(信息權限管理),我需要在加載項中知道。或者,獲取當前應用的IRM模板也會起作用。請注意,IRM加密與設置文檔密碼不同。它實際上是用於Office 2010,但我認爲它在新版本中是一樣的。如果你知道.NET COM加載項的答案,那可能也有幫助。如何在COM加載項中獲取Office文檔的IRM加密狀態?
我用C++編寫了一個Office COM加載項(ATL)。現在,如果當前文檔是加密或不受保護的IRM(信息權限管理),我需要在加載項中知道。或者,獲取當前應用的IRM模板也會起作用。請注意,IRM加密與設置文檔密碼不同。它實際上是用於Office 2010,但我認爲它在新版本中是一樣的。如果你知道.NET COM加載項的答案,那可能也有幫助。如何在COM加載項中獲取Office文檔的IRM加密狀態?
由於沒有人似乎知道這一點,這裏是我發現的答案: 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來代替。