Partilhar via


Criando manipuladores de menu de atalho

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

Observação

Existem considerações especiais para versões do Windows baseadas em 64 bits ao registar manipuladores que operam no contexto de aplicações de 32 bits: quando invocados no contexto de uma aplicação com diferente dimensão de bits, o subsistema WOW64 redireciona o acesso ao sistema de ficheiros para alguns caminhos. Se o manipulador de .exe estiver armazenado em um desses caminhos, ele não estará acessível neste contexto. Portanto, como uma solução alternativa, armazene seu .exe em um caminho que não seja redirecionado ou armazene uma versão stub do seu .exe que inicie a versão real.

Este tópico está organizado da seguinte forma:

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 canônico verb nunca é exibido para o usuário e pode ser usado com qualquer idioma da interface do usuário. O sistema usa o nome canônico para gerar automaticamente uma cadeia de exibição corretamente localizada. Por exemplo, a verbstring de exibição aberta é definida como Abrir em um sistema inglês e como o equivalente em alemão em um sistema alemão.

Canônico verb Descrição
Open Abre o arquivo ou 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 ao usuário imprimir um arquivo arrastando-o para um objeto de impressora.

Os manipuladores de menu de atalho podem fornecer os 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 membro passado para o IContextMenu::InvokeCommand método.

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 dar 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 são destinados a usuários experientes. Por esse motivo, você também pode definir um ou mais verbos estendidos. Estes verbos são semelhantes aos verbos normais, mas distinguem-se dos verbos normais pela forma como são registados. Para ter acesso aos 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 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 de Acesso Apenas 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 apenas, adicione um valor de REG_SZ "ProgrammaticAccessOnly" à subchave do 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 pressiona a tecla SHIFT. Para definir um verb como estendido, adicione um valor "estendido" de REG_SZ à 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 para o ProgID da aplicação associada ao tipo de ficheiro. 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 o Shell com um verb que ele pode usar quando a função ShellExecuteEx é chamada, mas não verb é especificado. O Shell não seleciona necessariamente o padrão verb quando ShellExecuteEx é usado dessa maneira.

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

  1. O padrão verb
  2. O primeiro verb no registo, caso a ordem verb 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 da subchave Shell. Cada uma dessas subchaves deve ter um valor REG_SZ definido como a cadeia de caracteres de exibição verb(cadeia de caracteres localizada). Para cada verb subchave, crie uma subchave de comando com o valor padrão definido para a linha de comando para ativar os 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 de registo seguinte, tenha em atenção 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. Este menu de atalho tem Open, Do It e Print verbos no seu menu, com Do It como verb predefinido.

Captura de ecrã do menu de atalho predefinido do

Ativando seu manipulador usando a interface IDropTarget

A Troca Dinâmica de Dados (DDE) está obsoleta; 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 DDE ou de linha de comando.

Para obter mais informações sobre IDropTarget e Shell consultas para atributos de associação de arquivo, 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 eles 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 Shell valor padrão da 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. Neste ú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 registo produz opções do menu de atalho na seguinte ordem:

  1. Ecrã
  2. Aparelhos
  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. Ecrã
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell = "Personalization,Gadgets"
      Display

Posicionando verbos na parte superior ou inferior do menu

O seguinte atributo do Registro 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 

Criação de menus estáticos em cascata

No Windows 7 e versões posteriores, a implementação do menu em cascata é suportada através das definições do registo. Antes do Windows 7, a criação de menus em cascata só era possível através da implementação do IContextMenu interface. No Windows 7 e posterior, você deve recorrer a soluções baseadas em código COM somente quando os métodos estáticos são 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 versões posteriores, 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 seu 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-lhe o texto que aparecerá como seu nome no menu de atalho. Neste exemplo, atribuímos a ele "Test Cascade Menu".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu
    
  3. Para sua subchave CascadeTest, adicione uma entrada SubCommands do tipo REG_SZ que foi atribuída uma lista, delimitada por ponto e vírgula, dos verbos que devem aparecer no menu, na ordem em que aparecem. Por exemplo, aqui atribuímos uma série de 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ática verb e liste-os na 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

Este método tem a vantagem de que os verbos personalizados podem ser registrados uma vez e reutilizados listando o verb nome na entrada SubCommands. No entanto, ele requer 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, é possível registar quaisquer verbos personalizados sob a subchave HKEY_CURRENT_USER\Software\Classes. A principal vantagem de fazer isso é que a permissão elevada não é necessária. Além disso, outras associações de arquivo 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 seu 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-lhe o texto que aparecerá como seu nome no menu de atalho. Neste exemplo, atribuímos a ele "Test Cascade Menu".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu 2
    
  3. Sob a 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
    

    Verifique se o valor padrão da subchave Test Cascade Menu 2 está vazio e mostrado como (valor não definido).

  4. Preencha os subvérbios usando qualquer uma das seguintes implementações estáticas verb . Observe que a subchave CommandFlags representa valores EXPCMDFLAGS. Se 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_SZe 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 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 é através IExplorerCommand::EnumSubCommands. Esse método permite que 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 capturas de ecrã seguintes ilustram o uso de menus em cascata na pasta Dispositivos.

