Como Criar Manipuladores do Menu de Atalho
Os manipuladores de menu de atalho, também conhecidos como manipuladores de menu de contexto ou manipuladores de verbos, 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
- Verbos estendidos
- Verbos somente de acesso programático
- Personalizando um menu de atalho usando verbos estáticos
- Ativando o manipulador usando a interface IDropTarget
- Especificando a posição e a ordem dos verbos estáticos
- Posicionando verbos na parte superior ou inferior do menu
- Criando menus estáticos em cascata
- Obtendo comportamento dinâmico para verbos estáticos usando sintaxe de consulta avançada
- Preterido: Associando verbos a comandos dinâmicos de troca de dados
- Concluindo tarefas de implementação de verbos
- Tópicos relacionados
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 verbo 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 do verbo aberto é definida como Open em um sistema inglês e como o equivalente alemão em um sistema alemão.
Verbo canônico | Descrição |
---|---|
Aberto | Abre o arquivo ou a pasta. |
Abrirnovo | Abre o arquivo ou pasta em uma nova janela. |
Imprimir | Imprime o arquivo. |
Imprimir para | Permite que o usuário imprima um arquivo arrastando-o para um objeto de impressora. |
Explorar | Abre o Windows Explorer com a pasta selecionada. |
Propriedades | Abre a folha de propriedades do objeto. |
Observação
O verbo Printto 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 verbo como estendido, adicione um valor de REG_SZ "estendido" à subchave do verbo. 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 verbo apenas como acesso programático, adicione um valor de REG_SZ "ProgrammaticAccessOnly" à subchave do verbo. 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 verbo como estendido, adicione um valor de REG_SZ "estendido" à subchave do verbo. O valor não deve ter nenhum dado associado a ele.
Personalizando um menu de atalho usando verbos estáticos
Depois de escolher um verbo estático ou dinâmico para o menu de atalho, você pode estender o menu de atalho para um tipo de arquivo registrando um verbo estático para o tipo de arquivo. Para fazer isso, adicione uma subchave Shell abaixo da subchave para o ProgID do aplicativo associado ao tipo de arquivo. Opcionalmente, você pode definir um verbo padrão para o tipo de arquivo, tornando-o o valor padrão da subchave Shell .
O verbo padrão é exibido primeiro no menu de atalho. Sua finalidade é fornecer ao Shell um verbo que ele pode usar quando a função ShellExecuteEx é chamada, mas nenhum verbo é especificado. O Shell não seleciona necessariamente o verbo padrão quando ShellExecuteEx é usado dessa maneira.
O Shell usa o primeiro verbo disponível na seguinte ordem:
- O verbo padrão
- O primeiro verbo no registro, se a ordem dos verbos for especificada
- O verbo Open
- O verbo Abrir Com
Se nenhum dos verbos listados estiver disponível, a operação falhará.
Crie uma subchave para cada verbo que você deseja adicionar na subchave Shell. Cada uma dessas subchaves deve ter um valor REG_SZ definido como a cadeia de caracteres de exibição do verbo (cadeia de caracteres localizada). Para cada subchave de verbo, crie uma subchave de comando com o valor padrão definido como a linha de comando para ativar os itens. Para verbos canônicos, como Abrir e Imprimir, 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 cadeia de caracteres do verbo será exibida.
No exemplo do Registro a seguir, observe que:
- Como Doit não é um verbo canônico, ele recebe um nome de exibição, que pode ser selecionado pressionando a tecla D.
- O verbo Printto 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 verbo. %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 os verbos Abrir, Fazer e Imprimir em seu menu, com Fazer como o verbo padrão.
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 consultas IDropTarget e Shell 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 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 subchave Shell 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:
- Exibição
- Gadgets
- 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:
- Personalização
- Gadgets
- Exibição
HKEY_CLASSES_ROOT
DesktopBackground
Shell = "Personalization,Gadgets"
Display
Posicionando verbos na parte superior ou inferior do menu
O atributo de registro a seguir pode ser usado para colocar um verbo 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.
No Windows 7 e posterior, há três maneiras de criar menus em cascata:
- Criando menus em cascata com a entrada do Registro SubCommands
- Criando menus em cascata com a entrada do Registro ExtendedSubCommandsKey
- Criando menus em cascata com a interface IExplorerCommand
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
Crie uma subchave em HKEY_CLASSES_ROOT shell ProgID\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)
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
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
No caso de verbos personalizados, implemente-os usando qualquer um dos métodos de implementação de verbo estático e liste-os na subchave CommandStore, conforme mostrado neste exemplo para um verbo fictício VerbName:
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 nome do verbo na entrada SubCommands. 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.
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\Classes de Software\. 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
Crie uma subchave em HKEY_CLASSES_ROOT shell ProgID\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)
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
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).
Preencha os subverbos usando qualquer uma das seguintes implementações de verbos estáticos. 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.
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 implementação de verbo usando IExplorerCommand e com IContextMenu.
As duas capturas de tela a seguir ilustram o uso de menus em cascata na pasta Dispositivos .
A captura de tela a seguir ilustra outra implementação de um menu em cascata na pasta Dispositivos .
Observação
Como o IExplorerCommand dá suporte apenas à ativação em processo, ele é recomendado para uso por fontes de dados do Shell 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 AQS (Sintaxe de Consulta Avançada) pode expressar uma condição que será avaliada usando propriedades do item para o qual o verbo está sendo instanciado. Este sistema funciona apenas com propriedades rápidas. Essas são propriedades que a fonte de dados do Shell relata tão rápido por 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 verbo é exibido ou oculto.
- O valor DefaultAppliesTo controla qual verbo é o padrão.
- O valor HasLUAShield controla se um escudo UAC (Controle de Conta de Usuário) é exibido.
Neste exemplo, o valor DefaultAppliesTo torna esse verbo o padrão para qualquer arquivo com a palavra "exampleText1" em seu nome de arquivo. O valor AppliesTo habilita o verbo 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 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 consultas IDropTarget e Shell para atributos de associação de arquivo, consulte Tipos percebidos e registro de aplicativo.
Concluindo tarefas de implementação de verbos
As tarefas a seguir para implementar verbos são relevantes para implementações de verbos estáticos e dinâmicos. 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 de casca predefinidos
Muitos objetos Shell predefinidos 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 de Shell Predefinidos de Criando Manipuladores de Extensão de Shell. Esses objetos Shell predefinidos cujos menus de atalho podem ser personalizados adicionando verbos no registro são marcados na tabela com a palavra Verbo.
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 comando Novo do menu Arquivo é selecionado, o Shell adiciona o tipo de arquivo ao submenu Novo. 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. |
FileName | 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 MyProgram Application no submenu Novo , o Shell cria um arquivo chamado New MyProgram Application.myp-ms e o passa para MyProgram.exe.
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 objeto Shell 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.
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ítica do Windows para controlar a visibilidade do verbo. 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 do verbo. Defina o valor da subchave SuppressionPolicy como a ID da política. Se a política estiver ativada, o verbo e sua entrada de menu de atalho associada serão suprimidos. Para obter possíveis valores de ID de política, consulte a enumeração RESTRICTIONS.
Empregando o modelo de seleção de verbos
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 verbo requer valores de registro separados para cada uma dessas três situações às quais o verbo dá suporte. Os valores possíveis para o modelo de seleção de verbos 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 implementação de verbo 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 de verbo ou é maior que os limites padrão descritos na tabela a seguir, o verbo não aparece.
Tipo de implementação do verbo | 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 do Shell para um item podem ser testados para determinar se o verbo deve ser habilitado ou desabilitado.
Para usar esse recurso de atributo, adicione os seguintes valores REG_DWORD sob o verbo:
- 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:
Crie uma pasta marcada como Somente leitura ou Sistema.
Crie um arquivo Desktop.ini que inclua um arquivo [. ShellClassInfo] DirectoryClass=Pasta ProgID.
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.
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 verbo padrão, caso em que clicar duas vezes na pasta ativa o verbo.
Tópicos relacionados
-
Melhores Práticas para Manipuladores de Menu de Atalho e Vários Verbos de Seleção
-
Escolher um Verbo Estático ou Dinâmico para o Menu de Atalho
-
Menus de Atalho (Contexto) e Manipuladores de Menu de Atalho