Compartilhar via


Como Criar Manipuladores do Menu de Atalho

Manipuladores de menu de atalho, também conhecidos como manipuladores de menu de contexto ou verb handlers, são um tipo de manipulador de tipo de arquivo. Esses manipuladores podem ser implementados de uma forma que faça com que eles sejam carregados em seu próprio processo ou no explorer, ou em outros processos de terceiros. Tome cuidado ao criar manipuladores em processo, pois eles podem causar danos ao processo que os carrega.

Observação

Há considerações especiais para versões baseadas em 64 bits do Windows ao registrar manipuladores que funcionam no contexto de aplicativos de 32 bits: quando invocado no contexto de um aplicativo de bits diferentes, o subsistema WOW64 redireciona o acesso ao sistema de arquivos para alguns caminhos. Se o manipulador de .exe estiver armazenado em um desses caminhos, ele não estará acessível nesse contexto. Portanto, como solução alternativa, armazene seus .exe em um caminho que não seja redirecionado ou armazene uma versão stub do .exe que inicie a versão real.

Este tópico é organizado da seguinte maneira:

Verbos canônicos

Os aplicativos geralmente são responsáveis por fornecer cadeias de caracteres de exibição localizadas para os verbos que definem. No entanto, para fornecer um grau de independência linguística, o sistema define um conjunto padrão de verbos comumente usados chamados verbos canônicos. Um verb canônico nunca é exibido para o usuário e pode ser usado com qualquer idioma de interface do usuário. O sistema usa o nome canônico para gerar automaticamente uma cadeia de caracteres de exibição localizada corretamente. Por exemplo, a cadeia de caracteres de exibição aberta verbé definida como Abrir em um sistema inglês e para o equivalente alemão em um sistema alemão.

Canônico verb Descrição
Open Abre o arquivo ou a pasta.
Opennew Abre o arquivo ou pasta em uma nova janela.
Print Imprime o arquivo.
Printto Permite que o usuário imprima um arquivo arrastando-o para um objeto de impressora.
Explore Abre o Windows Explorer com a pasta selecionada.
Properties Abre a folha de propriedades do objeto.

Observação

O Printtoverb também é canônico, mas nunca é exibido. Sua inclusão permite que o usuário imprima um arquivo arrastando-o para um objeto de impressora.

Os manipuladores de menu de atalho podem fornecer seus próprios verbos canônicos por meio de IContextMenu::GetCommandString com GCS_VERBW ou GCS_VERBA. O sistema usará os verbos canônicos como o segundo parâmetro (lpOperation) passado para ShellExecute e é o CMINVOKECOMMANDINFO.lpVerb passado para o método IContextMenu::InvokeCommand .

Verbos estendidos

Quando o usuário clica com o botão direito do mouse em um objeto, o menu de atalho exibe os verbos padrão. Talvez você queira adicionar e oferecer suporte a comandos em alguns menus de atalho que não são exibidos em todos os menus de atalho. Por exemplo, você pode ter comandos que não são comumente usados ou que se destinam a usuários experientes. Por esse motivo, você também pode definir um ou mais verbos estendidos. Esses verbos são semelhantes aos verbos normais, mas se distinguem dos verbos normais pela forma como são registrados. Para ter acesso a verbos estendidos, o usuário deve clicar com o botão direito do mouse em um objeto enquanto pressiona a tecla SHIFT. Quando o usuário faz isso, os verbos estendidos são exibidos além dos verbos padrão.

Você pode usar o registro para definir um ou mais verbos estendidos. Os comandos associados serão exibidos somente quando o usuário clicar com o botão direito do mouse em um objeto enquanto também pressiona a tecla SHIFT. Para definir um verb como estendido, adicione um valor "estendido" REG_SZ à subchave de verb. O valor não deve ter nenhum dado associado a ele.

Verbos somente de acesso programático

