Interface IAttachmentExecute (shobjidl_core.h)

Expose des méthodes qui fonctionnent avec les applications clientes pour présenter un environnement utilisateur qui fournit un téléchargement et un échange sécurisés de fichiers par le biais de pièces jointes de courrier électronique et de messagerie.

Héritage

L’interface IAttachmentExecute hérite de l’interface IUnknown. IAttachmentExecute a également les types de membres suivants :

Méthodes

L’interface IAttachmentExecute utilise ces méthodes.

 
IAttachmentExecute::CheckPolicy

Fournit un test booléen qui peut être utilisé pour prendre des décisions en fonction de la stratégie d’exécution de la pièce jointe.
IAttachmentExecute::ClearClientState

Supprime tout état stocké basé sur le GUID du client. Par exemple, un paramètre basé sur une case à cocher indiquant qu’une invite ne doit plus s’afficher pour un type de fichier particulier.
IAttachmentExecute::Execute

Exécute une action sur une pièce jointe.
IAttachmentExecute::P rompt

Présente une interface utilisateur d’invite à l’utilisateur.
IAttachmentExecute::Save

Enregistre la pièce jointe.
IAttachmentExecute::SaveWithUI

Présente à l’utilisateur une interface utilisateur d’erreur explicite si l’action d’enregistrement échoue.
IAttachmentExecute::SetClientGuid

Spécifie et stocke le GUID du client.
IAttachmentExecute::SetClientTitle

Spécifie et stocke le titre de la fenêtre d’invite.
IAttachmentExecute::SetFileName

Spécifie et stocke le nom proposé du fichier.
IAttachmentExecute::SetLocalPath

Définit et stocke le chemin d’accès au fichier.
IAttachmentExecute::SetReferrer

Définit la zone de sécurité associée au fichier joint en fonction du fichier de référence.
IAttachmentExecute::SetSource

Définit un autre chemin d’accès ou une URL pour la source d’un transfert de fichiers.

Remarques

Cette interface suppose ce qui suit :

  • Le client dispose de stratégies ou de paramètres pour la prise en charge et le comportement des pièces jointes.
  • Le client interagit avec l’utilisateur.
L’IID de cette interface est IID_IAttachmentExecute.

Voici un exemple de la façon dont un client de messagerie peut utiliser 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;
}

Configuration requise

   
Client minimal pris en charge Windows XP avec SP2 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête shobjidl_core.h