Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È 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
- Oggetti shell predefiniti
- Esempio di registrazione di un gestore di estensioni
- Argomenti correlati
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}
Argomenti correlati