Creazione di gestori di estensione della shell
Le funzionalità di Shell possono essere estese con voci del Registro di sistema e file di .ini. Anche se questo approccio per estendere shell è semplice e adeguato per molti scopi, è limitato. Ad esempio, se si usa il Registro di sistema per specificare un'icona personalizzata per un tipo di file, verrà visualizzata la stessa icona per ogni file di tale tipo. L'estensione della shell con il Registro di sistema non consente di variare l'icona per file diversi dello stesso tipo. Non è possibile modificare altri aspetti della shell, ad esempio il foglio proprietà Proprietà che può essere visualizzato quando un file viene fatto clic con il pulsante destro del mouse, non può essere modificato con il Registro di sistema.
Un approccio più potente e flessibile per estendere shell consiste nell'implementare gestori di estensioni della shell. Questi gestori possono essere implementati per un'ampia gamma di azioni che la Shell può eseguire. Prima di eseguire l'azione, Shell esegue una query sul gestore dell'estensione, offrendo la possibilità di modificare l'azione. Un esempio comune è un gestore dell'estensione del menu di scelta rapida. Se viene implementato per un tipo di file, verrà eseguita una query ogni volta che viene fatto clic con il pulsante destro del mouse su uno dei file. Il gestore può quindi specificare voci di menu aggiuntive in base a file in base al file anziché avere lo stesso set per l'intero tipo di file.
Questo documento illustra come implementare i gestori di estensione che consentono di modificare un'ampia gamma di azioni shell. I gestori seguenti sono associati a un tipo di file specifico e consentono di specificare in base a un file per file:
Gestore | Descrizione |
---|---|
Gestore del menu di scelta rapida | Chiamato prima che venga visualizzato il menu di scelta rapida di un file. Consente di aggiungere elementi al menu di scelta rapida su base file. |
Gestore dati | Chiamato quando viene eseguita un'operazione di trascinamento della selezione sugli oggetti dragShell. Consente di fornire altri formati degli Appunti alla destinazione di rilascio. |
Gestore di rilascio | Chiamato quando un oggetto dati viene trascinato o eliminato in un file. Consente di creare un file in una destinazione di rilascio. |
Gestore icona | Chiamato prima che venga visualizzata l'icona di un file. Consente di sostituire l'icona predefinita del file con un'icona personalizzata su base file. |
Gestore della finestra delle proprietà | Chiamato prima che venga visualizzato il foglio delle proprietà Proprietà di un oggetto. Consente di aggiungere o sostituire pagine. |
Gestore dell'immagine di anteprima | Fornisce un'immagine per rappresentare l'elemento. |
Gestore della finestra popup | Fornisce testo popup quando l'utente passa il puntatore del mouse sull'oggetto. |
Gestore dei metadati | Fornisce l'accesso in lettura e scrittura ai metadati (proprietà) archiviati in un file. Questa opzione può essere usata per estendere la visualizzazione Dettagli, le descrizioni infotipi, la pagina delle proprietà e le funzionalità di raggruppamento. |
Altri gestori non sono associati a un tipo di file specifico, ma vengono chiamati prima di alcune operazioni di Shell:
Gestore | Descrizione |
---|---|
Gestore delle colonne | Chiamato da Esplora risorse di Windows prima di visualizzare la visualizzazione Dettagli di una cartella. Consente di aggiungere colonne personalizzate alla visualizzazione Dettagli. |
Copiare il gestore di hook | Chiamato quando un oggetto cartella o stampante sta per essere spostato, copiato, eliminato o rinominato. Consente di approvare o veto l'operazione. |
Gestore di trascinamento della selezione | Chiamato quando un file viene trascinato con il pulsante destro del mouse. Consente di modificare il menu di scelta rapida visualizzato. |
Gestore sovrimpressione icona | Chiamato prima che venga visualizzata l'icona di un file. Consente di specificare una sovrapposizione per l'icona del file. |
Gestore di ricerca | Chiamato per avviare un motore di ricerca. Consente di implementare un motore di ricerca personalizzato accessibile dal menu Start o da Esplora risorse. |
I dettagli su come implementare gestori di estensione specifici sono illustrati nelle sezioni elencate sopra. Il resto di questo documento illustra alcuni problemi di implementazione comuni a tutti i gestori di estensioni shell.
- Implementazione dei gestori di estensioni shell
- Miglioramento di Windows Search con gestori di estensioni shell
- Registrazione dei gestori di estensioni shell
- Argomenti correlati
Gran parte dell'implementazione di un oggetto gestore estensioni shell dipende dal relativo tipo. Esistono tuttavia alcuni elementi comuni. In questa sezione vengono illustrati gli aspetti dell'implementazione condivisi da tutti i gestori di estensioni shell.
Molti gestori di estensioni shell sono oggetti COM (Component Object Model) in-process. Devono essere assegnati un GUID e registrati come descritto in Registrazione dei gestori di estensioni shell. Vengono implementati come DLL e devono esportare le funzioni standard seguenti:
- DllMain. Punto di ingresso standard alla DLL.
- DllGetClassObject. Espone la class factory dell'oggetto.
- DllCanUnloadNow. COM chiama questa funzione per determinare se l'oggetto serve tutti i client. In caso contrario, il sistema può scaricare la DLL e liberare la memoria associata.
Come tutti gli oggetti COM, i gestori di estensione shell devono implementare un'interfaccia IUnknown e una classe factory. La maggior parte dei gestori di estensione deve anche implementare un'interfaccia IPersistFile o IShellExtInit in Windows XP o versioni precedenti. Questi sono stati sostituiti da IInitializeWithStream, IInitializeWithItem e IInitializeWithFile in Windows Vista. Shell usa queste interfacce per inizializzare il gestore.
L'interfaccia IPersistFile deve essere implementata dal codice seguente:
- Gestori dati
- Gestori di rilascio
In passato, i gestori dell'icona erano necessari anche per implementare IPersistFile, ma questo non è più vero. Per i gestori delle icone, iPersistFile è ora facoltativo e altre interfacce come IInitializeWithItem sono preferite.
L'interfaccia IShellExtInit deve essere implementata dal codice seguente:
- Gestori di menu di scelta rapida
- Gestori trascinatori di trascinamento
- Gestori foglio delle proprietà
L'interfaccia IPersistFile è destinata a consentire il caricamento di un oggetto da o salvato in un file disco. Ha sei metodi oltre a IUnknown, cinque dei propri e il metodo GetClassID che eredita da IPersist. Con le estensioni shell, IPersist viene usato solo per inizializzare un oggetto gestore di estensione shell. Poiché in genere non è necessario leggere o scrivere sul disco, solo i metodi GetClassID e Load richiedono un'implementazione nonken.
Shell chiama prima GetClassID e la funzione restituisce l'identificatore di classe (CLSID) dell'oggetto gestore di estensione. Shell chiama quindi Load e passa due valori. Il primo, pszFileName, è una stringa Unicode con il nome del file o della cartella su cui Shell sta per operare. Il secondo è dwMode, che indica la modalità di accesso ai file. Poiché in genere non è necessario accedere ai file, dwMode è in genere zero. Il metodo archivia questi valori in base alle esigenze per riferimento successivo.
Il frammento di codice seguente illustra come un gestore di estensioni shell tipico implementa i metodi GetClassID e Load . È progettato per gestire ANSI o Unicode. CLSID_SampleExtHandler è il GUID dell'oggetto gestore di estensione e CSampleExtHandler è il nome della classe usata per implementare l'interfaccia. Le variabili m_szFileName e m_dwMode sono variabili private usate per archiviare il nome e i flag di accesso del file.
wchar_t m_szFileName[MAX_PATH]; // The file name
DWORD m_dwMode; // The file access mode
CSampleExtHandler::GetClassID(CLSID *pCLSID)
{
*pCLSID = CLSID_SampleExtHandler;
}
CSampleExtHandler::Load(PCWSTR pszFile, DWORD dwMode)
{
m_dwMode = dwMode;
return StringCchCopy(_szFileName, ARRAYSIZE(m_szFileName), pszFile);
}
L'interfaccia IShellExtInit ha un solo metodo , IShellExtInit::Initialize, oltre a IUnknown. Il metodo dispone di tre parametri che shell può usare per passare vari tipi di informazioni. I valori passati dipendono dal tipo di gestore e alcuni possono essere impostati su NULL.
- pIDFolder contiene il puntatore di una cartella a un elenco di identificatori di elemento (PIDL). Per le estensioni della finestra delle proprietà, è NULL. Per le estensioni del menu di scelta rapida, si tratta del PIDL della cartella che contiene l'elemento il cui menu di scelta rapida viene visualizzato. Per i gestori di trascinamento e rilascio non predefiniti, è il CODICE PIDL della cartella di destinazione.
- pDataObject contiene un puntatore all'interfaccia IDataObject di un oggetto dati. L'oggetto dati contiene uno o più nomi di file nel formato CF_HDROP .
- hRegKey contiene una chiave del Registro di sistema per l'oggetto file o il tipo di cartella.
Il metodo IShellExtInit::Initialize archivia il nome file, il puntatore IDataObject e la chiave del Registro di sistema in base alle esigenze per un uso successivo. Il frammento di codice seguente illustra un'implementazione di IShellExtInit::Initialize. Per semplicità, in questo esempio si presuppone che l'oggetto dati contenga solo un singolo file. In generale, potrebbe contenere più file che dovranno essere estratti.
LPCITEMIDLIST m_pIDFolder; //The folder's PIDL
wchar_t m_szFile[MAX_PATH]; //The file name
IDataObject *m_pDataObj; //The IDataObject pointer
HKEY m_hRegKey; //The file or folder's registry key
STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
IDataObject *pDataObj,
HKEY hRegKey)
{
// If Initialize has already been called, release the old PIDL
ILFree(m_pIDFolder);
m_pIDFolder = nullptr;
// Store the new PIDL.
if (pIDFolder)
{
m_pIDFolder = ILClone(pIDFolder);
}
// If Initialize has already been called, release the old
// IDataObject pointer.
if (m_pDataObj)
{
m_pDataObj->Release();
}
// If a data object pointer was passed in, save it and
// extract the file name.
if (pDataObj)
{
m_pDataObj = pDataObj;
pDataObj->AddRef();
STGMEDIUM medium;
FORMATETC fe = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
UINT uCount;
if (SUCCEEDED(m_pDataObj->GetData(&fe, &medium)))
{
// Get the count of files dropped.
uCount = DragQueryFile((HDROP)medium.hGlobal, (UINT)-1, NULL, 0);
// Get the first file name from the CF_HDROP.
if (uCount)
DragQueryFile((HDROP)medium.hGlobal, 0, m_szFile,
sizeof(m_szFile)/sizeof(TCHAR));
ReleaseStgMedium(&medium);
}
}
// Duplicate the registry handle.
if (hRegKey)
RegOpenKeyEx(hRegKey, nullptr, 0L, MAXIMUM_ALLOWED, &m_hRegKey);
return S_OK;
}
CSampleExtHandler è il nome della classe usata per implementare l'interfaccia. Le variabili m_pIDFolder, m_pDataObject, m_szFileName e m_hRegKey sono variabili private usate per archiviare le informazioni passate. Per semplicità, in questo esempio si presuppone che l'oggetto dati conterrà un solo nome di file. Dopo aver recuperato la struttura FORMATETC dall'oggetto dati, DragQueryFile viene utilizzato per estrarre il nome del file dal membro medium.hGlobal della struttura FORMATETC. Se viene passata una chiave del Registro di sistema, il metodo usa RegOpenKeyEx per aprire la chiave e assegna l'handle a m_hRegKey.
Esistono due modi per personalizzare le descrizioni info:
- Implementare un oggetto che supporta IQueryInfo e quindi registrare l'oggetto nella sottochiave appropriata nel Registro di sistema (vedere Registrazione di gestori estensioni shell di seguito).
- Specificare una stringa fissa o un elenco di proprietà di file specifiche da visualizzare.
Per visualizzare una stringa fissa per un'estensione dello spazio dei nomi, creare una voce denominata InfoTip
nella chiave {CLSID} dell'estensione dello spazio dei nomi. Impostare il valore di tale voce come stringa letterale da visualizzare, come illustrato in questo esempio, o una stringa indiretta che specifica una risorsa e un indice all'interno di tale risorsa (a scopo di localizzazione).
HKEY_CLASSES_ROOT
CLSID
{CLSID}
InfoTip = InfoTip string for your namespace extension
Per visualizzare una stringa fissa per un tipo di file, creare una voce denominata InfoTip
nella chiave ProgID di tale tipo di file. Impostare il valore di tale voce come stringa letterale da visualizzare o una stringa indiretta che specifica una risorsa e un indice all'interno di tale risorsa (a scopo di localizzazione), come illustrato in questo esempio.
HKEY_CLASSES_ROOT
ProgID
InfoTip = Resource.dll, 3
Se si desidera che shell visualizzi proprietà di file specifiche nella descrizione info per un tipo di file specifico, creare una voce denominata InfoTip
nella chiave ProgID per tale tipo di file. Impostare il valore di tale voce in modo che sia un elenco delimitato da punto e virgola di nomi di proprietà canonici, coppie di identificatori di formato (FMTID)/identificatore di proprietà (PID) o entrambe. Questo valore deve iniziare con "prop:" per identificarlo come stringa dell'elenco di proprietà. Se si omette "prop:", il valore viene visualizzato come stringa letterale e visualizzato come tale.
Nell'esempio seguente propname è un nome di proprietà canonico (ad esempio System.Date) e {fmtid}, pid è una coppia FMTID/PID .
HKEY_CLASSES_ROOT
ProgID
InfoTip = prop:propname;propname;{fmtid},pid;{fmtid},pid
È possibile usare i nomi di proprietà seguenti:
Nome proprietà | Descrizione | Recuperato da |
---|---|---|
Autore | Autore del documento | PIDSI_AUTHOR |
Titolo | Titolo del documento | PIDSI_TITLE |
Oggetto | Riepilogo dell'oggetto | PIDSI_SUBJECT |
Commento | Commenti al documento | PIDSI_COMMENT o proprietà di cartella/driver |
PageCount | Numero di pagine | PIDSI_PAGECOUNT |
Nome | Nome descrittivo | Visualizzazione cartella standard |
OriginalLocation | Percorso del file originale | Cartella del cestino e cartella del Cestino in lettere minuscole |
DateDeleted | Data di eliminazione del file | Cartella Cestino |
Tipo | Tipo di file | Visualizzazione dettagli cartella standard |
Dimensione | Dimensioni del file | Visualizzazione dettagli cartella standard |
SyncCopyIn | Uguale a OriginalLocation | Uguale a OriginalLocation |
Ultima modifica | Data ultima modifica | Visualizzazione dettagli cartella standard |
Data di creazione | Data creazione | Visualizzazione dettagli cartella standard |
Accedere | Data dell'ultimo accesso | Visualizzazione dettagli cartella standard |
InFolder | Directory contenente il file | Risultati della ricerca documenti |
Classifica | Qualità della corrispondenza di ricerca | Risultati della ricerca documenti |
FreeSpace | Spazio di archiviazione disponibile | Unità disco |
NumberOfVisits | Numero di visite | Cartella Preferiti |
Attributi | Attributi file | Visualizzazione dettagli cartella standard |
Company | Nome azienda | PIDDSI_COMPANY |
Category | Categoria documento | PIDDSI_CATEGORY |
Copyright | Copyright multimediale | PIDMSI_COPYRIGHT |
HTMLInfoTipFile | File infotip HTML | Desktop.ini file per la cartella |
I gestori di estensione della shell possono essere usati per migliorare l'esperienza utente fornita da un gestore del protocollo di Windows Search. Per abilitare tali miglioramenti, il gestore dell'estensione shell di supporto deve essere progettato per l'integrazione con il gestore del protocollo di ricerca come origine dati. Per informazioni su come migliorare un gestore di protocolli di Windows Search tramite l'integrazione con un gestore di estensioni shell, vedere Aggiunta di icone, anteprime e menu di scelta rapida. Per altre informazioni sui gestori di protocollo di Windows Search, vedere Sviluppo di gestori di protocollo.
Prima di poterlo usare, è necessario registrare un oggetto gestore dell'estensione shell. Questa sezione descrive 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 con SHChangeNotify, specificando l'evento SHCNE_ASSOCCHANGED . Se non si chiama SHChangeNotify, la modifica potrebbe non essere riconosciuta fino al riavvio del sistema.
Come per tutti gli oggetti COM, è necessario creare un GUID per il gestore usando uno strumento come UUIDGEN.exe. Creare una chiave in HKEY_CLASSES_ROOT\CLSID il cui nome è il formato stringa del GUID. Poiché i gestori di estensione della shell sono server in-process, è necessario creare una chiave InProcServer32 nella chiave GUID con il valore predefinito impostato sul percorso della DLL del gestore. Usare il modello di threading Apartment.
Ogni volta che shell esegue un'azione che può coinvolgere un gestore di estensioni shell, controlla la chiave del Registro di sistema appropriata. La chiave in cui viene registrato un gestore di estensione controlla quindi quando verrà chiamata. 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 chiave ProgID del tipo di file.
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 Oggetti shell predefiniti).
Ad esempio, se si vuole registrare un gestore di estensione del menu di scelta rapida per MyProgram.1, si inizierà creando la sottochiave seguente:
HKEY_CLASSES_ROOT
MyProgram.1
ShellEx
ContextMenuHandlers
Per i gestori seguenti, creare una sottochiave sotto la chiave "Handler Subkey name" il cui nome è la versione stringa del CLSID dell'estensione Shell. È possibile registrare più estensioni nella chiave del nome della sottochiave del gestore creando più sottochiavi.
Gestore | Interfaccia | Nome sottochiave gestore |
---|---|---|
Gestore menu di scelta rapida | IContextMenu | ContextMenuHandlers |
Gestore copyhook | ICopyHook | CopyHookHandlers |
Gestore di trascinamento della selezione | IContextMenu | DragDropHandlers |
Gestore della finestra delle proprietà | IShellPropSheetExt | PropertySheetHandlers |
Gestore provider di colonne (deprecato in Windows Vista) | IColumnProvider | ColumnHandlers |
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 | Interfaccia | Nome sottochiave gestore |
---|---|---|
Gestore dati | Idataobject | Gestore dati |
Gestore di rilascio | Idroptarget | DropHandler |
Gestore icone | IExtractIconA/W | IconHandler |
Gestore di immagini | IExtractImage | {BB2E617C-0920-11d1-9A0B-00C04FC2D6C1} |
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-00000000046} |
Collegamento alla shell (UNICODE) | IShellLinkW | {000214F9-0000-0000-C000-000000000046} |
Archiviazione strutturata | IStorage | {0000000B-0000-0000-C000-00000000046} |
Metadati | Ipropertystore | PropertyHandler |
Metadati | IPropertySetStorage (deprecato in Windows Vista) | 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 .
Il supporto per i gestori del provider di colonne è stato rimosso in Windows Vista. Inoltre, a partire da Windows Vista, IPropertySetStorage è stato deprecato a favore di IPropertyStore.
Mentre IExtractImage rimane supportato, IThumbnailProvider è preferito per Windows Vista e versioni successive.
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 del foglio delle proprietà per tutti i file, è possibile registrare nella chiave 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 | Versione |
---|---|---|---|
* | Tutti i file | Menu di scelta rapida, Foglio proprietà, Verbi (vedere di seguito) | Tutti |
AllFileSystemObjects | Tutti i file e le cartelle file | Menu di scelta rapida, Foglio proprietà, Verbi | 4.71 |
Cartella | Tutte le cartelle | Menu di scelta rapida, Foglio proprietà, Verbi | Tutti |
Directory | Cartelle file | Menu di scelta rapida, Foglio proprietà, Verbi | Tutti |
Directory\Background | Sfondo della cartella file | Solo menu di scelta rapida | 4.71 |
Unità | Tutte le unità in MyComputer, ad esempio "C:\" | Menu di scelta rapida, Foglio proprietà, Verbi | Tutti |
Rete | Intera rete (in Luoghi di rete personali) | Menu di scelta rapida, Foglio proprietà, Verbi | Tutti |
Network\Type\ # | Tutti gli oggetti di tipo # (vedere di seguito) | Menu di scelta rapida, Foglio proprietà, Verbi | 4.71 |
Netshare | Tutte le condivisioni di rete | Menu di scelta rapida, Foglio proprietà, Verbi | 4.71 |
Netserver | Tutti i server di rete | Menu di scelta rapida, Foglio proprietà, Verbi | 4.71 |
network_provider_name | Tutti gli oggetti forniti dal provider di rete "network_provider_name" | Menu di scelta rapida, Foglio proprietà, Verbi | Tutti |
Stampanti | Tutte le stampanti | Menu di scelta rapida, Foglio proprietà | Tutti |
AudioCD | CD audio nell'unità CD | Solo verbi | Tutti |
DVD | Unità DVD (Windows 2000) | Menu di scelta rapida, Foglio proprietà, Verbi | 4.71 |
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\Subkey\Shell\Verb .
- PerTipo direte\ , "#" è 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 chiave di 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.
Per abilitare un determinato gestore, creare una sottochiave nella chiave del tipo di 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 del foglio 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}
La procedura di registrazione descritta in questa sezione deve essere seguita per tutti i sistemi Windows.