Captura de tela que mostra um exemplo de um menu em cascata na pasta 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 o IExplorerCommand suporta apenas a ativação em processo, ele é recomendado para 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 o verb está sendo instanciado. Este sistema funciona apenas com propriedades rápidas. Essas são propriedades que a Shell fonte de dados considera rápidas por não retornar SHCOLSTATE_SLOW de IShellFolder2::GetDefaultColumnState.

O Windows 7 e versões posteriores suportam valores canônicos que evitam problemas em compilações localizadas. A sintaxe canônica a seguir é necessária em compilações localizadas para aproveitar esse aprimoramento do Windows 7.

System.StructuredQueryType.Boolean#True

No seguinte exemplo de entrada do Registro:

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

Neste exemplo, o valor DefaultAppliesTo torna isso verb o padrão para qualquer arquivo com a palavra "exampleText1" em seu nome de arquivo. O valor AppliesTo habilita o verb para qualquer arquivo com "exampleText1" no 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 registo do Windows 7, consulte HKEY_CLASSES_ROOT\drive 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 o AQS, consulte Sintaxe de consulta avançada.

Obsoleto: Associação de verbos a comandos de intercâmbio de dados dinâmicos

O DDE foi preterido; use IDropTarget em vez disso. O DDE foi preterido porque depende de uma mensagem de janela de difusão para descobrir o servidor DDE. Um servidor DDE interrompe a transmissão de mensagens da janela e, por conseguinte, interrompe conversas DDE com outros aplicativos. É comum que um único aplicativo preso 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 DDE ou de linha de comando.

Para obter mais informações sobre IDropTarget e Shell consultas para atributos de associação de arquivo, consulte Tipos percebidos e registro de aplicativo.

Concluindo Tarefas de Implementação Verb

As seguintes tarefas 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 Criando Shell manipuladores de extensão. Aqueles 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 arquivos 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 comando Novo do menu Arquivo é selecionado, o Shell adiciona o tipo de arquivo ao submenu Novo. A cadeia 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 são ignorados se for especificado NullFile ou FileName.
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.
Ficheiro Nulo Cria um arquivo vazio. NullFile não tem um valor atribuído. Se NullFile for especificado, os valores de registo Data e FileName serão ignorados.

 

O exemplo de chave do Registro a seguir e a captura de tela ilustram o submenu Novo para o tipo de arquivo .myp-ms. Tem 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 MyProgram Application no submenu Novo , o Shell cria um arquivo chamado New MyProgram Application.myp-ms e o passa para MyProgram.exe.

Captura de ecrã do Explorador do Windows a mostrar um novo comando

Criando manipuladores de arrastar e soltar

O procedimento básico para implementar um manipulador de arrastar e soltar é o mesmo que para 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 poderia 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 soltar 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 seguinte subchave.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers

Adicione uma subchave sob a subchave DragDropHandlers, nomeada de acordo com o manipulador de arrastar e soltar, e defina o valor padrão dessa subchave como a representação em forma de cadeia de caracteres do GUID do identificador de classe (CLSID) 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ítica do Windows para controlar verb a visibilidade. Os verbos podem ser suprimidos por meio de configurações de diretiva adicionando um valor SuppressionPolicy ou um valor SuppressionPolicyEx GUID à subchave de registo do verb. Defina o valor da subchave SuppressionPolicy para o ID da política. Se a política estiver ativada, o verb e o respetivo atalho de menu serão suprimidos. Para obter possíveis valores de ID de política, consulte a enumeração de restrições .

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. A verb requer valores de registo separados para cada uma destas três situações que o verb suporta. Os valores possíveis para o modelo de seleção são os verb seguintes:

  • Especifique o valor MultiSelectModel para todos os verbos. Se o valor MultiSelectModel não for especificado, ele será inferido a partir do tipo de verb implementação escolhido. Para métodos baseados em COM (como DropTarget e ExecuteCommand), assume-se Jogador, e para os outros métodos, assume-se Documento.
  • Especifique Único para verbos que apenas suportam uma seleção única.
  • Especifique o Player para verbos que suportam 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 verb modelo de seleção ou é maior do que os limites padrão descritos na tabela a seguir, o verb não aparece.

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

 

A seguir estão 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 itens

Os valores das flags SFGAO dos atributos de um item podem ser testados para determinar se o verb deve ser ativado ou desativado.

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 serem testados.
  • O valor AttributeValue especifica o valor de SFGAO dos bits que são testados.
  • O modelo ImpliedSelection especifica zero para verbos de elementos ou um valor diferente de zero para verbos no menu de atalho do plano de fundo.

No exemplo de entrada do Registro 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 através de Desktop.ini

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

Observação

Desktop.ini ficheiros devem estar sempre marcados System + Hidden para que não sejam apresentados aos utilizadores.

 

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

  1. Crie uma pasta marcada como apenas leitura ou sistema .

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

  3. No registro, crie HKEY_CLASSES_ROOT\pasta ProgID com um valor de CanUseForDirectory. O valor CanUseForDirectory evita o uso indevido de ProgIDs que estão definidos para não participar da implementação de verbos personalizados para pastas através 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, caso em que clicar duas vezes na pasta ativa o verb.

 

Práticas recomendadas para manipuladores de menu de atalho e verbos de seleção múltipla

Escolher um estático ou dinâmico Verb para o seu menu de atalho

Personalizando um menu de atalho usando verbos dinâmicos

Menus de atalho (contexto) e manipuladores de menu de atalho

Verbos e Associações de Arquivos

Menu de Atalho: Referência