Registrazione dei gestori dell'estensione shell

È necessario registrare un oggetto gestore estensioni shell prima che shell possa usarlo. Questo argomento illustra in generale come registrare un gestore di estensioni shell.

Ogni volta che si crea o si modifica un gestore di estensioni shell, è importante notificare al sistema che è stata apportata una modifica. A tale scopo, chiamare SHChangeNotify, specificando l'evento SHCNE_ASSOCCHANGED . Se non si chiama SHChangeNotify, la modifica potrebbe non essere riconosciuta fino al riavvio del sistema.

Esistono alcuni fattori aggiuntivi che si applicano ai sistemi Windows 2000. Per informazioni dettagliate, vedere la sezione Registrazione dei gestori dell'estensione shell in Windows 2000 Systems.

Come per tutti gli oggetti COM (Component Object Model), è necessario creare un GUID per il gestore usando uno strumento come Guidgen.exe, fornito con Windows Software Development Kit (SDK). Creare una sottochiave in HKEY_CLASSES_ROOT\CLSID il cui nome è il formato stringa di tale GUID. Poiché i gestori di estensione della shell sono server in-process, è necessario creare anche una sottochiave InprocServer32 in tale sottochiave GUID con il valore (predefinito) impostato sul percorso della DLL del gestore. Usa il modello apartment. Di seguito è riportato un esempio:

HKEY_CLASSES_ROOT
   CLSID
      {00021500-0000-0000-C000-000000000046}
         InprocServer32
            (Default) = %windir%\System32\Example.dll
            ThreadingModel = Apartment

Importante

ThreadingModel deve essere Apartment per i gestori dell'estensione della shell. Le visualizzazioni delle cartelle della Shell e Explorer vengono eseguiti su un thread STA (single-threaded apartment). L'uso dei modelli di threading Free o Both può causare errori intermittenti, deadlock o arresti anomali difficili da diagnosticare.

Per le app desktop in pacchetto (MSIX), preferire la registrazione basata su manifesto usando l'elemento desktop4:Extension anziché scrivere direttamente le chiavi del Registro di sistema. In questo modo si garantisce l'identità del pacchetto corretta e la disinstallazione pulita.

Ogni volta che shell esegue un'azione che può coinvolgere un gestore di estensioni shell, controlla la sottochiave del Registro di sistema appropriata. La sottochiave in cui viene registrato un gestore dell'estensione determina quando verrà richiamato. Ad esempio, è pratica comune avere un gestore di menu di scelta rapida chiamato quando shell visualizza un menu di scelta rapida per un membro di un tipo di file. In questo caso, il gestore deve essere registrato nella sottochiave ProgID del tipo di file.

In questo argomento vengono illustrati gli argomenti seguenti:

Nomi dei gestori

Per abilitare un gestore dell'estensione shell, creare una sottochiave con il nome della sottochiave del gestore (vedere di seguito) nella sottochiave ShellEx di ProgID (per i tipi di file) o il nome del tipo di oggetto Shell (per predefined_shell_objects).

Ad esempio, se si vuole registrare un gestore dell'estensione del menu di scelta rapida per MyProgram.1, iniziare creando la sottochiave seguente:

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

Per i seguenti gestori, creare una sottochiave all'interno della sottochiave "Handler Subkey name", denominata con la versione in forma di stringa dell'identificatore di classe (CLSID) dell'estensione Shell. È possibile registrare più estensioni con il nome della sottochiave del gestore creando più sottochiavi.

Gestore Interface Nome della sottochiave del gestore
Gestore del provider di colonne IColumnProvider ColumnHandlers
Gestore del menu di scelta rapida IContextMenu ContextMenuHandlers
Gestore dell'aggancio di copia ICopyHook CopyHookHandlers
Gestore trascinamento della selezione IContextMenu DragDropHandlers
Gestore della scheda proprietà IShellPropSheetExt PropertySheetHandlers

 

Per i gestori seguenti, il valore predefinito della chiave "Handler Subkey Name" è la versione stringa del CLSID dell'estensione Shell. È possibile registrare una sola estensione per questi gestori.

