Creazione di gestori di colonne

[Questa funzionalità è supportata solo in Windows XP o versioni precedenti. ]

La visualizzazione Dettagli in Esplora risorse di Windows visualizza in genere diverse colonne standard. Ogni colonna elenca le informazioni, ad esempio le dimensioni o il tipo di file, per ogni file nella cartella corrente. Implementando e registrando un gestore di colonne, è possibile rendere disponibili colonne personalizzate per la visualizzazione.

Le procedure generali per l'implementazione e la registrazione di un gestore di estensioni shell sono descritte in Creazione di gestori di estensioni della shell. Questo documento è incentrato sugli aspetti dell'implementazione specifici dei gestori di colonne.

Gli argomenti seguenti sono illustrati.

Funzionamento dei gestori di colonne

La figura seguente mostra Esplora risorse nella visualizzazione Dettagli.

screenshot di Esplora risorse nella visualizzazione dettagli

Con Windows 2000, la cartella può supportare anche una serie di colonne che, per impostazione predefinita, non vengono visualizzate. L'utente può visualizzare colonne aggiuntive facendo clic con il pulsante destro del mouse su una delle intestazioni di colonna e selezionando il comando Altro dal menu. Viene visualizzata una finestra di dialogo che elenca le colonne disponibili per la cartella e consente all'utente di selezionare le colonne da visualizzare. La figura seguente mostra questa finestra di dialogo per l'esempio precedente.

screenshot di Esplora finestre con la finestra di dialogo Scegli dettagli visualizzata

Creando un gestore di colonne, è possibile creare colonne personalizzate e aggiungerle a tale elenco. Ad esempio, una raccolta di file che contengono musica può usare un gestore di colonne per visualizzare colonne che elencano l'artista e il pezzo contenuti in ogni file.

Un gestore di colonne è un oggetto globale che viene chiamato ogni volta che Esplora risorse visualizza la visualizzazione Dettagli. Tuttavia, i gestori di colonna vengono in genere usati per visualizzare colonne personalizzate solo per i membri di un determinato tipo di file. Prima di visualizzare la visualizzazione Dettagli, Esplora risorse esegue una query su tutti i gestori di colonna registrati per le relative caratteristiche di colonna. Se l'utente ha selezionato una delle colonne del gestore, Esplora risorse esegue una query sul gestore per i dati associati. Quando un gestore di colonne riceve una richiesta di dati, lo fornisce se il file è un membro del tipo supportato. In caso contrario, ignora la richiesta restituendo S_FALSE.

Registrazione dei gestori di colonna

I gestori di colonna vengono registrati nella sottochiave seguente.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers

Creare una sottochiave di ColumnHandlers denominata con il formato stringa del GUID (CLSID) dell'identificatore di classe del gestore. Per informazioni generali su come registrare i gestori di estensioni della shell, vedere Creazione di gestori di estensioni della shell. Nell'esempio seguente viene illustrato come registrare un gestore di colonne.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers
            {My Column Handler CLSID GUID}

Implementazione dei gestori di colonne

Come tutti i gestori di estensione shell, i gestori di colonna sono oggetti COM (Component Object Model) in-process implementati come DLL. Esportano l'interfaccia IColumnProvider oltre a IUnknown.

Esplora risorse chiama i tre metodi esportati da IColumnProvider per richiedere le informazioni necessarie per visualizzare la colonna. La procedura usata da Esplora risorse è:

  1. Chiamare IColumnProvider::Initialize per specificare la cartella che sta per essere visualizzata.
  2. Chiamare IColumnProvider::GetColumnInfo per recuperare l'identificatore e le caratteristiche della colonna.
  3. Se la colonna è stata selezionata dall'utente, chiamare IColumnProvider::GetItemData per ogni file nella cartella per recuperare i dati appartenenti alla voce di colonna del file.

Metodo Initialize

Esplora risorse chiama IColumnProvider::Initialize per inizializzare il gestore di colonne. Il metodo ha tre parametri, ma attualmente viene usato solo wszFolder . È impostato sulla cartella la cui visualizzazione Dettagli sta per essere visualizzata. Archiviare il nome della cartella per usarlo in un secondo momento e inizializzare l'oggetto gestore in base alle esigenze.

Metodo GetColumnInfo

Esplora risorse chiama quindi IColumnProvider::GetColumnInfo per richiedere l'identificatore e le caratteristiche della colonna. Passa un indice per la colonna nel parametro dwIndex . Questo indice è un valore arbitrario utilizzato per enumerare le colonne. Esplora risorse passa anche un puntatore a una struttura SHCOLUMNINFO . Questa struttura viene utilizzata per restituire l'identificatore e le caratteristiche della colonna. IColumnProvider::GetColumnInfo deve assegnare valori appropriati ai membri della struttura e restituire.

Le colonne vengono identificate dall'ID del set di proprietà OLE (FMTID) e da un ID proprietà (PID) associato. Il primo membro della struttura SHCOLUMNINFO , scid, è un puntatore a una struttura SHCOLUMNID utilizzata per identificare la colonna. Il membro fmtid contiene l'FMTID della colonna e il relativo membro pid contiene il PID della colonna. Ad esempio, una coppia FMTID/PID standard usata comunemente per identificare le colonne è il PID autore del set di proprietà Informazioni di riepilogo.

Se possibile, il gestore deve usare FMTID e PID esistenti per identificare la colonna supportata. Se si usa una struttura SHCOLUMNID personalizzata, la colonna visualizzerà i dati solo per i file supportati dal gestore. Se la cartella contiene altri file, le relative voci saranno vuote. Se una cartella contiene file di più tipi di file, l'uso di valori FMTID/PID standard potrebbe consentire di unire dati di tipi diversi nella stessa colonna.

Impostare il membro vt sul tipo VARIANT dei dati da visualizzare nella colonna. Il tipo più comunemente usato è VT_LPSTR, perché la maggior parte delle colonne visualizza i dati come stringhe di caratteri. I membri rimanenti della struttura SHCOLUMNINFO vengono usati per definire le caratteristiche della colonna. Assegnare i valori in base alle esigenze.

Metodo GetItemData

Se la colonna del gestore di colonna è stata selezionata, Esplora risorse chiama IColumnProvider::GetItemData per ogni file nella cartella da visualizzare. Il parametro pscid è un puntatore a una struttura SHCOLUMNID che identifica la colonna. Il parametro pscd punta a una struttura SHCOLUMNDATA che identifica il file specifico.

Il parametro pvarData restituisce i dati che devono essere visualizzati nella colonna del gestore per il file specificato da pscd. Se il file è supportato dal gestore di colonne, assegnarne il valore di dati a pvarData e restituire S_OK. Se il file non è supportato dal gestore di colonne, restituire S_FALSE senza assegnare un valore a pvarData.

Molte cartelle conterranno un numero di file che non sono supportati da alcun gestore di colonne specifico. Per migliorare l'efficienza, IColumnProvider::GetItemData deve prima controllare il membro pwszExt della struttura a cui punta pscd. Questo membro contiene l'estensione del nome file. Se l'estensione indica che il file non è membro di un tipo di file supportato dal gestore, evitare l'elaborazione non necessaria restituendo immediatamente S_FALSE.