Esses verbos nunca são exibidos em um menu de contexto. Eles podem ser acessados usando ShellExecuteEx e especificando o campo lpVerb do parâmetro pExecInfo (um objeto SHELLEXECUTEINFO ). Para definir um verb como acesso programático exclusivamente, adicione o valor REG_SZ "ProgrammaticAccessOnly" à subchave de verb. O valor não deve ter nenhum dado associado a ele.

Você pode usar o registro para definir um ou mais verbos estendidos. Os comandos associados serão exibidos somente quando o usuário clicar com o botão direito do mouse em um objeto enquanto também pressiona a tecla SHIFT. Para definir um verb como estendido, adicione um valor REG_SZ "estendido" à subchave de verb. O valor não deve ter nenhum dado associado a ele.

Personalizando um menu de atalho usando verbos estáticos

Depois de escolher um estático ou dinâmico Verb para o menu de atalho, você pode estender o menu de atalho para um tipo de arquivo registrando uma estática verb para o tipo de arquivo. Para fazer isso, adicione uma subchave Shell abaixo da subchave do ProgID do aplicativo associado ao tipo de arquivo. Opcionalmente, você pode definir um padrão verb para o tipo de arquivo tornando-o o valor padrão da Shell subchave.

O padrão verb é exibido primeiro no menu de atalho. Sua finalidade é fornecer ao Shell um verb que ele pode usar quando a função ShellExecuteEx é chamada, mas nenhum verb é especificado. O Shell não seleciona necessariamente o padrão verb quando ShellExecuteEx é usado dessa forma.

O Shell usa o primeiro disponível verb na seguinte ordem:

  1. O padrão verb
  2. O primeiro verb na base de dados, caso a verb ordem seja especificada
  3. O Openverb
  4. O Open Withverb

Se nenhum dos verbos listados estiver disponível, a operação falhará.

Crie uma subchave para cada verb que você deseja adicionar debaixo de Shell. Cada uma dessas subchaves deve ter um valor REG_SZ definido para o texto de exibição verb (texto localizado). Para cada verb subchave, crie uma subchave de comando com o valor por padrão ajustado para a linha de comando destinada à ativação dos itens. Para verbos canônicos, como Open e Print, você pode omitir a cadeia de caracteres de exibição porque o sistema exibe automaticamente uma cadeia de caracteres localizada corretamente. Para verbos não canônicos, se você omitir a cadeia de caracteres de exibição, a verb cadeia de caracteres será exibida.

No exemplo do Registro a seguir, observe que:

  • Como Doit não é canônico verb, é atribuído um nome de exibição, que pode ser selecionado pressionando a tecla D.
  • O Printtoverb não aparece no menu de atalho. No entanto, sua inclusão no registro permite que o usuário imprima arquivos soltando-os em um ícone de impressora.
  • Uma subchave é mostrada para cada verb. %1 representa o nome do arquivo e %2 o nome da impressora.
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"

O diagrama a seguir ilustra a extensão do menu de atalho de acordo com as entradas do Registro acima. Esse menu de atalho tem Open, Do Ite Print verbos em seu menu, com Do It como o padrão verb.

captura de tela do menu de atalho

Ativando o manipulador usando a interface IDropTarget

O DDE (Dynamic Data Exchange) foi preterido; use IDropTarget em vez disso. IDropTarget é mais robusto e tem melhor suporte à ativação porque usa a ativação COM do manipulador. No caso de seleção de vários itens, IDropTarget não está sujeito às restrições de tamanho do buffer encontradas no DDE e no CreateProcess. Além disso, os itens são passados para o aplicativo como um objeto de dados que pode ser convertido em uma matriz de itens usando a função SHCreateShellItemArrayFromDataObject . Fazer isso é mais simples e não perde informações de namespace como ocorre quando o item é convertido em um caminho para protocolos de linha de comando ou DDE.

Para obter mais informações sobre iDropTarget e Shell consultas para atributos de associação de arquivos, consulte Tipos Percebidos e Registro de Aplicativo.

Especificando a posição e a ordem dos verbos estáticos

