Partilhar via


Estendendo menus de atalho

Clicar com o botão direito do rato em um objeto normalmente causa a exibição de um menu de atalho . Este menu contém uma lista de comandos que o usuário pode selecionar para executar várias ações no objeto. Esta seção é uma introdução aos menus de atalho para objetos do sistema de arquivos.

Para mais informações, consultar:

Menus de atalho para objetos do sistema de arquivos

Quando um usuário clica com o botão direito do mouse em um objeto, como um arquivo, que é exibido no Windows Explorer ou na área de trabalho, um menu de atalho aparece com uma lista de comandos. O usuário pode então executar uma ação no arquivo, como abri-lo ou excluí-lo, selecionando o comando apropriado.

Como os menus de atalho são frequentemente usados para gerenciamento de arquivos, o Shell fornece um conjunto de comandos padrão, como Recortar e Copiar, que aparecem no menu de atalho para qualquer arquivo. Observe que, embora Abrir com seja um comando padrão, ele não é exibido para alguns tipos de arquivo padrão, como .wav. A ilustração a seguir do diretório de exemplo Meus Documentos, que também foi usado como exemplo em Customizing Icons, mostra um menu de atalho padrão que foi exibido clicando com o botão direito do mouse em MyDocs4.xyz.

captura de tela do menu de atalho padrão para objetos do sistema de arquivos

A razão pela qual MyDocs4.xyz mostra um menu de atalho padrão é que ele não é parte de um tipo de arquivo registado. Por outro lado, .txt é um tipo de ficheiro registado. Se clicar com o botão direito do rato num dos ficheiros .txt, verá um menu de atalho com dois comandos adicionais na secção superior: Abrir e Imprimir.

captura de tela do menu de atalho personalizado para objetos do sistema de arquivos

Depois que um tipo de arquivo é registrado, você pode estender seu menu de atalho com comandos adicionais. Eles são exibidos acima dos comandos padrão quando qualquer arquivo desse tipo é clicado com o botão direito do mouse. Embora a maioria dos comandos adicionados dessa forma sejam comuns, como Imprimir ou Abrir, você é livre para adicionar qualquer comando que um usuário possa achar útil.

Tudo o que é necessário para estender o menu de atalho para um tipo de arquivo é criar uma entrada do Registro para cada comando. Uma abordagem mais sofisticada é implementar um manipulador de menu de atalho , que permite estender o menu de atalho para um tipo de arquivo em uma base arquivo por arquivo. Para obter mais informações, consulte Criando manipuladores de menu de contexto.

Verbos do menu de atalho

Cada comando no menu de atalho é identificado no registro por seu verbo . Esses verbos são os mesmos usados por ShellExecuteEx ao iniciar aplicativos programaticamente. Para obter mais informações sobre o uso do ShellExecuteEx, consulte a discussão em Lançamento de Aplicações.

Um verbo é uma cadeia de texto simples que é usada pelo Shell para identificar o comando associado. Cada verbo corresponde à cadeia de comando usada para iniciar o comando em uma janela de console ou arquivo em lote (.bat). Por exemplo, o verbo abrir normalmente inicia um programa para abrir um arquivo. Sua cadeia de caracteres de comando normalmente se parece com isto:

"My Program.exe" "%1"

"%1" é o marcador padrão para um parâmetro da linha de comandos associado ao nome do ficheiro. Por exemplo, ele pode especificar uma página específica para exibir em uma visão em abas.

Observação

Se qualquer elemento da cadeia de caracteres de comando contiver ou puder conter espaços, ele deverá ser colocado entre aspas. Caso contrário, se o elemento contiver um espaço, ele não será analisado corretamente. Por exemplo, "My Program.exe" iniciará o aplicativo corretamente. Se você usar My Program.exe, o sistema tentará iniciar "My" com "Program.exe" como seu primeiro argumento de linha de comando. Você deve sempre usar aspas com argumentos como "%1" que são expandidos para cadeias de caracteres pelo Shell, porque você não pode ter certeza de que a cadeia de caracteres não conterá um espaço.

 

Os verbos também podem ter uma cadeia de caracteres de exibição associada a eles, que é exibida no menu de atalho em vez da cadeia de caracteres do verbo. Por exemplo, o texto de exibição para openas é Abrir com. Tal como strings de menu normais, incluir um E comercial (&) na string de exibição permite a seleção do comando através do teclado.

Verbos Canônicos

