#ms-office #atl #office-addins #office-2010 #comaddin
#ms-office #atl #office-дополнения #office-2010 #comaddin
Вопрос:
Я написал надстройку Office COM на C (ATL). Теперь мне нужно узнать в надстройке, зашифрован ли текущий документ IRM (управление правами на информацию) или незащищен. В качестве альтернативы, также будет работать получение применяемого в данный момент шаблона IRM. Пожалуйста, обратите внимание, что шифрование IRM — это не то же самое, что установка пароля документа. На самом деле это для Office 2010, но я бы предположил, что это то же самое в более новых версиях. Если вы знаете ответ для надстроек .NET COM, это также может помочь.
Ответ №1:
Поскольку никто, похоже, этого не знает, вот ответ, который я нашел: интерфейс разрешений Microsoft.
Короче говоря: используйте интерфейс разрешений. Свойство Enabled отвечает на этот вопрос. На самом деле ссылка показывает .Интерфейс сетевого взаимодействия, но доступ к нему из C ATL аналогичен и намного более прямой (следовательно, быстрее):
Сначала вам нужно сохранить ссылку на приложение из вызова OnConnection. Затем вы можете получить требуемое свойство следующим образом (_app.ActiveDocument.Разрешение.Включено):
CComPtr<IDispatch> pApp=_app;
CComVariant vDoc;
pApp.GetPropertyByName(L"ActiveDocument", amp;vDoc);
CComPtr<IDispatch> pDoc=vDoc.pdispVal;
CComVariant vPermission;
pDoc.GetPropertyByName(L"Permission", amp;vPermission);
CComPtr<IDispatch> pPermission=vPermission.pdispVal;
CComVariant vEnabled;
pPermission.GetPropertyByName(L"Enabled", amp;vEnabled);
fEnabled=vEnabled.boolVal!=VARIANT_FALSE;
Обработка ошибок была опущена здесь для краткости. Убедитесь, что вы обрабатываете коды возврата и проверяете возвращаемые типы и т. Д.
Это было для Word. Вместо этого Excel будет использовать ActiveWorkbook.