Normalmente, os verbos são ordenados em um menu de atalho com base em como são enumerados; A enumeração é baseada primeiro na ordem da matriz de associação e, em seguida, na ordem dos itens na matriz de associação, conforme definido pela ordem de classificação do Registro.

Os verbos podem ser ordenados especificando o valor padrão da Shell subchave para a entrada de associação. Esse valor padrão pode incluir um único item, que será exibido na posição superior do menu de atalho, ou uma lista de itens separados por espaços ou vírgulas. No último caso, o primeiro item da lista é o item padrão e os outros verbos são exibidos imediatamente abaixo dele na ordem especificada.

Por exemplo, a seguinte entrada do Registro produz verbos de menu de atalho na seguinte ordem:

  1. Exibição
  2. Dispositivos
  3. Personalização
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell
         Display
         Gadgets
         Personalization

Da mesma forma, a seguinte entrada do Registro produz verbos de menu de atalho na seguinte ordem:

  1. Personalização
  2. Dispositivos
  3. Exibição
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell = "Personalization,Gadgets"
      Display

Posicionando verbos na parte superior ou inferior do menu

O atributo do Registro a seguir pode ser usado para colocar um verb na parte superior ou inferior do menu. Se houver vários verbos que especificam esse atributo, o último a fazê-lo terá prioridade:

Position=Top | Bottom 

Criando menus estáticos em cascata

No Windows 7 e posterior, a implementação do menu em cascata é suportada por meio das configurações do Registro. Antes do Windows 7, a criação de menus em cascata só era possível por meio da implementação da interface IContextMenu. No Windows 7 e posterior, você deve recorrer a soluções baseadas em código COM somente quando os métodos estáticos forem insuficientes.

A captura de tela a seguir fornece um exemplo de um menu em cascata.

Captura de tela mostrando um exemplo de um menu em cascata

No Windows 7 e posterior, há três maneiras de criar menus em cascata:

Criando menus em cascata com a entrada do Registro SubCommands

No Windows 7 e posterior, você pode usar a entrada SubCommands para criar menus em cascata usando o procedimento a seguir.

Para criar um menu em cascata usando a entrada SubCommands

  1. Crie uma subchave em HKEY_CLASSES_ROOT\ProgID\shell para representar o menu em cascata. Neste exemplo, damos a essa subchave o nome CascadeTest. Verifique se o valor padrão da subchave CascadeTest está vazio e mostrado como (valor não definido).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
    
  2. Para sua subchave CascadeTest , adicione uma entrada MUIVerb do tipo REG_SZ e atribua a ela o texto que aparecerá como seu nome no menu de atalho. Neste exemplo, atribuímos a ele "Menu em cascata de teste".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu
    
  3. Para sua subchave CascadeTest , adicione uma entrada SubCommands do tipo REG_SZ que é atribuída lista, delimitada por ponto-e-vírgula, dos verbos que devem aparecer no menu, na ordem de aparecimento. Por exemplo, aqui atribuímos vários verbos fornecidos pelo sistema:

    HKEY_CLASSES_ROOT
       *
          Shell
             CascadeTest
                SubCommands
                Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.paste
    
  4. No caso de verbos personalizados, implemente-os usando qualquer um dos métodos de implementação estáticos verb e liste-os sob a subchave CommandStore, conforme mostrado neste exemplo para um VerbName fictícioverb:

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      CommandStore
                         Shell
                            VerbName
                            command
                               (Default) = notepad.exe %1
    

Observação

Esse método tem a vantagem de que os verbos personalizados podem ser registrados uma vez e reutilizados listando o verb nome na entrada SubComandos. No entanto, exige que o aplicativo tenha permissão para modificar o registro sob HKEY_LOCAL_MACHINE.

 

Criando menus em cascata com a entrada do Registro ExtendedSubCommandsKey

No Windows 7 e posterior, você pode usar a entrada ExtendedSubCommandKey para criar menus em cascata estendidos: menus em cascata dentro de menus em cascata.

A captura de tela a seguir é um exemplo de um menu em cascata estendido.

