Интерфейс IAttachmentExecute (shobjidl_core.h)
Предоставляет методы, работающие с клиентскими приложениями, для предоставления пользовательской среды, обеспечивающей безопасное скачивание и обмен файлами через электронную почту и вложения сообщений.
Наследование
Интерфейс IAttachmentExecute наследуется от интерфейса IUnknown . IAttachmentExecute также имеет следующие типы элементов:
Методы
Интерфейс IAttachmentExecute содержит следующие методы.
IAttachmentExecute::CheckPolicy Предоставляет логический тест, который можно использовать для принятия решений на основе политики выполнения вложения. |
IAttachmentExecute::ClearClientState Удаляет все сохраненные состояния, основанные на идентификаторе GUID клиента. Примером может быть параметр, основанный на флажок, который указывает, что запрос не должен отображаться повторно для определенного типа файла. |
IAttachmentExecute::Execute Выполняет действие для вложения. |
IAttachmentExecute::P rompt Представляет пользователю пользовательский интерфейс запроса. |
IAttachmentExecute::Save Сохраняет вложение. |
IAttachmentExecute::SaveWithUI Предоставляет пользователю пояснительную ошибку в пользовательском интерфейсе, если действие сохранения завершается сбоем. |
IAttachmentExecute::SetClientGuid Указывает и сохраняет GUID для клиента. |
IAttachmentExecute::SetClientTitle Задает и сохраняет заголовок окна запроса. |
IAttachmentExecute::SetFileName Указывает и сохраняет предлагаемое имя файла. |
IAttachmentExecute::SetLocalPath Задает и сохраняет путь к файлу. |
IAttachmentExecute::SetReferrer Задает зону безопасности, связанную с файлом вложения, на основе ссылающегося файла. |
IAttachmentExecute::SetSource Задает альтернативный путь или URL-адрес для источника передачи файла. |
Комментарии
Этот интерфейс предполагает следующее:
- У клиента есть политики или параметры для поддержки и поведения вложений.
- Клиент взаимодействует с пользователем.
Ниже приведен пример того, как почтовый клиент может использовать IAttachmentExecute.
// CClientAttachmentInfo, defined by the client, implements all the
// necessary client functionality concerning attachments.
class CClientAttachmentInfo;
// Creates an instance of IAttachmentExecute
HRESULT CreateAttachmentServices(IAttachmentExecute **ppae)
{
// Assume that CoInitialize has already been called for this thread.
HRESULT hr = CoCreateInstance(CLSID_AttachmentServices,
NULL,
CLSCTX_INPROC_SERVER,
IID_IAttachmentExecute,
(void**)&pAttachExec);
if (SUCCEEDED(hr))
{
// Set the client's GUID.
// UUID_ClientID should be created using uuidgen.exe and
// defined internally.
(*ppae)->SetClientGuid(UUID_ClientID);
// You also could call SetClientTitle at this point, but it is
// not required.
}
return hr;
}
BOOL IsAttachmentBlocked(CClientAttachmentInfo *pinfo)
{
// Assume that a client function has copied the file from the mail store
// into a temporary file.
PWSTR pszFileName;
// GetFileName is a method in this class for which we do not provide
// an implementation here.
HRESULT hr = pinfo->GetFileName(&pszFileName);
if (SUCCEEDED(hr))
{
IAttachmentExecute *pExecute;
hr = CreateAttachmentServices(&pExecute);
if (SUCCEEDED(hr))
{
hr = pExecute->SetFileName(pszFileName);
// Do not call SetLocalPath since we do not have the local path yet.
// Do not call SetSource since email sources are not verifiable.
// Do not call SetReferrer since we do not have a better zone
// than the default (Restricted sites).
// Check for a policy regarding the file.
if (SUCCEEDED(hr))
{
hr = pExecute->CheckPolicy();
}
pExecute->Release();
}
LocalFree(pszFileName);
}
return FAILED(hr);
}
HRESULT OnDoubleClickAttachment(HWND hwnd, CClientAttachmentInfo *pinfo)
{
// Assume that a client function has copied the file from the mail store
// into a temporary file.
PWSTR pszTempFile;
// CopyToTempFile is a method in this class for which we do not provide
// an implementation here.
HRESULT hr = pinfo->CopyToTempFile(&pszTempFile);
if (SUCCEEDED(hr))
{
IAttachmentExecute *pExecute;
hr = CreateAttachmentServices(&pExecute);
if (SUCCEEDED(hr))
{
hr = pExecute->SetLocalPath(pszTempFile);
// Do not call SetFileName since we already have the local path.
// Do not call SetSource since email sources are not verifiable.
// Do not call SetReferrer since we do not have a better zone
// than the default (Restricted sites).
if (SUCCEEDED(hr))
{
hr = pExecute->Execute(hwnd, NULL, NULL);
}
pExecute->Release();
}
LocalFree(pszTempFile);
}
return hr;
}
HRESULT OnSaveAttachment(HWND hwnd, CClientAttachmentInfo *pinfo)
{
// Assume that a client function has copied the file from the mail store
// into a location selected by the user.
PWSTR pszUserFile;
// CopyToUserFile is a method in this class for which we do not provide
// an implementation here.
HRESULT hr = pinfo->CopyToUserFile(hwnd, &pszUserFile);
if (SUCCEEDED(hr))
{
IAttachmentExecute *pExecute;
hr = CreateAttachmentServices(&pExecute);
if (SUCCEEDED(hr))
{
hr = pExecute->SetLocalPath(pszTempFile);
// Do not call SetFileName since we have the local path.
// Do not call SetSource since email sources are not verifiable.
// Do not call SetReferrer since we do not have a better zone
// than the default (Restricted sites).
if (SUCCEEDED(hr))
{
hr = pExecute->Save();
}
pExecute->Release();
}
LocalFree(pszUserFile);
}
return hr;
}
Требования
Минимальная версия клиента | Windows XP с пакетом обновления 2 (SP2) [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | shobjidl_core.h |