IAttachmentExecute 接口 (shobjidl_core.h)
公开使用客户端应用程序提供用户环境的方法,该环境通过电子邮件和消息附件提供文件的安全下载和交换。
继承
IAttachmentExecute 接口继承自 IUnknown 接口。 IAttachmentExecute 还具有以下类型的成员:
方法
IAttachmentExecute 接口包含以下方法。
IAttachmentExecute::CheckPolicy 提供布尔测试,可用于根据附件的执行策略做出决策。 |
IAttachmentExecute::ClearClientState 删除基于客户端 GUID 的任何存储状态。 例如,基于复选框的设置可能指示不应再次显示特定文件类型的提示。 |
IAttachmentExecute::Execute 对附件执行操作。 |
IAttachmentExecute::P rompt 向用户显示提示 UI。 |
IAttachmentExecute::Save 保存附件。 |
IAttachmentExecute::SaveWithUI 如果保存操作失败,则向用户显示解释性错误 UI。 |
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 SP2 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | shobjidl_core.h |