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