Captura de tela mostrando o menu em cascata estendido para dispositivos

Como HKEY_CLASSES_ROOT é uma combinação de HKEY_CURRENT_USER e HKEY_LOCAL_MACHINE, você pode registrar qualquer verbo personalizado na subchave HKEY_CURRENT_USER\\. A principal vantagem de fazer isso é que a permissão elevada não é necessária. Além disso, outras associações de arquivos podem reutilizar todo esse conjunto de verbos especificando a mesma subchave ExtendedSubCommandsKey. Se você não precisar reutilizar esse conjunto de verbos, poderá listar os verbos sob o pai, mas verifique se o valor Padrão do pai está vazio.

Para criar um menu em cascata usando uma entrada ExtendedSubCommandsKey

  1. Crie uma subchave em HKEY_CLASSES_ROOT\ProgID\shell para representar o menu em cascata. Neste exemplo, damos a essa subchave o nome CascadeTest2. Verifique se o valor padrão da subchave CascadeTest está vazio e mostrado como (valor não definido).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest2
                (Default)
    
  2. Para sua subchave CascadeTest , adicione uma entrada MUIVerb do tipo REG_SZ e atribua a ela o texto que aparecerá como seu nome no menu de atalho. Neste exemplo, atribuímos a ele "Menu em cascata de teste".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu 2
    
  3. Na subchave CascadeTest que você criou, adicione uma subchave ExtendedSubCommandsKey e, em seguida, adicione os subcomandos do documento (de REG_SZ tipo); por exemplo:

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

    Certifique-se de que o valor padrão da subchave do Menu 2 da Cascata de Teste esteja vazio e mostrado como (valor não definido).

  4. Preencha os subverbos usando qualquer uma das seguintes implementações estáticas verb . Observe que a subchave CommandFlags representa valores EXPCMDFLAGS. Se você quiser adicionar um separador antes ou depois do item de menu em cascata, use ECF_SEPARATORBEFORE (0x20) ou ECF_SEPARATORAFTER (0x40). Para obter uma descrição desses sinalizadores do Windows 7 e posteriores, consulte IExplorerCommand::GetFlags. ECF_SEPARATORBEFORE funciona apenas para os itens de menu de nível superior. MUIVerb é do tipo REG_SZ e CommandFlags é do 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
    

A captura de tela a seguir é uma ilustração dos exemplos anteriores de entrada de chave do Registro.

Captura de tela mostrando um exemplo de um menu em cascata mostrando as opções de bloco de notas e wordpad

Criando menus em cascata com a interface IExplorerCommand

Outra opção para adicionar verbos a um menu em cascata é por meio de IExplorerCommand::EnumSubCommands. Esse método permite que as fontes de dados que fornecem seus comandos de módulo de comando por meio de IExplorerCommandProvider usem esses comandos como verbos em um menu de atalho. No Windows 7 e posterior, você pode fornecer a mesma verb implementação usando IExplorerCommand como você pode com IContextMenu.

As duas capturas de tela a seguir ilustram o uso de menus em cascata na pasta Dispositivos .

Captura de tela que mostra um exemplo de um menu em cascata na pasta de dispositivos.

A captura de tela a seguir ilustra outra implementação de um menu em cascata na pasta Dispositivos .

Captura de tela mostrando um exemplo de um menu em cascata na pasta Dispositivos

Observação

Como IExplorerCommand oferece suporte apenas à ativação em processo, é recomendável seu uso por Shell fontes de dados que precisam compartilhar a implementação entre comandos e menus de atalho.

 

Obtendo comportamento dinâmico para verbos estáticos usando sintaxe de consulta avançada

A Sintaxe de Consulta Avançada (AQS) pode expressar uma condição que será avaliada usando propriedades do item para o qual a verb instância está sendo instanciada. Este sistema funciona apenas com propriedades rápidas. Estas são propriedades que a Shell fonte de dados relata como rápidas ao não retornar SHCOLSTATE_SLOW de IShellFolder2::GetDefaultColumnState.

