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 pelo seu verb. 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.

A verb é uma cadeia de caracteres de texto simples que é usada pelo Shell para identificar o comando associado. Cada verb um corresponde à cadeia de caracteres de comando usada para iniciar o comando numa janela do console ou ficheiro em lote (.bat). Por exemplo, o openverb 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 convertidos em cadeias de caracteres pelo Shell, porque não se pode ter certeza de que a cadeia de caracteres não contém 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 própria cadeia de verb caracteres. 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 canônico verb pode ser usado com qualquer idioma, e o sistema gera automaticamente uma cadeia de exibição devidamente localizada. Por exemplo, a string de exibição do openverb será definida 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 printto verb 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 Shell subchave abaixo da chave para o 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 o Shell com um verb que ele pode usar quando ShellExecuteEx é chamado, mas não é especificado um verb. O Shell não seleciona necessariamente o padrão verb quando ShellExecuteEx é usado dessa maneira. Para Shellversões 5.0 e posteriores, encontradas no Windows 2000 e sistemas posteriores, o Shell usa o primeiro disponível verb na lista a seguir. Se nenhum estiver disponível, a operação falhará.

  • O aberto verb
  • O padrão verb
  • O primeiro verb no registo
  • openwith verb

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

Abaixo da subchave Shell, crie uma subchave para cada verb que pretenda adicionar. Cada uma dessas subchaves terá um valor REG_SZ definido como a cadeia de caracteres de exibição do verb. 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 cadeia de exibição para verbos não canônicos, a verb cadeia de caracteres será exibida. Para cada verb subchave, crie uma subchave de comando com o valor padrão definido como a cadeia de caracteres do 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 verbos open, doit, print e printto em seu menu de atalho, com doit como padrão verb. 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 é canônico verb, é atribuído um nome de exibição, "&Do It", que pode ser selecionado pressionando a tecla D. O printto verb não aparece no menu de atalho, mas incluí-lo permite que o usuário imprima arquivos soltando-os em um ícone de impressora. Neste exemplo, %1 representa o nome do arquivo e %2 o nome da impressora.

Os verbos podem ser suprimidos por meio de configurações de política ao adicionar um valor SuppressionPolicy à chave do verb. Defina o valor de SuppressionPolicy como 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 .

Estendendo o menu de atalho para objetos predefinidos Shell

Muitos objetos predefinidos Shell 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 predefinidos Shell de Criando Shell manipuladores de extensão. Os objetos predefinidos Shell cujos menus de atalho podem ser estendidos adicionando verbos no registro são marcados na tabela com a palavra "Verb."

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 irá adicioná-lo 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.
Ficheiro Nulo 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 usuário seleciona MyProgram Application no submenu Novo , o Shell cria um arquivo chamado "New MyProgram Application.myp" e o passa 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