Freigeben über


IAttachmentExecute-Schnittstelle (shobjidl_core.h)

Macht Methoden verfügbar, die mit Clientanwendungen zusammenarbeiten, um eine Benutzerumgebung zu präsentieren, die einen sicheren Download und Austausch von Dateien über E-Mail- und Messaginganlagen ermöglicht.

Vererbung

Die IAttachmentExecute-Schnittstelle erbt von der IUnknown-Schnittstelle . IAttachmentExecute verfügt auch über folgende Arten von Membern:

Methoden

Die IAttachmentExecute-Schnittstelle verfügt über diese Methoden.

 
IAttachmentExecute::CheckPolicy

Stellt einen booleschen Test bereit, mit dem Entscheidungen basierend auf der Ausführungsrichtlinie der Anlage getroffen werden können.
IAttachmentExecute::ClearClientState

Entfernt alle gespeicherten Zustände, die auf der GUID des Clients basieren. Ein Beispiel kann eine Einstellung sein, die auf einem Kontrollkästchen basiert, das angibt, dass eine Eingabeaufforderung für einen bestimmten Dateityp nicht erneut angezeigt werden soll.
IAttachmentExecute::Execute

Führt eine Aktion für eine Anlage aus.
IAttachmentExecute::P rompt

Stellt dem Benutzer eine Eingabeaufforderungsoberfläche bereit.
IAttachmentExecute::Save

Speichert die Anlage.
IAttachmentExecute::SaveWithUI

Stellt dem Benutzer eine erklärende Fehlerbenutzeroberfläche dar, wenn die Speicheraktion fehlschlägt.
IAttachmentExecute::SetClientGuid

Gibt die GUID für den Client an und speichert sie.
IAttachmentExecute::SetClientTitle

Gibt den Titel des Eingabeaufforderungsfensters an und speichert es.
IAttachmentExecute::SetFileName

Gibt den vorgeschlagenen Namen der Datei an und speichert diese.
IAttachmentExecute::SetLocalPath

Legt den Pfad zur Datei fest und speichert diesen.
IAttachmentExecute::SetReferrer

Legt die Sicherheitszone fest, die der Anlagedatei basierend auf der verweisenden Datei zugeordnet ist.
IAttachmentExecute::SetSource

Legt einen alternativen Pfad oder eine alternative URL für die Quelle einer Dateiübertragung fest.

Hinweise

Für diese Schnittstelle wird Folgendes vorausgesetzt:

  • Der Client verfügt über Richtlinien oder Einstellungen für die Unterstützung und das Verhalten von Anlagen.
  • Der Client interagiert mit dem Benutzer.
Die IID für diese Schnittstelle ist IID_IAttachmentExecute.

Hier sehen Sie ein Beispiel dafür, wie ein E-Mail-Client IAttachmentExecute verwenden kann.


// 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;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP mit SP2 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile shobjidl_core.h