Windows 7 e posteriores dão suporte a valores canônicos que evitam problemas em builds localizados. A sintaxe canônica a seguir é necessária em builds localizados para aproveitar esse aprimoramento do Windows 7.

System.StructuredQueryType.Boolean#True

No exemplo de entrada do Registro a seguir:

  • O valor AppliesTo controla se o verb valor é exibido ou oculto.
  • O valor DefaultAppliesTo controla qual verb é o padrão por defeito.
  • O valor HasLUAShield controla se um escudo UAC (Controle de Conta de Usuário) é exibido.

Neste exemplo, o valor DefaultAppliesTo torna esse verb o padrão para qualquer arquivo com a palavra "exampleText1" em seu nome de arquivo. O valor AppliesTo permite o verb para arquivos que contenham "exampleText1" em seu nome. O valor HasLUAShield exibe o escudo para arquivos com "exampleText2" no nome.

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            DefaultAppliesTo = System.ItemName:"exampleText1"
            HasLUAShield = System.ItemName:"exampleText2"
            AppliesTo = System.ItemName:"exampleText1"

Adicione a subchave Command e um valor:

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

No registro do Windows 7, consulte HKEY_CLASSES_ROOT\unidade como um exemplo de verbos bitlocker que empregam a seguinte abordagem:

  • AppliesTo = System.Volume.BitlockerProtection:=2
  • System.Volume.BitlockerRequiresAdmin:=System.StructuredQueryType.Boolean#True

Para obter mais informações sobre AQS, consulte Sintaxe de consulta avançada.

Preterido: Associando verbos a comandos dinâmicos de troca de dados

O DDE foi preterido; use IDropTarget em vez disso. O DDE foi preterido porque depende de uma mensagem de janela de broadcast para descobrir o servidor DDE. Um travamento do servidor DDE interrompe a mensagem da janela de transmissão e, portanto, trava as conversas DDE para outros aplicativos. É comum que um único aplicativo travado cause travamentos subsequentes em toda a experiência do usuário.

O método IDropTarget é mais robusto e tem melhor suporte à ativação porque usa a ativação COM do manipulador. No caso de seleção de vários itens, IDropTarget não está sujeito às restrições de tamanho do buffer encontradas no DDE e no CreateProcess. Além disso, os itens são passados para o aplicativo como um objeto de dados que pode ser convertido em uma matriz de itens usando a função SHCreateShellItemArrayFromDataObject . Fazer isso é mais simples e não perde informações de namespace como ocorre quando o item é convertido em um caminho para protocolos de linha de comando ou DDE.

Para obter mais informações sobre iDropTarget e Shell consultas para atributos de associação de arquivos, consulte Tipos Percebidos e Registro de Aplicativo.

Concluindo tarefas de implementação de Verb

As tarefas a seguir para implementar verbos são relevantes para implementações estáticas e dinâmicas verb . Para obter mais informações sobre verbos dinâmicos, consulte Personalizando um menu de atalho usando verbos dinâmicos.

Personalizando o menu de atalho para objetos predefinidos Shell

Muitos objetos predefinidos Shell têm menus de atalho que podem ser personalizados. Registre o comando da mesma forma que você registra tipos de arquivo típicos, mas use o nome do objeto predefinido como o nome do tipo de arquivo.

Uma lista de objetos predefinidos está na seção Objetos Predefinidos Shell de Criação Shell de Manipuladores de Extensão. Esses objetos predefinidos Shell cujos menus de atalho podem ser personalizados adicionando verbos no registro são marcados na tabela com a palavra Verb.

Estendendo um novo submenu

Quando um usuário abre o menu Arquivo no Windows Explorer, um dos comandos exibidos é Novo. Selecionar este comando exibe um submenu. Por padrão, o submenu contém dois comandos, Pasta e Atalho, que permitem aos usuários criar subpastas e atalhos. Este submenu pode ser estendido para incluir comandos de criação de arquivo para qualquer tipo de arquivo.

