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 del tipo di file. Questi gestori possono essere impelmentati in modo da causare il caricamento nel proprio processo o in esplora processi o altri processi di terze parti. Prestare attenzione quando si creano gestori in-process perché possono causare danni al processo che li carica.

Nota

Esistono considerazioni speciali per le versioni basate su 64 bit di Windows durante la registrazione dei gestori che funzionano nel contesto di applicazioni a 32 bit: quando viene richiamata nel contesto di un'applicazione di bitness 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

Le applicazioni sono in genere responsabili della fornitura di stringhe di visualizzazione localizzate per i verbi definiti. Tuttavia, per fornire un grado di indipendenza della lingua, 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 Apri in un sistema inglese e sull'equivalente tedesco in un sistema tedesco.

Verbo canonico Descrizione
Open 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 il foglio 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 i propri verbi canonici 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 disporre di comandi che non vengono comunemente usati o destinati agli 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 in base al 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 il tasto 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. Il valore non deve avere dati associati.

Verbi di 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 (oggetto SHELLEXECUTEINFO). Per definire un verbo come accesso a livello di codice, aggiungere un valore "ProgrammaticAccessOnly" REG_SZ alla sottochiave del verbo. Il valore non deve avere dati associati.

È 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. Il valore non deve avere dati associati.

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 rendendo il valore predefinito della sottochiave shell .

Il verbo predefinito viene visualizzato prima nel menu di scelta rapida. Lo scopo è fornire a 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:

  1. Verbo predefinito
  2. Primo verbo nel Registro di sistema, se viene specificato l'ordine verbo
  3. Verbo Aperto
  4. Verbo Open With

Se nessuno dei verbi elencati è disponibile, l'operazione ha esito negativo.

Creare una sottochiave per ogni verbo da aggiungere nella 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 Apri e Stampa, è 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 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, la relativa inclusione nel Registro di sistema consente all'utente di stampare i file eliminandoli in un'icona della stampante.
  • Viene visualizzata una sottochiave per ogni verbo. %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 sopra. Questo menu di scelta rapida include i verbi Open, Do It e Print nel relativo menu, con Do It come verbo predefinito.

schermata del menu di scelta rapida del 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 della selezione di più elementi, IDropTarget non è soggetto alle restrizioni relative alle dimensioni del buffer trovate 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 si verifica quando l'elemento viene convertito in un percorso per protocolli da riga di comando o DDE.

Per altre informazioni sulle query IDropTarget e Shell per gli attributi di associazione 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 prima sull'ordine della matrice di associazione e quindi sull'ordine degli elementi nella matrice di associazione, come definito dall'ordine 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. In quest'ultimo 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:

  1. Visualizza
  2. Gadget
  3. Personalization
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell
         Display
         Gadgets
         Personalization

Analogamente, la voce del Registro di sistema seguente produce verbi di menu di scelta rapida nell'ordine seguente:

  1. Personalization
  2. Gadget
  3. Visualizza
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 posizionare 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 cascata 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.

schermata che mostra 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 cascata con la voce del Registro di sistema SubCommands

In Windows 7 e versioni successive è possibile usare la voce SubCommands per creare menu a catena usando la procedura seguente.

Per creare un menu a cascata usando la voce SubCommands

  1. Creare una sottochiave in HKEY_CLASSES_ROOT\shellProgID\ per rappresentare il menu a catena. In questo esempio viene assegnata questa sottochiave il nome CascadeTest. Assicurarsi che il valore predefinito della sottochiave CascadeTest sia vuoto e visualizzato come (valore non impostato).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
    
  2. Nella sottochiave CascadeTest aggiungere una voce MUIVerb di tipo REG_SZ e assegnargli il testo 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
    
  3. Nella sottochiave CascadeTest aggiungere una voce SubCommands di tipo REG_SZ che viene assegnata all'elenco, demlimited 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
    
  4. Nel caso dei verbi personalizzati, implementarli usando uno dei metodi di implementazione del verbo statico e elencarli nella 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 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 è possibile usare la voce ExtendedSubCommandKey per creare menu a catena estesi: menu a catena all'interno di menu a catena.

Lo screenshot seguente è un esempio di menu a cascata esteso.

schermata che mostra il menu a cascata esteso per i dispositivi

