Condividi tramite


Aggiunta di icone, anteprime e menu di scelta rapida

Per assicurarsi che i dati vengano indicizzati e presentati correttamente all'utente durante le ricerche, è necessario implementare gli archivi dati Shell (noti anche come estensioni di spazio dei nomi della Shell ) e i gestori dei tipi di file (noti anche come estensioni Shell, gestori delle estensioni, o gestori di estensione Shell).

In questo argomento vengono descritte le interfacce seguenti:

Implementazione dei gestori dei tipi di file

Queste estensioni shell o gestori dei tipi di file forniscono agli utenti le esperienze shell seguenti:

  • La visualizzazione risultati visualizza un'icona specifica per il tipo di elemento.
  • La visualizzazione risultati visualizza un'anteprima dell'elemento quando l'utente seleziona l'elemento.
  • Gli utenti possono fare doppio clic su elementi per avviare eventi come l'apertura del file.
  • È possibile fare clic con il tasto destro del mouse sugli elementi per accedere a un menu contestuale.
  • Gli utenti possono trascinare gli elementi.

Analogamente a tutti gli oggetti COM (Component Object Model), i gestori dei tipi di file devono implementare un'interfaccia IUnknown e una class factory.

In Windows XP o versioni precedenti, anche i gestori devono implementare:

In Windows Vista interfaccia IPersistFile e interfaccia IShellExtInit sono state sostituite dalle tre interfacce seguenti per shell per inizializzare il gestore:

Per offrire un'esperienza utente ragionevole, è necessario fornire un archivio dati shell con il gestore del protocollo. Tale archivio dati funge quindi da "factory" per i gestori icona, i gestori di menu di scelta rapida, i gestori di anteprima e così via. Le implementazioni minime di interfaccia IPersist e IPersistFolder Interface sono richieste da interfaccia IShellFoldere per l'interfaccia IShellFolder è necessaria un'implementazione minima dell'interfaccia IShellFolder per IContextMenu e IExtractIcon.

Nota

Lo stesso identificatore di classe (CLSID) deve essere implementato per IPersist, IPersistFolder e IShellFolder.

 

Per altre informazioni sulla creazione di un archivio dati shell per supportare un gestore di protocolli, vedere Implementazione delle interfacce oggetto cartella di base.

IPersist

L'interfaccia IPersist definisce il singolo metodo GetClassID, progettato per fornire il CLSID di un oggetto che può essere archiviato in modo permanente nel sistema.

Metodo Descrizione
GetClassID Restituisce il CLSID dell'oggetto archivio dati shell

 

IPersistFolder

L'interfaccia IPersistFolder viene usata per inizializzare gli oggetti cartella shell. L'implementazione di questa interfaccia, derivata da IPersist, è il modo in cui viene indicata la posizione della cartella nello spazio dei nomi Shell. Questa interfaccia non viene usata direttamente. Viene utilizzato dall'implementazione del file system quando il metodo IShellFolder::BindToObject inizializza un oggetto cartella di Shell.

Metodo Descrizione
Inizializzare Indica a un oggetto cartella shell di inizializzarsi in base alle informazioni passate e restituisce S_OK

 

IShellFolder

L'interfaccia IShellFolder viene usata per gestire le cartelle ed è necessaria un'implementazione parziale in modo che l'icona e le interfacce di contesto implementate per un gestore di protocolli si comportino correttamente nell'interfaccia utente dei risultati di Windows Search. La maggior parte delle funzionalità necessarie viene esposta tramite il metodo GetUIObjectOf. Questo metodo consente a un componente aggiuntivo di effettuare interrogazioni sulle interfacce IExtractIcon e IContextMenu.

L'interfaccia IShellFolder usa PIDL anziché gli URL. A differenza dei requisiti di un archivio dati shell completo, i componenti aggiuntivi possono usare una semplice struttura IDL che contiene solo l'URL.

È necessario implementare i metodi seguenti di interfaccia IShellFolder. Cinque di questi metodi richiedono un'implementazione minima.

