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
- Oggetti Shell predefiniti
- Esempio di registrazione del gestore estensioni
- Argomenti correlati
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}
Argomenti correlati