Condividi tramite


Interfaccia IAttachmentExecute (shobjidl_core.h)

Espone metodi che funzionano con le applicazioni client per presentare un ambiente utente che fornisce download e scambio sicuro di file tramite allegati di posta elettronica e messaggistica.

Ereditarietà

L'interfaccia IAttachmentExecute eredita dall'interfaccia IUnknown . IAttachmentExecute include anche questi tipi di membri:

Metodi

L'interfaccia IAttachmentExecute include questi metodi.

 
IAttachmentExecute::CheckPolicy

Fornisce un test booleano che può essere usato per prendere decisioni in base ai criteri di esecuzione dell'allegato.
IAttachmentExecute::ClearClientState

Rimuove qualsiasi stato archiviato basato sul GUID del client. Un esempio può essere un'impostazione basata su una casella di controllo che indica che non deve essere nuovamente visualizzata una richiesta per un tipo di file specifico.
IAttachmentExecute::Execute

Esegue un'azione su un allegato.
IAttachmentExecute::P rompt

Presenta un'interfaccia utente di richiesta all'utente.
IAttachmentExecute::Save

Salva l'allegato.
IAttachmentExecute::SaveWithUI

Presenta all'utente un'interfaccia utente di errore esplicativa se l'azione di salvataggio ha esito negativo.
IAttachmentExecute::SetClientGuid

Specifica e archivia il GUID per il client.
IAttachmentExecute::SetClientTitle

Specifica e archivia il titolo della finestra di richiesta.
IAttachmentExecute::SetFileName

Specifica e archivia il nome proposto del file.
IAttachmentExecute::SetLocalPath

Imposta e archivia il percorso del file.
IAttachmentExecute::SetReferrer

Imposta la zona di sicurezza associata al file allegato in base al file di riferimento.
IAttachmentExecute::SetSource

Imposta un percorso o un URL alternativo per l'origine di un trasferimento di file.

Commenti

Questa interfaccia presuppone quanto segue:

  • Il client dispone di criteri o impostazioni per il supporto e il comportamento degli allegati.
  • Il client interagisce con l'utente.
L'IID per questa interfaccia è IID_IAttachmentExecute.

Ecco un esempio di come un client di posta elettronica può usare 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;
}

Requisiti

   
Client minimo supportato Windows XP con SP2 [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione shobjidl_core.h