Metodo Descrizione
BindToObject Restituisce E_NOTIMPL
BindToStorage Restituisce E_NOTIMPL
CreateViewObject Restituisce E_NOTIMPL
SetNameOf Restituisce E_NOTIMPL
ParseDisplayName Converte un URL nella struttura PIDL
ConfrontaID Confronta due valori PIDL
GetDisplayNameOf Restituisce l'URL per un PIDL
GetUIObjectOf Questo metodo è simile al metodo IUnknown::QueryInterface. Se viene richiesta un'icona, il chiamante richiede il IID_IExtractIcon; se viene richiesto un menu di scelta rapida, il chiamante richiede il IID_IContextMenu

 

IShellFolder non viene usato per enumerare le cartelle. Ciò significa che il nome visualizzato di una cartella sarà l'URL fisico. Questo potrebbe cambiare in futuro.

IContextMenu

Quando Windows Search visualizza i risultati all'utente, l'utente può fare clic con il pulsante destro del mouse su un elemento e visualizzare un menu di scelta rapida definito dall'interfaccia IContextMenu. I menu di scelta rapida sono noti anche come menu contestuali.

L'azione predefinita nel menu di scelta rapida è la stessa azione eseguita quando si fa doppio clic sull'elemento. Senza l'IShellFolder corrispondente o l'interfaccia IContextMenu per l'elemento, il comportamento predefinito per un evento di doppio clic consiste nel passare l'URL come argomento alla funzione ShellExecute.

Consultare per ulteriori informazioni sulla creazione di gestori di menu contestuali e esempio: Estensioni della shell per i gestori di protocollo per il codice di esempio.

IExtractIcon

IExtractIcon recupera un'icona per l'interfaccia utente di Windows Search in base all'URL nel PIDL fornito dal gestore del protocollo.

Per ulteriori informazioni sulla creazione di gestori di icone, vedere Creazione di gestori di icone. Per un codice di esempio, vedere Estensioni shell per gestori di protocollo.

IPreviewHandler

Il IPreviewHandler genera un'anteprima dettagliata di un elemento selezionato in Esplora file. Le anteprime sono disponibili in Windows Search 4.0 o in Windows Vista con Windows Desktop Search 3.x.

Per creare un gestore di anteprima personalizzato:

  1. Implementare un IPreviewHandler che accetta un IStream, seguendo le linee guida fornite in Gestori di anteprima.

  2. Registra il gestore di anteprima:

    HKEY_CLASSES_ROOT\<Your_Object_Type>
    
    HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx
    
    HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}
       @ = {<Your_PreviewHandler_GUID>}
    
  3. Completare i due passaggi seguenti per implementare una cartella shell per l'URL:

    1. Nel metodo IShellFolder::GetUIObjectOf, si deve gestire IQueryAssociations e restituire l'associazione per i tuoi elementi della Shell, come mostrato nell'esempio di codice seguente.

      CComPtr<IQueryAssociations> spqa;
      AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa);
      spqa->Init(0, L"Your_Object_Type", NULL, NULL);
      spqa->QueryInterface(riid, ppvReturn);
      
    2. Dopo che la Shell interroga la cartella Shell per ottenere il flusso di dati per inizializzare il gestore di anteprima, vai al metodo IShellFolder::BindToObject, gestisci IID_IStream e restituisci un IStream alla tua URL.

Per riutilizzare un gestore di anteprima esistente per il tipo di file, seguire questa procedura:

  1. Registrare il gestore di anteprima per il tipo di file utilizzando il CLSID del gestore di anteprima esistente invece di <Your_PreviewHandler_GUID>.
  2. Implementare una cartella shell.

Per altre informazioni sulla creazione di gestori di anteprima, vedere IPreviewHandler e gestori di anteprima.

Risorse aggiuntive

concettuale

Sviluppo di gestori di protocolli

Comprendere i gestori di protocollo

Notifica dell'Indice delle Modifiche

esempio di codice : estensioni della shell per i gestori di protocollo

l'installazione e la registrazione dei gestori di protocollo

Creazione di un connettore di ricerca per un gestore di protocolli

Gestori del Protocollo di Debugging