다음을 통해 공유


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을 설정합니다.

설명

이 인터페이스는 다음을 가정합니다.

  • 클라이언트에는 첨부 파일 지원 및 동작에 대한 정책 또는 설정이 있습니다.
  • 클라이언트가 사용자와 상호 작용합니다.
이 인터페이스의 IID는 IID_IAttachmentExecute.

다음은 전자 메일 클라이언트가 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