Registrazione dei gestori di estensioni shell

Un oggetto gestore estensione shell deve essere registrato prima che shell possa usarlo. Questo argomento è una discussione generale su come registrare un gestore di estensioni shell.

Ogni volta che si crea o si modifica un gestore dell'estensione shell, è importante notificare al sistema che è stata apportata una modifica. Eseguire questa operazione chiamando SHChangeNotify, specificando l'evento SHCNE_ASSOCCHANGED . Se non si chiama SHChangeNotify, la modifica potrebbe non essere riconosciuta finché il sistema non viene riavviato.

Esistono alcuni fattori aggiuntivi che si applicano ai sistemi Windows 2000. Per informazioni dettagliate, vedere la sezione Registrazione gestori estensioni shell in Sistemi Windows 2000 .

Come per tutti gli oggetti Component Object Model (COM), è 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 estensioni shell sono server in-process, è necessario creare anche una sottochiave InprocServer32 in tale sottochiave GUID con il valore (Default) impostato sul percorso della DLL del gestore. Usare il modello di threading dell'appartamento. Di seguito è riportato un esempio:

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

Ogni volta che shell esegue un'azione che può coinvolgere un gestore di estensioni shell, controlla la sottochiave del Registro di sistema appropriata. Sottochiave in cui viene registrato un gestore di estensione quando verrà chiamato. Ad esempio, è una procedura comune per 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.

Questo argomento illustra gli argomenti seguenti:

Nomi del gestore

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 gestori seguenti, creare una sottochiave sotto la sottochiave "Handler Subkey name" denominata come versione stringa dell'identificatore di classe (CLSID) dell'estensione Shell. È possibile registrare più estensioni nel nome della sottochiave del gestore creando più sottochiave.

Gestore Interfaccia Nome della sottochiave del gestore
Gestore provider di colonne IColumnProvider ColumnHandlers
Gestore del menu di scelta rapida IContextMenu ContextMenuHandlers
Gestore copyhook ICopyHook CopyHookHandlers
Gestore di trascinamento della selezione IContextMenu DragDropHandlers
Gestore della finestra delle proprietà IShellPropSheetExt PropertySheetHandlers

 

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

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

 

Le sottochiavi specificate per aggiungere Aggiungi al menu Start e Aggiungi alla barra delle applicazioni alla barra delle applicazioni 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 di fogli di proprietà per tutti i file, è possibile registrare nella sottochiave PropertySheetHandlers .

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

La tabella seguente fornisce 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 sottochiave elencate. Per altre informazioni, vedere la documentazione del gestore specifico.

Sottochiave Descrizione Possibili gestori
* Tutti i file Menu di scelta rapida, Foglio proprietà, Verbi (vedere di seguito)
AllFileSystemObjects Tutti i file e le cartelle file Menu di scelta rapida, Foglio proprietà, Verbi
Cartella Tutte le cartelle Menu di scelta rapida, Foglio proprietà, Verbi
Directory Cartelle file Menu di scelta rapida, Foglio proprietà, Verbi
Directory\Background Sfondo della cartella file Solo menu di scelta rapida
DesktopBackground Sfondo desktop (Windows 7 e versioni successive) Menu di scelta rapida, Verbi
Unità Tutte le unità in MyComputer, ad esempio "C:\" Menu di scelta rapida, Foglio proprietà, Verbi
Rete Intera rete (in Luoghi di rete personali) Menu di scelta rapida, Foglio proprietà, Verbi
Network\Type\ # Tutti gli oggetti di tipo # (vedere di seguito) Menu di scelta rapida, Foglio proprietà, Verbi
Netshare Tutte le condivisioni di rete Menu di scelta rapida, Foglio proprietà, Verbi
Netserver Tutti i server di rete Menu di scelta rapida, Foglio proprietà, Verbi
network_provider_name Tutti gli oggetti forniti dal provider di rete "network_provider_name" Menu di scelta rapida, Foglio proprietà, Verbi
Stampanti Tutte le stampanti Menu di scelta rapida, Foglio proprietà
AudioCD CD audio nell'unità CD Solo verbi
DVD Unità DVD (Windows 2000) Menu di scelta rapida, Foglio proprietà, Verbi

 

Note

  • Il menu di scelta rapida in background della cartella file è accessibile facendo clic con il pulsante destro del mouse all'interno di una cartella file, ma non tramite alcun contenuto della cartella.
  • "Verbi" sono comandi speciali registrati in HKEY_CLASSES_ROOT\Verbo della shell\della sottochiave\.
  • PerTipo di\#rete\, "#" è 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 specificato 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 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 del gestore estensioni

Per abilitare un determinato gestore, creare una sottochiave nel sottochiave del gestore dell'estensione con il nome del gestore. Shell non usa il nome del gestore, ma deve essere diverso da tutti gli altri nomi sotto tale sottochiave. Impostare il valore predefinito della sottochiave nome sulla forma stringa del GUID del gestore.

Nell'esempio seguente vengono illustrate le voci del Registro di sistema che abilitano i gestori di estensioni del menu di scelta rapida e dell'estensione del foglio di 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 di estensioni shell