Poiché HKEY_CLASSES_ROOT è una combinazione di HKEY_CURRENT_USER e HKEY_LOCAL_MACHINE, è possibile registrare tutti iverbi personalizzati nella sottochiave HKEY_CURRENT_USER\ classisoftware\. Il vantaggio principale di farlo è 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

  1. Creare una sottochiave in HKEY_CLASSES_ROOT\shellProgID\ per rappresentare il menu a catena. In questo esempio viene assegnata questa sottochiave il nome CascadeTest2. Assicurarsi che il valore predefinito della sottochiave CascadeTest sia vuoto e visualizzato come (valore non impostato).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest2
                (Default)
    
  2. Nella sottochiave CascadeTest aggiungere una voce MUIVerb di tipo REG_SZ e assegnargli il testo 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
    
  3. Nella sottochiave CascadeTest creata aggiungere una sottochiave ExtendedSubCommandsKey e quindi aggiungere le sottocomande del documento (di tipo REG_SZ ); Per esempio:

    HKEY_CLASSES_ROOT
       txtfile
          Shell
             Test Cascade Menu 2
                (Default)
                ExtendedSubCommandsKey
                   Layout
                   Properties
                   Select all
    

    Assicurarsi che il valore predefinito della sottochiave Test Cascade Menu 2 sia vuoto e visualizzato come (valore non impostato).

  4. Popolare i subverbs usando una delle implementazioni dei verbi statici seguenti. Si noti che la sottochiave CommandFlags rappresenta i valori EXPCMDFLAGS. Se si vuole 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, vedere 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.

screenshot che mostra un esempio di menu a cascata che mostra le scelte del blocco note e del wordpad

Creazione di menu a catena con l'interfaccia IExplorerCommand

Un'altra opzione per aggiungere verbi a un menu a catena è tramite IExplorerCommand::EnumSubCommands. Questo metodo abilita le origini dati che forniscono i comandi del modulo di comando tramite IExplorerCommandProvider per usare tali comandi come verbi in un menu di scelta rapida. In Windows 7 e versioni successive è possibile fornire la stessa implementazione verbo usando IExplorerCommand come è possibile con IContextMenu.

Le due schermate seguenti illustrano l'uso dei menu a catena nella cartella Dispositivi .

Screenshot che mostra un esempio di menu a catena nella cartella dispositivi.

La schermata seguente illustra un'altra implementazione di un menu a catena nella cartella Dispositivi .

schermata che mostra un esempio di menu a catena nella cartella dispositivi

Nota

Poiché IExplorerCommand supporta solo l'attivazione in-process, è consigliabile usare le origini dati shell che devono condividere l'implementazione tra comandi e menu di scelta rapida.

 

Recupero del comportamento dinamico per i verbi statici usando la sintassi di query avanzata

La sintassi di 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. Queste sono proprietà che l'origine dati shell segnala quanto più velocemente non restituisce SHCOLSTATE_SLOW da IShellFolder2::GetDefaultColumnState.

Windows 7 e versioni successive supportano valori canonici che evitano problemi nelle build localizzate. La sintassi canonica seguente è necessaria nelle build localizzate per sfruttare questo miglioramento di Windows 7.

System.StructuredQueryType.Boolean#True

Nella voce del Registro di sistema di esempio seguente:

  • Il valore ApplicasTo 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 account utente .

In questo esempio il valore DefaultAppliesTo rende il verbo predefinito per qualsiasi file con la parola "exampleText1" nel relativo nome file. Il valore ApplicasTo abilita il verbo per qualsiasi file con "exampleText1" nel nome. Il valore HasLUAShield visualizza lo schermo 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 Comando e un valore:

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            Command
               (Default) = %SystemRoot%\system32\notepad.exe %1

Nel Registro di sistema di Windows 7 vedereHKEY_CLASSES_ROOT'unità\ come esempio di verbi bitlocker che usano l'approccio seguente:

  • Si applica a = System.Volume.BitlockerProtection:=2
  • System.Volume.BitlockerRequiresAdmin:=System.StructuredQueryType.Boolean#True

Per altre informazioni su AQS, vedere Sintassi avanzata delle query.

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 si verifica 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 dei 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 gli 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 è disponibile 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 Verb.

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 di 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.

ShellNew subkey value 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 è 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 viene specificato 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 New 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.

screenshot di Esplora risorse che mostra un nuovo comando

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.

screenshot del 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 sotto la sottochiave DragDropHandlers denominata per il gestore di trascinamento della selezione e impostare il valore predefinito della sottochiave sul formato stringa del GUID CLSID (Class Identifier) 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 verbo scelto. Per i metodi basati su COM ,ad esempio DropTarget e ExecuteCommand, si presuppone che il lettore e per gli altri metodi 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 verbo Documento Lettore
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 di Desktop.ini, vedere Come personalizzare le cartelle con Desktop.ini.

Nota

Desktop.ini i file devono sempre esserecontrassegnati come Nascostodal 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:

  1. Creare una cartella contrassegnata come Sola lettura o Sistema.

  2. Creare un file Desktop.ini che include [. ShellClassInfo] DirectoryClass=Folder ProgID.

  3. Nel Registro di sistema creare HKEY_CLASSES_ROOT\ProgID cartella con un 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.

  4. Aggiungere verbi nella 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.

 

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

Menu di scelta rapida e gestori di menu di scelta rapida

Verbi e associazioni di file

Informazioni di riferimento sul menu di scelta rapida