Para adicionar um comando de criação de arquivo ao submenu Novo , os arquivos do aplicativo devem ter um tipo de arquivo associado. Inclua uma subchave ShellNew sob o nome do arquivo. Quando o comandoNovo do menu Arquivo é selecionado, ele Shell adiciona o tipo de arquivo ao novo submenu. A cadeia de caracteres de exibição do comando é a cadeia de caracteres descritiva atribuída ao ProgID do programa.

Para especificar o método de criação de arquivo, atribua um ou mais valores de dados à subchave ShellNew . Os valores disponíveis estão listados na tabela a seguir.

Valor da subchave ShellNew Descrição
Comando Executa um aplicativo. Esse valor REG_SZ especifica o caminho do aplicativo a ser executado. Por exemplo, você pode configurá-lo para iniciar um assistente.
Dados Cria um arquivo contendo dados especificados. Esse valor REG_BINARY especifica os dados do arquivo. Os dados serão ignorados se NullFile ou FileName for especificado.
Nome do Arquivo Cria um arquivo que é uma cópia de um arquivo especificado. Esse valor REG_SZ especifica o caminho totalmente qualificado do arquivo a ser copiado.
Arquivo nulo Cria um arquivo vazio. NullFile não tem um valor atribuído. Se NullFile for especificado, os valores do Registro Data e FileName serão ignorados.

 

O exemplo de chave do Registro e a captura de tela a seguir ilustram o submenu Novo para o tipo de arquivo .myp-ms. Possui um comando, MyProgram Application.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
         NullFile

A captura de tela ilustra o submenu Novo . Quando um usuário seleciona o Aplicativo MyProgram no novo submenu, ele Shell cria um arquivo chamado Novo Aplicativo MyProgram.myp-ms e o passa para MyProgram.exe.

Captura de tela do Windows Explorer mostrando um novo comando

Criando manipuladores de arrastar e soltar

O procedimento básico para implementar um manipulador de arrastar e soltar é o mesmo dos manipuladores de menu de atalho convencionais. No entanto, os manipuladores de menu de atalho normalmente usam apenas o ponteiro IDataObject passado para o método IShellExtInit::Initialize do manipulador para extrair o nome do objeto. Um manipulador de arrastar e soltar pode implementar um manipulador de dados mais sofisticado para modificar o comportamento do objeto arrastado.

Quando um usuário clica com o botão direito do mouse em um Shell objeto para arrastar um objeto, um menu de atalho é exibido quando o usuário tenta remover o objeto. A captura de tela a seguir ilustra um menu de atalho típico de arrastar e soltar.

Captura de tela do menu de atalho de arrastar e soltar

Um manipulador de arrastar e soltar é um manipulador de menu de atalho que pode adicionar itens a esse menu de atalho. Os manipuladores de arrastar e soltar normalmente são registrados na subchave a seguir.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers

Adicione uma subchave na subchave DragDropHandlers nomeada para o manipulador de arrastar e soltar e defina o valor padrão da subchave como a forma de cadeia de caracteres do GUID do CLSID (identificador de classe) do manipulador. O exemplo a seguir habilita o manipulador de arrastar e soltar MyDD .

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

Suprimindo verbos e controlando a visibilidade

Você pode usar as configurações de políticas do Windows para controlar a visibilidade de verb. Os verbos podem ser suprimidos por meio de configurações de política adicionando um valor SuppressionPolicy ou um valor GUID SuppressionPolicyEx à subchave do registro verb. Defina o valor da subchave SuppressionPolicy como a ID da política. Se a política estiver ativada, a entrada do menu de atalho associada ao verb será suprimida. Para obter possíveis valores de ID de política, consulte a enumeração RESTRICTIONS.

Empregando o Verb modelo de seleção