Gestore Interface Nome della sottochiave del gestore
Gestore dei dati Idataobject DataHandler
Gestore di rilascio Idroptarget DropHandler
Gestore icone IExtractIconA/W IconHandler
Gestore di immagini di anteprima IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Gestore della finestra popup IQueryInfo {00021500-0000-0000-C000-000000000046}
Collegamento alla shell (ANSI) IShellLinkA {000214EE-0000-0000-C000-000000000046}
Collegamento alla shell (UNICODE) IShellLinkW {000214F9-0000-0000-C000-00000000046}
Archiviazione strutturata IStorage {0000000B-0000-0000-C000-000000000046}
Metadati IPropertySetStorage PropertyHandler
Aggiungi al menu Start IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
Aggiungi alla barra delle applicazioni {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

Le sottochiavi specificate per aggiungere Aggiungi al menu Start e Aggiungi alla barra delle applicazioni al menu di scelta rapida di un elemento sono necessarie solo per i tipi di file che includono la voce IsShortCut .

Oggetti shell predefiniti

Shell definisce oggetti aggiuntivi in HKEY_CLASSES_ROOT che possono essere estesi nello stesso modo dei tipi di file. Ad esempio, per aggiungere un gestore della finestra delle proprietà per tutti i file, è possibile eseguire la registrazione nella sottochiave PropertySheetHandlers .

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

Nella tabella seguente vengono fornite le varie sottochiavi di HKEY_CLASSES_ROOT in cui è possibile registrare i gestori di estensione. Si noti che molti gestori di estensione non possono essere registrati in tutte le sottochiavi elencate. Per altri dettagli, vedere la documentazione del gestore specifico.

Subkey Description Gestori possibili
* Tutti i file Menu di scelta rapida, Finestra delle proprietà, Verbi (vedere di seguito)
AllFileSystemObjects Tutti i file e le cartelle di file Menu di scelta rapida, Finestra delle proprietà, Verbi
Cartella Tutte le cartelle Menu di scelta rapida, Finestra delle proprietà, Verbi
Directory Cartelle di file Menu di scelta rapida, Finestra delle proprietà, Verbi
Directory\Background Sfondo della cartella file Solo menu di scelta rapida
DesktopBackground Sfondo del desktop (Windows 7 e versioni successive) Menu di scelta rapida, Verbi
Guida Tutte le unità in MyComputer, ad esempio "C:\" Menu di scelta rapida, Finestra delle proprietà, Verbi
Network Intera rete (in Posizioni di rete personali) Menu di scelta rapida, Finestra delle proprietà, Verbi
Network\Type\# Tutti gli oggetti di tipo # (vedere di seguito) Menu di scelta rapida, Finestra delle proprietà, Verbi
NetShare Tutte le condivisioni di rete Menu di scelta rapida, Finestra delle proprietà, Verbi
Netserver Tutti i server di rete Menu di scelta rapida, Finestra delle proprietà, Verbi
network_provider_name Tutti gli oggetti forniti dal provider di rete "network_provider_name" Menu di scelta rapida, Finestra delle proprietà, Verbi
Printers Tutte le stampanti Menu di scelta rapida, Finestra delle proprietà
AudioCD CD audio nel lettore CD Solo i verbi
DVD Unità DVD (Windows 2000) Menu di scelta rapida, Finestra delle proprietà, Verbi

 

Note

  • È possibile accedere al menu di scelta rapida in background della cartella file facendo clic con il pulsante destro del mouse all'interno di una cartella di file, ma non su alcun contenuto della cartella.
  • I "verbi" sono comandi speciali registrati sotto HKEY_CLASSES_ROOT\Sottochiave\Shell\Verb.
  • PerTipo di\\#, "#" è un codice di tipo provider di rete in decimale. Il codice del tipo di provider di rete è la parola alta di un tipo di rete. L'elenco dei tipi di rete viene fornito nel file di intestazione Winnetwk.h (valori WNNC_NET_*). Ad esempio, WNNC_NET_SHIVA è 0x00330000, quindi la sottochiave del tipo corrispondente sarà HKEY_CLASSES_ROOT\tipo di\rete\51.
  • "network_provider_name" è un nome del provider di rete come specificato da WNetGetProviderName, con gli spazi convertiti in caratteri di sottolineatura. Ad esempio, se il provider di rete Microsoft è installato, il nome del provider è "Microsoft Windows Network" e il network_provider_name corrispondente è Microsoft_Windows_Network.

Esempio di registrazione di un gestore di estensioni

Per abilitare un handler specifico, creare una sottochiave nella sottochiave del tipo di handler dell'estensione con il nome dell'handler. La Shell non usa il nome del gestore, ma deve essere diverso da tutti gli altri nomi in quella sottochiave di tipo. Impostare il valore predefinito della sottochiave name sul formato stringa del GUID del gestore.

Nell'esempio seguente vengono illustrate le voci del Registro di sistema che abilitano i gestori di estensione del menu di scelta rapida e della finestra delle proprietà, usando un esempio di tipo di file myp.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   CLSID
      {00000000-1111-2222-3333-444444444444}
         InProcServer32
            (Default) = C:\MyDir\MyCommand.dll
            ThreadingModel = Apartment
      {11111111-2222-3333-4444-555555555555}
         InProcServer32
            (Default) = C:\MyDir\MyPropSheet.dll
            ThreadingModel = Apartment
   MyProgram.1
      (Default) = MyProgram Application
      Shellex
         ContextMenuHandler
            MyCommand
               (Default) = {00000000-1111-2222-3333-444444444444}
         PropertySheetHandlers
            MyPropSheet
               (Default) = {11111111-2222-3333-4444-555555555555}

Inizializzazione dei gestori dell'estensione shell