Em geral, os aplicativos 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 pode ser usado com qualquer idioma, e o sistema gera automaticamente uma cadeia de exibição corretamente localizada. Por exemplo, o string de exibição do verbo aberto será definido como Open em um sistema inglês e como Öffnen em um sistema alemão.

Os verbos canônicos incluem:

Valor Descrição
aberto Abre o arquivo ou pasta.
abrir novo Abre o arquivo ou pasta em uma nova janela.
imprimir Imprime o arquivo.
explorar Abre o Windows Explorer com a pasta selecionada.
Procurar Abre a caixa de diálogo do Windows Search com a pasta definida como o local de pesquisa padrão.
openas Abre a caixa de diálogo Abrir com.
propriedades Abre a folha de propriedades do objeto.

 

O verbo printto também é canónico, mas nunca é exibido. Ele permite que o usuário imprima um arquivo arrastando-o para um objeto de impressora.

Verbos estendidos

Quando o usuário clica com o botão direito do mouse em um objeto, o menu de atalho contém todos os verbos normais. No entanto, pode haver comandos que você deseja suportar, mas não foram 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 esta razão, você também pode definir um ou mais verbos estendidos. Estes verbos também são cadeias de caracteres e são semelhantes aos verbos normais. Distinguem-se dos verbos normais pela forma como são registados. Para ter acesso aos comandos associados aos verbos estendidos, o usuário deve clicar com o botão direito do mouse em um objeto enquanto pressiona a tecla SHIFT. Os verbos estendidos serão então exibidos juntamente com os verbos normais.

Estendendo o menu de atalho para um tipo de arquivo

A maneira mais simples de estender o menu de atalho para um tipo de arquivo é com o registro. Para fazer isso, adicione uma subchave Shell abaixo da chave 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 ShellExecuteEx é chamado, mas nenhum verbo é especificado. O Shell não seleciona necessariamente o verbo padrão quando ShellExecuteEx é usado dessa maneira. Para o Shell versões 5.0 e posteriores, encontradas no Windows 2000 e sistemas posteriores, o Shell usa o primeiro verbo disponível da lista a seguir. Se nenhum estiver disponível, a operação falhará.

  • O verbo aberto
  • O verbo padrão
  • O primeiro verbo no registo
  • O verbo abrir com

Para versões do Shell anteriores à versão 5.0, omita o terceiro item.

Abaixo da subchave Shell, crie uma subchave para cada verbo que você deseja adicionar. Cada uma dessas subchaves terá um valor REG_SZ definido para a cadeia de exibição do verbo. Você pode omitir a cadeia de caracteres de exibição para verbos canônicos porque o sistema exibirá automaticamente uma cadeia de caracteres localizada corretamente. Se você omitir a string de exibição para verbos não canônicos, a string de verbos será exibida. Para cada subchave do verbo, crie uma subchave de comando com o valor padrão definido como a cadeia de comando.

A ilustração a seguir mostra um menu de atalho para o tipo de arquivo .myp usado em Tipos de arquivo e Personalizando ícones. Ele agora tem os verbos open, doit, print e printto no seu menu de atalho, sendo doit o verbo padrão. O menu de atalho tem esta aparência.

captura de tela do menu de atalho personalizado

As entradas do Registro usadas para estender o menu de atalho mostrado na ilustração anterior são:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = MyProgram Application
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            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" %3 %4

Embora o comando Open With esteja acima do primeiro separador, ele é criado automaticamente pelo sistema e não requer uma entrada de registro. O sistema cria automaticamente nomes de exibição para os verbos canônicos abrir e imprimir. Como doit não é um verbo canônico, é atribuído um nome de exibição, "&Do It", que pode ser selecionado pressionando a tecla D. O verbo printto não aparece no menu de contexto, mas incluí-lo permite que o utilizador imprima ficheiros arrastando-os para cima do ícone da impressora. Neste exemplo, %1 representa o nome do arquivo e %2 o nome da impressora.

Os verbos podem ser suprimidos através das definições de política, adicionando um valor SuppressionPolicy à chave do verbo. Defina o valor de SuppressionPolicy como o 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 de restrições .

Estendendo o menu de atalho para objetos de shell predefinidos

Muitos objetos Shell predefinidos têm menus de atalho que podem ser estendidos. 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 pode ser encontrada na seção Objetos de Shell Predefinidos de Criar Manipuladores de Extensão de Shell. Os objetos Shell predefinidos cujos menus de atalho podem ser estendidos adicionando verbos no registro são marcados na tabela com a palavra "Verbo".