Os valores do Registro devem ser definidos para verbos para lidar com situações em que um usuário pode selecionar um único item, vários itens ou uma seleção de um item. Um verb requer valores de registro separados para cada uma dessas três situações que o verb suporta. Os valores possíveis para o verb modelo de seleção são os seguintes:

  • Especifique o valor MultiSelectModel para todos os verbos. Se o valor MultiSelectModel não for especificado, ele será inferido do tipo de verb implementação que você escolheu. Para métodos baseados em COM (como DropTarget e ExecuteCommand), Player é assumido e para os outros métodos , Document é assumido.
  • Especifique Single para verbos que dão suporte a apenas uma única seleção.
  • Especifique Player para verbos que dão suporte a qualquer número de itens.
  • Especifique Documento para verbos que criam uma janela de nível superior para cada item. Isso limita o número de itens ativados e ajuda a evitar a falta de recursos do sistema se o usuário abrir muitas janelas.

Quando o número de itens selecionados não corresponde ao modelo de seleção verb ou é maior que os limites padrão descritos na tabela a seguir, o verb não aparece.

Tipo de verb implementação Documento Jogador
Herdada 15 itens 100 itens
COM 15 itens Sem limite

 

Veja a seguir exemplos de entradas do Registro usando o valor MultiSelectModel.

HKEY_CLASSES_ROOT
   Folder
      shell
         open
             = MultiSelectModel = Document
HKEY_CLASSES_ROOT
   ProgID
      shell
         verb
             = MultiSelectModel = Single | Document | Player

Usando atributos de item

Os valores de sinalizador SFGAO dos atributos de Shell de um item podem ser testados para determinar se verb deve ser habilitado ou desabilitado.

Para usar esse recurso de atributo, adicione os seguintes valores de REG_DWORD em verb:

  • O valor AttributeMask especifica o valor SFGAO dos valores de bit da máscara a ser testada.
  • O valor AttributeValue especifica o valor SFGAO dos bits que são testados.
  • O ImpliedSelectionModel especifica zero para verbos de item ou diferente de zero para verbos no menu de atalho em segundo plano.

Na entrada do Registro de exemplo a seguir, o AttributeMask é definido como SFGAO_READONLY (0x40000).

HKEY_CLASSES_ROOT
   txtfile
      Shell
         test.verb2
            AttributeMask = 0x40000
            AttributeValue = 0x0
            ImpliedSelectionModel = 0x0
            command
               (Default) = %SystemRoot%\system32\notepad.exe %1

Implementando verbos personalizados para pastas por meio de Desktop.ini

No Windows 7 e posterior, você pode adicionar verbos a uma pasta por meio Desktop.ini. Para obter mais informações sobre arquivos Desktop.ini, consulte Como personalizar pastas com Desktop.ini.

Observação

Desktop.ini arquivos devem sempre ser marcados como Ocultos do Sistema + para que não sejam exibidos aos usuários.

 

Para adicionar verbos personalizados para pastas por meio de um arquivo Desktop.ini, execute as seguintes etapas:

  1. Crie uma pasta marcada como Somente leitura ou Sistema.

  2. Crie um arquivo Desktop.ini que inclua um arquivo [. ShellClassInfo] DirectoryClass=Pasta ProgID.

  3. No registro, crie HKEY_CLASSES_ROOT\ProgID de pasta com um valor de CanUseForDirectory. O valor CanUseForDirectory evita o uso indevido de ProgIDs definidos para não participar da implementação de verbos personalizados para pastas por meio de Desktop.ini.

  4. Adicione verbos na subchave FolderProgID, por exemplo:

    HKEY_CLASSES_ROOT
       CustomFolderType
          Shell
             MyVerb
                command
                   (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
    

Observação

Esses verbos podem ser o padrão verb, nesse caso, clicar duas vezes na pasta ativa o verb.

 

Melhores Práticas para Manipuladores de Menu de Atalho e Vários Verbos de Seleção

Escolhendo um elemento estático ou dinâmico Verb para o menu de atalho

Personalizar um Menu de Atalho usando Verbos Dinâmicos

Menus de Atalho (Contexto) e Manipuladores de Menu de Atalho

Associações de Verbos e Arquivos

Referência do Menu de Atalho