Condividi tramite


Creazione di gestori di menu di scelta rapida

I gestori di menu di scelta rapida, noti anche come gestori di menu contestuale o gestori di verbi, sono un tipo di gestore dei tipi di file. Questi gestori possono essere implementati in modo da farli caricare nel proprio processo, nel processo di l'Esplora risorse o in altri processi di terze parti. Prestare attenzione quando si creano gestori in-processo 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

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.
Printto Consente all'utente di stampare un file trascinandolo in un oggetto stampante.
Esplora Apre Esplora file 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 accessibili solo tramite programmazione

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:

  1. Verbo predefinito
  2. Primo verbo nel Registro di sistema, se viene specificato l'ordine del verbo
  3. Verbo Open
  4. Il comando Apri con

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

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

screenshot del menu di scelta rapida del verbo predefinito

Attivazione del gestore tramite l'interfaccia IDropTarget

Dynamic Data Exchange (DDE) è deprecato; usare IDropTarget invece. 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ù facile e non perde informazioni sullo spazio dei nomi, come avviene quando l'elemento viene convertito in un percorso per la riga di comando o i protocolli DDE.

Per ulteriori informazioni su IDropTarget e sulle query di Shell per gli attributi di associazione dei file, consultare Tipi percepiti e registrazione delle applicazioni.

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

È possibile ordinare i verbi specificando il valore di default 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:

  1. Schermo
  2. Gadget
  3. Personalizzazione
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:

  1. Personalizzazione
  2. Gadget
  3. 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.

screenshot 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 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

  1. Creare una sottochiave in HKEY_CLASSES_ROOT\ProgID\shell per rappresentare il tuo menu a cascata. 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)
    
  2. 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, gli assegniamo "Menu a cascata di prova".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu
    
  3. 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
    
  4. 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 cascata con la voce di registro 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.

istantanea dello schermo 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 qualsiasi verbo personalizzato nella sottochiave HKEY_CURRENT_USER\Software\Classes. 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 cascata usando una voce ExtendedSubCommandsKey

  1. Creare una sottochiave in HKEY_CLASSES_ROOT\ProgID\shell per rappresentare il menu a cascata. 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)
    
  2. 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, gli assegniamo "Menu a cascata di prova".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu 2
    
  3. Nella sottochiave CascadeTest che hai creato, aggiungi una sottochiave ExtendedSubCommandsKey e quindi aggiungi i sottocomandi del documento (del tipo REG_SZ); 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).

  4. Popolare i sottoverbi usando una delle implementazioni statiche dei verbi 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.

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

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

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

screenshot che mostra un esempio di menu a cascata nella cartella devices

Nota

Poiché IExplorerCommand supporta solo l'attivazione in-process, è raccomandato per l'uso da parte delle origini dati shell che devono condividere l'implementazione tra comandi e menu di scelta rapida.

 

Ottenere un comportamento dinamico per i verbi statici tramite la sintassi avanzata delle query

Sintassi query avanzata (AQS) può esprimere una condizione che verrà valutata usando le proprietà dell'elemento per il quale il verbo viene istanziato. Questo sistema funziona solo con proprietà veloci. Si tratta di proprietà che l'origine dati shell segnala come veloci, 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 visualizzato uno scudo Controllo dell'account utente (UAC).

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, consulta HKEY_CLASSES_ROOT\drive 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 dello Scambio Dinamico di Dati

DDE è deprecato; utilizzare IDropTarget invece. 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 risulta più semplice e non perde informazioni sul namespace, come avviene quando l'elemento viene convertito in un percorso per i protocolli della riga di comando o DDE.

Per ulteriori informazioni su IDropTarget e sulle query del Shell relative agli attributi di associazione di file, consultare Tipi percepiti e registrazione delle applicazioni.

Completamento delle attività di implementazione dei verbi

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.

screenshot di Esplora file che mostra un nuovo comando

Creazione di elementi di trascina e rilascia

La procedura di base per l'implementazione di un gestore di drag-and-drop è la stessa di 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 drag-and-drop 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 seguente screenshot illustra un tipico menu di scelta rapida drag-and-drop.

screenshot del menu di scelta rapida drag-and-drop

Un gestore di trascinamento della selezione è un gestore di menu di scelta rapida che può aggiungere opzioni a questo menu di scelta rapida. I gestori del trascinamento e rilascio vengono in genere registrati nella sottochiave seguente.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers

Aggiungere una sottochiave sotto DragDropHandlers denominata dal nome del gestore di trascinamento della selezione e impostare il valore predefinito della sottochiave sul formato stringa del GUID dell'identificatore di classe (CLSID) del gestore. Il seguente esempio abilita il gestore di trascinamento della selezione MyDD.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers
            MyDD
               (Default) = {MyDD CLSID GUID}

Soppressione 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 politica. Se il criterio è attivato, il verbo e la voce di menu di scelta rapida associata vengono eliminati. Per i possibili valori ID criterio, consultare l'enumerazione RESTRICTIONS.

Impiego del modello di selezione dei verbi

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 Documento Giocatore
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.
  • Il modello ImpliedSelectionModel specifica zero per le azioni sugli elementi, o un valore diverso da zero per le azioni 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:

  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\Folder ProgID 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.

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

 

Procedure consigliate per i gestori di menu di scelta rapida e verbi per selezioni multiple

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