Registrando um aplicativo para lidar com tipos de arquivo arbitrários

As seções anteriores deste documento discutiram como definir itens de menu de atalho para um tipo de arquivo específico. Entre outras coisas, definir o menu de atalho permite especificar como o aplicativo associado abre um membro do tipo de arquivo. No entanto, conforme discutido em File Types, os aplicativos também podem registrar um procedimento padrão separado a ser usado quando um usuário tenta usar seu aplicativo para abrir um tipo de arquivo que você não associou ao aplicativo. Este tópico é discutido aqui porque você registra o procedimento padrão da mesma forma que registra itens de menu de atalho.

O procedimento por padrão serve duas finalidades básicas. Uma delas é especificar como seu aplicativo deve ser invocado para abrir um tipo de arquivo arbitrário. Você pode, por exemplo, usar um sinalizador de linha de comando para indicar que um tipo de arquivo desconhecido está sendo aberto. A outra finalidade é definir as várias características de um tipo de arquivo, como os itens de menu de atalho e o ícone. Se um usuário associar seu aplicativo a um tipo de arquivo adicional, esse tipo terá essas características. Se o tipo de arquivo adicional foi associado anteriormente a outro aplicativo, essas características substituirão os originais.

Para registar o procedimento padrão, coloque as mesmas chaves de registo que foram criadas para o ProgID da sua aplicação na subchave da aplicação de HKEY_CLASSES_ROOT\Applications. Você também pode incluir um valor FriendlyAppName para fornecer ao sistema um nome amigável para seu aplicativo. O nome amigável do aplicativo também pode ser extraído de seu arquivo executável, mas somente se o valor FriendlyAppName estiver ausente. O fragmento do Registro a seguir mostra um procedimento padrão de exemplo para MyProgram.exe que define um nome amigável e vários itens de menu de atalho. As cadeias de comando incluem o sinalizador /a para notificar o aplicativo de que está abrindo um tipo de arquivo arbitrário. Se você incluir um DefaultIcon subchave, deverá usar um ícone genérico.

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         FriendlyAppName = Friendly Name
         shell
            open
               command
                  (Default) = C:\MyDir\MyProgram.exe /a "%1"
            print
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1"
            printto
               command
                  (Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2" %3 %4

Estendendo o novo submenu

Quando um utilizador abre o menu Ficheiro no Explorador do Windows, o primeiro comando é Novo. Selecionar este comando exibe um submenu. Por padrão, ele contém dois comandos, Folder e Shortcut, 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 a eles. Inclua uma subchave ShellNew sob a chave para a extensão de nome de arquivo. Quando o comando Novo do menu Arquivo estiver selecionado, o Shell o adicionará ao submenu Novo . A string de exibição do comando será a string descritiva atribuída ao ProgID do programa.

Atribua um ou mais valores de dados à subchave ShellNew para especificar o método de criação de arquivo. Seguem-se os valores disponíveis.

Valor Descrição
Comando Executa um aplicativo. Este é um valor REG_SZ que 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. Os dados são um valor REG_BINARY com os dados do ficheiro. Os dados serão ignorados se NullFile ou FileName forem especificados.
Nome do arquivo Cria um arquivo que é uma cópia de um arquivo especificado. FileName é um valor REG_SZ, definido como o caminho totalmente qualificado do arquivo a ser copiado.
NullFile Cria um arquivo vazio. Não foi atribuído um valor ao NullFile. Se NullFile for especificado, os valores Data e FileName serão ignorados.

 

A ilustração a seguir mostra o Novo submenu para o tipo de arquivo .myp usado como exemplo em Tipos de arquivo e Personalização de ícones. Agora possui um comando, MyProgram Application. Quando um utilizador seleciona Aplicação MyProgram no submenu Novo, o Shell cria um arquivo chamado "New MyProgram Application.myp" e passa-o para MyProgram.exe.

captura de tela do novo menu personalizado

A entrada de registo é agora a seguinte:

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
            NullFile
   MyProgram.1
      (Default) = MyProgram Application
      DefaultIcon
         (Default) = C:\MyDir\MyProgram.exe,2
      Shell
         (Default) = doit
         open
            command
               (Default) = C:\MyDir\MyProgram.exe "%1"
         doit
            (Default) = &Do It
            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" %3 %4