Creazione di gestori di menu di scelta rapida
I gestori di menu di scelta rapida, noti anche come gestori di menu di scelta rapida o gestori verbi, sono un tipo di gestore dei tipi di file. Questi gestori possono essere implementati in modo da farli caricare nel proprio processo o in Esplora risorse o in altri processi di terze parti. Prestare attenzione quando si creano gestori in-process in quanto possono causare danni al processo che li carica.
Nota
Quando si registrano gestori che funzionano nel contesto di applicazioni a 32 bit, è necessario tenere presenti considerazioni speciali per le versioni basate su 64 bit di Windows: quando viene richiamato nel contesto di un'applicazione di velocità diversa, il sottosistema WOW64 reindirizza l'accesso al file system ad alcuni percorsi. Se il gestore .exe viene archiviato in uno di questi percorsi, non è accessibile in questo contesto. Pertanto, come soluzione alternativa, archiviare il .exe in un percorso che non viene reindirizzato o archiviare una versione stub del .exe che avvia la versione reale.
Questo argomento è organizzato come segue:
- Verbi canonici
- Verbi estesi
- Verbi solo accesso a livello di codice
- Personalizzazione di un menu di scelta rapida tramite verbi statici
- Attivazione del gestore tramite l'interfaccia IDropTarget
- Specifica della posizione e dell'ordine dei verbi statici
- Posizionamento dei verbi nella parte superiore o inferiore del menu
- Creazione di menu a catena statici
- Recupero del comportamento dinamico per i verbi statici tramite la sintassi di query avanzata
- Deprecato: Associazione di verbi ai comandi di Dynamic Data Exchange
- Completamento delle attività di implementazione verbo
- Personalizzazione del menu di scelta rapida per oggetti shell predefiniti
- Estensione di un nuovo sottomenu
- Eliminazione di verbi e controllo della visibilità
- Uso del modello di selezione verbo
- Uso degli attributi dell'elemento
- Implementazione di verbi personalizzati per le cartelle tramite Desktop.ini
- Argomenti correlati
Verbi canonici
Le applicazioni sono in genere responsabili della fornitura di stringhe di visualizzazione localizzate per i verbi definiti. Tuttavia, per fornire un grado di indipendenza del linguaggio, il sistema definisce un set standard di verbi comunemente usati denominati verbi canonici. Un verbo canonico non viene mai visualizzato all'utente e può essere usato con qualsiasi lingua dell'interfaccia utente. Il sistema usa il nome canonico per generare automaticamente una stringa di visualizzazione localizzata correttamente. Ad esempio, la stringa di visualizzazione del verbo aperto è impostata su Open in un sistema inglese e sull'equivalente tedesco in un sistema tedesco.
Verbo canonico | Descrizione |
---|---|
Apri | Apre il file o la cartella. |
Opennew | Apre il file o la cartella in una nuova finestra. |
Stampa | Stampa il file. |
Stampato | Consente all'utente di stampare un file trascinandolo in un oggetto stampante. |
Esplora | Apre Esplora risorse con la cartella selezionata. |
Proprietà | Apre la finestra delle proprietà dell'oggetto. |
Nota
Il verbo Printto è anche canonico, ma non viene mai visualizzato. L'inclusione consente all'utente di stampare un file trascinandolo in un oggetto stampante.
I gestori di menu di scelta rapida possono fornire verbi canonici personalizzati tramite IContextMenu::GetCommandString con GCS_VERBW o GCS_VERBA. Il sistema userà i verbi canonici come secondo parametro (lpOperation) passato a ShellExecute ed è CMINVOKECOMMANDINFO.Membro lpVerb passato al metodo IContextMenu::InvokeCommand.
Verbi estesi
Quando l'utente fa clic con il pulsante destro del mouse su un oggetto, il menu di scelta rapida visualizza i verbi predefiniti. È possibile aggiungere e supportare i comandi in alcuni menu di scelta rapida che non vengono visualizzati in ogni menu di scelta rapida. Ad esempio, è possibile avere comandi che non vengono comunemente usati o destinati a utenti esperti. Per questo motivo, è anche possibile definire uno o più verbi estesi. Questi verbi sono simili ai verbi normali, ma sono distinti dai verbi normali nel modo in cui vengono registrati. Per avere accesso ai verbi estesi, l'utente deve fare clic con il pulsante destro del mouse su un oggetto premendo MAIUSC. Quando l'utente lo fa, i verbi estesi vengono visualizzati oltre ai verbi predefiniti.
È possibile usare il Registro di sistema per definire uno o più verbi estesi. I comandi associati verranno visualizzati solo quando l'utente fa clic con il pulsante destro del mouse su un oggetto, premendo anche il tasto MAIUSC. Per definire un verbo come esteso, aggiungere un valore "esteso" REG_SZ alla sottochiave del verbo. Al valore non devono essere associati dati.
Verbi solo accesso a livello di codice
Questi verbi non vengono mai visualizzati in un menu di scelta rapida. È possibile accedervi usando ShellExecuteEx e specificando il campo lpVerb del parametro pExecInfo (un oggetto SHELLEXECUTEINFO). Per definire un verbo solo come accesso a livello di codice, aggiungere un valore "ProgrammaticAccessOnly" REG_SZ alla sottochiave del verbo. Al valore non devono essere associati dati.
È possibile usare il Registro di sistema per definire uno o più verbi estesi. I comandi associati verranno visualizzati solo quando l'utente fa clic con il pulsante destro del mouse su un oggetto, premendo anche il tasto MAIUSC. Per definire un verbo come esteso, aggiungere un valore "esteso" REG_SZ alla sottochiave del verbo. Al valore non devono essere associati dati.
Personalizzazione di un menu di scelta rapida tramite verbi statici
Dopo aver scelto un verbo statico o dinamico per il menu di scelta rapida, è possibile estendere il menu di scelta rapida per un tipo di file registrando un verbo statico per il tipo di file. A tale scopo, aggiungere una sottochiave Shell sotto la sottochiave per ProgID dell'applicazione associata al tipo di file. Facoltativamente, è possibile definire un verbo predefinito per il tipo di file impostando il valore predefinito della sottochiave shell .
Il verbo predefinito viene visualizzato per primo nel menu di scelta rapida. Lo scopo è fornire alla shell un verbo che può usare quando viene chiamata la funzione ShellExecuteEx , ma non viene specificato alcun verbo. Shell non seleziona necessariamente il verbo predefinito quando ShellExecuteEx viene usato in questo modo.
Shell usa il primo verbo disponibile nell'ordine seguente:
- Verbo predefinito
- Primo verbo nel Registro di sistema, se viene specificato l'ordine del verbo
- Verbo Open
- Verbo Apri con
Se nessuno dei verbi elencati è disponibile, l'operazione ha esito negativo.
Creare una sottochiave per ogni verbo da aggiungere sotto la sottochiave shell. Ognuna di queste sottochiavi deve avere un valore REG_SZ impostato sulla stringa di visualizzazione del verbo (stringa localizzata). Per ogni sottochiave verbo, creare una sottochiave di comando con il valore predefinito impostato sulla riga di comando per attivare gli elementi. Per i verbi canonici, ad esempio Open e Print, è possibile omettere la stringa di visualizzazione perché il sistema visualizza automaticamente una stringa localizzata correttamente. Per i verbi noncanonici, se si omette la stringa di visualizzazione, viene visualizzata la stringa del verbo.
Nell'esempio del Registro di sistema seguente si noti che:
- Poiché Doit non è un verbo canonico, viene assegnato un nome visualizzato, che può essere selezionato premendo il tasto D.
- Il verbo Printto non viene visualizzato nel menu di scelta rapida. Tuttavia, l'inclusione nel Registro di sistema consente all'utente di stampare i file rilasciandoli su un'icona della stampante.
- Per ogni verbo viene visualizzata una sottochiave. %1 rappresenta il nome del file e %2 il nome della stampante.
HKEY_CLASSES_ROOT
.myp-ms
(Default) = MyProgram.1
MyProgram.1
(Default) = My Program Application
Shell
(Default) = doit
doit
(Default) = &Do It
command
(Default) = c:\MyDir\MyProgram.exe /d "%1"
open
command
(Default) = c:\MyDir\MyProgram.exe /d "%1"
print
command
(Default) = c:\MyDir\MyProgram.exe /p "%1"
printto
command
(Default) = c:\MyDir\MyProgram.exe /p "%1" "%2"
Il diagramma seguente illustra l'estensione del menu di scelta rapida in base alle voci del Registro di sistema precedenti. Questo menu di scelta rapida include i verbi Open, Do It e Print nel relativo menu, con Do It come verbo predefinito.
Attivazione del gestore tramite l'interfaccia IDropTarget
Dynamic Data Exchange (DDE) è deprecato; usare invece IDropTarget. IDropTarget è più affidabile e offre un supporto di attivazione migliore perché usa l'attivazione COM del gestore. Nel caso di selezione di più elementi, IDropTarget non è soggetto alle restrizioni relative alle dimensioni del buffer presenti sia in DDE che in CreateProcess. Inoltre, gli elementi vengono passati all'applicazione come oggetto dati che possono essere convertiti in una matrice di elementi usando la funzione SHCreateShellItemArrayFromDataObject. In questo modo è più semplice e non perde informazioni sullo spazio dei nomi, come avviene quando l'elemento viene convertito in un percorso per i protocolli della riga di comando o DDE.
Per altre informazioni sulle query IDropTarget e Shell per gli attributi di associazione di file, vedere Tipi percepiti e registrazione dell'applicazione.
Specifica della posizione e dell'ordine dei verbi statici
In genere i verbi vengono ordinati in un menu di scelta rapida in base alla modalità di enumerazione; L'enumerazione si basa innanzitutto sull'ordine della matrice di associazioni e quindi sull'ordine degli elementi nella matrice di associazione, come definito dall'ordinamento del Registro di sistema.
I verbi possono essere ordinati specificando il valore predefinito della sottochiave Shell per la voce di associazione. Questo valore predefinito può includere un singolo elemento, che verrà visualizzato nella posizione superiore del menu di scelta rapida o un elenco di elementi separati da spazi o virgole. Nel secondo caso, il primo elemento nell'elenco è l'elemento predefinito e gli altri verbi vengono visualizzati immediatamente sotto di esso nell'ordine specificato.
Ad esempio, la voce del Registro di sistema seguente produce verbi di menu di scelta rapida nell'ordine seguente:
- Schermo
- Gadget
- Personalization
HKEY_CLASSES_ROOT
DesktopBackground
Shell
Display
Gadgets
Personalization
Analogamente, la voce seguente del Registro di sistema produce verbi di menu di scelta rapida nell'ordine seguente:
- Personalization
- Gadget
- Schermo
HKEY_CLASSES_ROOT
DesktopBackground
Shell = "Personalization,Gadgets"
Display
Posizionamento dei verbi nella parte superiore o inferiore del menu
L'attributo del Registro di sistema seguente può essere usato per inserire un verbo nella parte superiore o inferiore del menu. Se sono presenti più verbi che specificano questo attributo, l'ultimo a tale scopo ottiene la priorità:
Position=Top | Bottom
Creazione di menu a catena statici
In Windows 7 e versioni successive, l'implementazione del menu a catena è supportata tramite le impostazioni del Registro di sistema. Prima di Windows 7, la creazione di menu a catena era possibile solo tramite l'implementazione dell'interfaccia IContextMenu . In Windows 7 e versioni successive è consigliabile ricorrere a soluzioni basate su codice COM solo quando i metodi statici non sono sufficienti.
La schermata seguente fornisce un esempio di menu a cascata.
In Windows 7 e versioni successive sono disponibili tre modi per creare menu a catena:
- Creazione di menu a catena con la voce del Registro di sistema Sottocomandi
- Creazione di menu a catena con la voce del Registro di sistema ExtendedSubCommandsKey
- Creazione di menu a catena con l'interfaccia IExplorerCommand
Creazione di menu a catena con la voce del Registro di sistema Sottocomandi
In Windows 7 e versioni successive è possibile usare la voce Sottocomandi per creare menu a catena usando la procedura seguente.
Per creare un menu a cascata usando la voce Sottocomandi
Creare una sottochiave in HKEY_CLASSES_ROOT\shell ProgID\per rappresentare il menu a catena. In questo esempio si assegna a questa sottochiave il nome CascadeTest. Verificare che il valore predefinito della sottochiave CascadeTest sia vuoto e visualizzato come (valore non impostato).
HKEY_CLASSES_ROOT * shell CascadeTest (Default)
Nella sottochiave CascadeTest aggiungere una voce MUIVerb di tipo REG_SZ e assegnargli il testo che verrà visualizzato come nome nel menu di scelta rapida. In questo esempio viene assegnato "Test Cascade Menu".
HKEY_CLASSES_ROOT * shell CascadeTest (Default) MUIVerb = Test Cascade Menu
Nella sottochiave CascadeTest aggiungere una voce SubCommands di tipo REG_SZ a cui è assegnato l'elenco, delimitato da punti e virgola, dei verbi che devono essere visualizzati nel menu, nell'ordine di aspetto. Ad esempio, qui viene assegnato un numero di verbi forniti dal sistema:
HKEY_CLASSES_ROOT * Shell CascadeTest SubCommands Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.paste
Nel caso di verbi personalizzati, implementarli usando uno dei metodi di implementazione del verbo statico ed elencarli sotto la sottochiave CommandStore , come illustrato in questo esempio per un verbo fittizio VerbName:
HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersion Explorer CommandStore Shell VerbName command (Default) = notepad.exe %1
Nota
Questo metodo offre il vantaggio che i verbi personalizzati possono essere registrati una sola volta e riutilizzati elencando il nome del verbo nella voce SubCommands. Tuttavia, è necessario che l'applicazione disponga dell'autorizzazione per modificare il Registro di sistema in HKEY_LOCAL_MACHINE.
Creazione di menu a catena con la voce del Registro di sistema ExtendedSubCommandsKey
In Windows 7 e versioni successive puoi usare la voce ExtendedSubCommandKey per creare menu a catena estesi: menu a catena all'interno di menu a catena.
La schermata seguente è un esempio di menu a cascata esteso.
Poiché HKEY_CLASSES_ROOT è una combinazione di HKEY_CURRENT_USER e HKEY_LOCAL_MACHINE, è possibile registrare qualsiasi verbo personalizzato nella sottochiave HKEY_CURRENT_USER\Classi software\. Il vantaggio principale di questa operazione è che l'autorizzazione con privilegi elevati non è necessaria. Inoltre, altre associazioni di file possono riutilizzare questo intero set di verbi specificando la stessa sottochiave ExtendedSubCommandsKey. Se non è necessario riutilizzare questo set di verbi, è possibile elencare i verbi sotto l'elemento padre, ma assicurarsi che il valore predefinito dell'elemento padre sia vuoto.
Per creare un menu a catena usando una voce ExtendedSubCommandsKey
Creare una sottochiave in HKEY_CLASSES_ROOT\shell ProgID\per rappresentare il menu a catena. In questo esempio si assegna a questa sottochiave il nome CascadeTest2. Verificare che il valore predefinito della sottochiave CascadeTest sia vuoto e visualizzato come (valore non impostato).
HKEY_CLASSES_ROOT * shell CascadeTest2 (Default)
Nella sottochiave CascadeTest aggiungere una voce MUIVerb di tipo REG_SZ e assegnargli il testo che verrà visualizzato come nome nel menu di scelta rapida. In questo esempio viene assegnato "Test Cascade Menu".
HKEY_CLASSES_ROOT * shell CascadeTest (Default) MUIVerb = Test Cascade Menu 2
Nella sottochiave CascadeTest creata aggiungere una sottochiave ExtendedSubCommandsKey e quindi aggiungere i sottocomandi del documento (di REG_SZ tipo); ad esempio:
HKEY_CLASSES_ROOT txtfile Shell Test Cascade Menu 2 (Default) ExtendedSubCommandsKey Layout Properties Select all
Verificare che il valore predefinito della sottochiave Test Cascade Menu 2 sia vuoto e visualizzato come (valore non impostato).
Popolare i subverbs usando una delle implementazioni di verbo statico seguenti. Si noti che la sottochiave CommandFlags rappresenta i valori EXPCMDFLAGS. Se si desidera aggiungere un separatore prima o dopo la voce di menu a catena, usare ECF_SEPARATORBEFORE (0x20) o ECF_SEPARATORAFTER (0x40). Per una descrizione di questi flag di Windows 7 e versioni successive, vedi IExplorerCommand::GetFlags. ECF_SEPARATORBEFORE funziona solo per le voci di menu di primo livello. MUIVerb è di tipo REG_SZ e CommandFlags è di tipo REG_DWORD.
HKEY_CLASSES_ROOT txtile Shell Test Cascade Menu 2 (Default) ExtendedSubCommandsKey Shell cmd1 MUIVerb = Notepad command (Default) = %SystemRoot%\system32\notepad.exe %1 cmd2 MUIVerb = Wordpad CommandFlags = 0x20 command (Default) = "C:\Program Files\Windows NT\Accessories\wordpad.exe" %1
La schermata seguente è un'illustrazione degli esempi di voci di chiave del Registro di sistema precedenti.
Creazione di menu a catena con l'interfaccia IExplorerCommand
Un'altra opzione per l'aggiunta di verbi a un menu a catena consiste nell'usare IExplorerCommand::EnumSubCommands. Questo metodo consente alle origini dati che forniscono i comandi del modulo di comando tramite IExplorerCommandProvider di usare tali comandi come verbi in un menu di scelta rapida. In Windows 7 e versioni successive puoi fornire la stessa implementazione del verbo usando IExplorerCommand come puoi usare IContextMenu.
Le due schermate seguenti illustrano l'uso di menu a catena nella cartella Dispositivi .
La schermata seguente illustra un'altra implementazione di un menu a cascata nella cartella Dispositivi .
Nota
Poiché IExplorerCommand supporta solo l'attivazione in-process, è consigliabile usare origini dati shell che devono condividere l'implementazione tra comandi e menu di scelta rapida.
Recupero del comportamento dinamico per i verbi statici tramite la sintassi di query avanzata
Sintassi query avanzata (AQS) può esprimere una condizione che verrà valutata usando le proprietà dell'elemento per cui viene creata un'istanza del verbo. Questo sistema funziona solo con proprietà veloci. Si tratta di proprietà che l'origine dati shell segnala il più velocemente non restituendo SHCOLSTATE_SLOW da IShellFolder2::GetDefaultColumnState.
Windows 7 e versioni successive supportano valori canonici che evitano problemi nelle build localizzate. Per sfruttare questo miglioramento di Windows 7, è necessaria la sintassi canonica seguente nelle build localizzate.
System.StructuredQueryType.Boolean#True
Nella voce del Registro di sistema di esempio seguente:
- Il valore AppliesTo controlla se il verbo viene visualizzato o nascosto.
- Il valore DefaultAppliesTo controlla il verbo predefinito.
- Il valore HasLUAShield controlla se viene visualizzata una schermata controllo dell'account utente.
In questo esempio il valore DefaultAppliesTo imposta questo verbo come predefinito per qualsiasi file con la parola "exampleText1" nel nome file. Il valore AppliesTo abilita il verbo per qualsiasi file con "exampleText1" nel nome. Il valore HasLUAShield visualizza lo scudo per i file con "exampleText2" nel nome.
HKEY_CLASSES_ROOT
txtile
shell
test.verb
DefaultAppliesTo = System.ItemName:"exampleText1"
HasLUAShield = System.ItemName:"exampleText2"
AppliesTo = System.ItemName:"exampleText1"
Aggiungere la sottochiave Command e un valore:
HKEY_CLASSES_ROOT
txtile
shell
test.verb
Command
(Default) = %SystemRoot%\system32\notepad.exe %1
Nel Registro di sistema di Windows 7, vedi HKEY_CLASSES_ROOT\unità come esempio di verbi bitlocker che usano l'approccio seguente:
- AppliesTo = System.Volume.BitlockerProtection:=2
- System.Volume.BitlockerRequiresAdmin:=System.StructuredQueryType.Boolean#True
Per altre informazioni su AQS, vedere Sintassi di query avanzate.
Deprecato: Associazione di verbi ai comandi di Dynamic Data Exchange
DDE è deprecato; usare invece IDropTarget. DDE è deprecato perché si basa su un messaggio della finestra di trasmissione per individuare il server DDE. Un server DDE blocca il messaggio della finestra di trasmissione e quindi blocca le conversazioni DDE per altre applicazioni. È comune che una singola applicazione bloccata causi blocchi successivi nell'esperienza dell'utente.
Il metodo IDropTarget è più affidabile e offre un supporto di attivazione migliore perché usa l'attivazione COM del gestore. Nel caso di selezione di più elementi, IDropTarget non è soggetto alle restrizioni relative alle dimensioni del buffer presenti sia in DDE che in CreateProcess. Inoltre, gli elementi vengono passati all'applicazione come oggetto dati che possono essere convertiti in una matrice di elementi usando la funzione SHCreateShellItemArrayFromDataObject. In questo modo è più semplice e non perde informazioni sullo spazio dei nomi, come avviene quando l'elemento viene convertito in un percorso per i protocolli della riga di comando o DDE.
Per altre informazioni sulle query IDropTarget e Shell per gli attributi di associazione di file, vedere Tipi percepiti e registrazione dell'applicazione.
Completamento delle attività di implementazione verbo
Le attività seguenti per l'implementazione dei verbi sono rilevanti per le implementazioni di verbi statici e dinamici. Per altre informazioni sui verbi dinamici, vedere Personalizzazione di un menu di scelta rapida tramite verbi dinamici.
Personalizzazione del menu di scelta rapida per oggetti shell predefiniti
Molti oggetti Shell predefiniti dispongono di menu di scelta rapida che possono essere personalizzati. Registrare il comando nello stesso modo in cui si registrano i tipi di file tipici, ma usare il nome dell'oggetto predefinito come nome del tipo di file.
Un elenco di oggetti predefiniti si trova nella sezione Oggetti shell predefiniti di Creazione di gestori di estensione della shell. Gli oggetti Shell predefiniti i cui menu di scelta rapida possono essere personalizzati aggiungendo verbi nel Registro di sistema sono contrassegnati nella tabella con la parola Verbo.
Estensione di un nuovo sottomenu
Quando un utente apre il menu File in Esplora risorse, uno dei comandi visualizzati è Nuovo. Selezionando questo comando viene visualizzato un sottomenu. Per impostazione predefinita, il sottomenu contiene due comandi, Folder e Shortcut, che consentono agli utenti di creare sottocartelle e collegamenti. Questo sottomenu può essere esteso per includere i comandi di creazione di file per qualsiasi tipo di file.
Per aggiungere un comando di creazione file al sottomenu Nuovo , i file dell'applicazione devono avere un tipo di file associato. Includere una sottochiave ShellNew sotto il nome del file. Quando si seleziona il comando Nuovo del menu File, shell aggiunge il tipo di file al sottomenu Nuovo. La stringa di visualizzazione del comando è la stringa descrittiva assegnata al ProgID del programma.
Per specificare il metodo di creazione del file, assegnare uno o più valori di dati alla sottochiave ShellNew . I valori disponibili sono elencati nella tabella seguente.
ShellNuovo valore della sottochiave | Descrizione |
---|---|
Comando | Esegue un'applicazione. Questo valore REG_SZ specifica il percorso dell'applicazione da eseguire. Ad esempio, è possibile impostarlo per avviare una procedura guidata. |
Dati | Crea un file contenente i dati specificati. Questo valore REG_BINARY specifica i dati del file. I dati vengono ignorati se viene specificato NullFile o FileName . |
FileName | Crea un file che rappresenta una copia di un file specificato. Questo valore REG_SZ specifica il percorso completo del file da copiare. |
NullFile | Crea un file vuoto. NullFile non ha assegnato alcun valore. Se si specifica NullFile , i valori del Registro di sistema Data e FileName vengono ignorati. |
L'esempio di chiave del Registro di sistema seguente e la schermata illustrano il sottomenu Nuovo per il tipo di file .myp-ms. Ha un comando, MyProgram Application.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
ShellNew
NullFile
Lo screenshot illustra il sottomenu Nuovo . Quando un utente seleziona MyProgram Application dal sottomenu Nuovo , shell crea un file denominato New MyProgram Application.myp-ms e lo passa a MyProgram.exe.
Creazione di gestori di trascinamento della selezione
La procedura di base per l'implementazione di un gestore di trascinamento della selezione è identica a quella dei gestori di menu di scelta rapida convenzionali. Tuttavia, i gestori di menu di scelta rapida usano in genere solo il puntatore IDataObject passato al metodo IShellExtInit::Initialize del gestore per estrarre il nome dell'oggetto. Un gestore di trascinamento della selezione potrebbe implementare un gestore dati più sofisticato per modificare il comportamento dell'oggetto trascinato.
Quando un utente fa clic con il pulsante destro del mouse su un oggetto Shell per trascinare un oggetto, viene visualizzato un menu di scelta rapida quando l'utente tenta di rilasciare l'oggetto. La schermata seguente illustra un tipico menu di scelta rapida di trascinamento della selezione.
Un gestore di trascinamento della selezione è un gestore di menu di scelta rapida che può aggiungere elementi a questo menu di scelta rapida. I gestori di trascinamento della selezione vengono in genere registrati nella sottochiave seguente.
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
Aggiungere una sottochiave sottochiave DragDropHandlers denominata per il gestore di trascinamento della selezione e impostare il valore predefinito della sottochiave sul formato stringa del GUID dell'identificatore di classe (CLSID) del gestore. Nell'esempio seguente viene abilitato il gestore di trascinamento della selezione MyDD .
HKEY_CLASSES_ROOT
Directory
shellex
DragDropHandlers
MyDD
(Default) = {MyDD CLSID GUID}
Eliminazione di verbi e controllo della visibilità
È possibile usare le impostazioni dei criteri di Windows per controllare la visibilità dei verbi. I verbi possono essere eliminati tramite le impostazioni dei criteri aggiungendo un valore SuppressPolicy o un valore GUID SuppressPolicyEx alla sottochiave del Registro di sistema del verbo. Impostare il valore della sottochiave SuppressionPolicy sull'ID criterio. Se il criterio è attivato, il verbo e la voce di menu di scelta rapida associata vengono eliminati. Per i possibili valori id criterio, vedere l'enumerazione RESTRICTIONS .
Uso del modello di selezione verbo
I valori del Registro di sistema devono essere impostati per i verbi per gestire le situazioni in cui un utente può selezionare un singolo elemento, più elementi o una selezione da un elemento. Un verbo richiede valori separati del Registro di sistema per ognuna di queste tre situazioni supportate dal verbo. I valori possibili per il modello di selezione verbo sono i seguenti:
- Specificare il valore MultiSelectModel per tutti i verbi. Se il valore MultiSelectModel non viene specificato, viene dedotto dal tipo di implementazione del verbo scelto. Per i metodi basati su COM (ad esempio DropTarget e ExecuteCommand) viene utilizzato Player e per gli altri metodi viene utilizzato Document .
- Specificare Single per i verbi che supportano solo una singola selezione.
- Specificare Player per i verbi che supportano un numero qualsiasi di elementi.
- Specificare Il documento per i verbi che creano una finestra di primo livello per ogni elemento. In questo modo si limita il numero di elementi attivati e si evita l'esaurimento delle risorse di sistema se l'utente apre troppe finestre.
Quando il numero di elementi selezionati non corrisponde al modello di selezione verbo o è maggiore dei limiti predefiniti descritti nella tabella seguente, il verbo non viene visualizzato.
Tipo di implementazione del verbo | Document | Player |
---|---|---|
Legacy | 15 elementi | 100 elementi |
COM | 15 elementi | Nessun limite |
Di seguito sono riportate le voci del Registro di sistema di esempio che usano il valore MultiSelectModel.
HKEY_CLASSES_ROOT
Folder
shell
open
= MultiSelectModel = Document
HKEY_CLASSES_ROOT
ProgID
shell
verb
= MultiSelectModel = Single | Document | Player
Uso degli attributi dell'elemento
I valori del flag SFGAO degli attributi shell per un elemento possono essere testati per determinare se il verbo deve essere abilitato o disabilitato.
Per usare questa funzionalità di attributo, aggiungere i valori REG_DWORD seguenti sotto il verbo:
- Il valore AttributeMask specifica il valore SFGAO dei valori di bit della maschera con cui eseguire il test.
- Il valore AttributeValue specifica il valore SFGAO dei bit testati.
- ImplicitSelectionModel specifica zero per i verbi elemento o diverso da zero per i verbi nel menu di scelta rapida in background.
Nella voce del Registro di sistema di esempio seguente, AttributeMask è impostato su SFGAO_READONLY (0x40000).
HKEY_CLASSES_ROOT
txtfile
Shell
test.verb2
AttributeMask = 0x40000
AttributeValue = 0x0
ImpliedSelectionModel = 0x0
command
(Default) = %SystemRoot%\system32\notepad.exe %1
Implementazione di verbi personalizzati per le cartelle tramite Desktop.ini
In Windows 7 e versioni successive è possibile aggiungere verbi a una cartella tramite Desktop.ini. Per altre informazioni sui file Desktop.ini, vedere Come personalizzare le cartelle con Desktop.ini.
Nota
Desktop.ini file devono essere sempre contrassegnati come Nascosto di sistema + in modo che non vengano visualizzati agli utenti.
Per aggiungere verbi personalizzati per le cartelle tramite un file di Desktop.ini, seguire questa procedura:
Creare una cartella contrassegnata come Sola lettura o Sistema.
Creare un file Desktop.ini che include [. ShellClassInfo] DirectoryClass=Folder ProgID.
Nel Registro di sistema creare HKEY_CLASSES_ROOT\ProgID cartella con il valore CanUseForDirectory. Il valore CanUseForDirectory evita l'uso improprio dei ProgID impostati per non partecipare all'implementazione di verbi personalizzati per le cartelle tramite Desktop.ini.
Aggiungere verbi sotto la sottochiave FolderProgID, ad esempio:
HKEY_CLASSES_ROOT CustomFolderType Shell MyVerb command (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
Nota
Questi verbi possono essere il verbo predefinito, nel qual caso facendo doppio clic sulla cartella viene attivato il verbo.
Argomenti correlati
-
Procedure consigliate per i gestori di menu di scelta rapida e più verbi di selezione
-
Scelta di un verbo statico o dinamico per il menu di scelta rapida
-
Personalizzazione di un menu di scelta rapida tramite verbi dinamici