Estendendo menus de atalho

Clicar com o botão direito do mouse 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.

Informações adicionais estão disponíveis aqui:

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 é exibido com uma lista de comandos. Em seguida, o usuário pode executar uma ação no arquivo, como abri-lo ou excluí-lo, selecionando o comando apropriado.

Como os menus de atalho geralmente são usados para o 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 Meus Documentos de exemplo, que também foi usado como exemplo em Personalizando Ícones, 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

O motivo pelo qual MyDocs4.xyz mostra um menu de atalho padrão é que ele não é membro de um tipo de arquivo registrado. Por outro lado, .txt é um tipo de arquivo registrado. Se você clicar com o botão direito do mouse em um dos arquivos .txt, verá um menu de atalho com dois comandos adicionais em sua seçã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ê pode 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 pelo ShellExecuteEx ao iniciar aplicativos programaticamente. Para obter mais informações sobre o uso de ShellExecuteEx, consulte a discussão em Iniciando aplicativos.

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

"My Program.exe" "%1"

"%1" é o espaço reservado padrão para um parâmetro de linha de comando fornecido com o nome do arquivo. Por exemplo, ele pode especificar uma página específica a ser exibida em um modo de exibição com guias.

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, "Meu Program.exe" iniciará o aplicativo corretamente. Se você usar Meu Program.exe, o sistema tentará iniciar "My" com "Program.exe" como seu primeiro argumento de linha de comando. Você sempre deve 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 própria cadeia de caracteres de verbo. Por exemplo, a cadeia de caracteres de exibição para openas é Open With. Assim como as cadeias de caracteres de menu normais, incluindo um e comercial (&) na cadeia de caracteres de exibição permite a seleção de teclado do comando.

Verbos Canônicos

Em geral, os aplicativos são responsáveis por fornecer cadeias de caracteres de exibição localizadas para os verbos definidos por eles. 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 linguagem e o sistema gera automaticamente uma cadeia de caracteres de exibição localizada corretamente. Por exemplo, a cadeia de caracteres de exibição do verbo aberto será definida como Abrir em um sistema inglês e como Öffnen em um sistema alemão.

Os verbos canônicos incluem:

Valor Descrição
Abrir Abre o arquivo ou a pasta.
Opennew Abre o arquivo ou a pasta em uma nova janela.
print Imprime o arquivo.
explorar Abre o Windows Explorer com a pasta selecionada.
localizar Abre a caixa de diálogo Pesquisa do Windows com a pasta definida como o local de pesquisa padrão.
openas Abre a caixa de diálogo Abrir com .
properties 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 aos quais você deseja dar suporte, mas não exibidos em todos os menus de atalho. Por exemplo, você pode ter comandos que não são comumente usados ou destinados a usuários experientes. Por esse motivo, você também pode definir um ou mais verbos estendidos. Esses verbos também são cadeias de caracteres e são semelhantes aos verbos normais. Eles são distinguidos dos verbos normais pela maneira como são registrados. Para ter acesso aos comandos associados a 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 exibidos junto 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 forma. Para as versões 5.0 e posteriores do Shell, encontradas em sistemas Windows 2000 e 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 Registro
  • O openwith verb

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 como a cadeia de caracteres 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 corretamente localizada. Se você omitir a cadeia de caracteres de exibição para verbos não canônicos, a cadeia de caracteres de verbo será exibida. Para cada subchave de verbo, crie uma subchave de comando com o valor padrão definido como a cadeia de caracteres 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. Agora ele tem os verbos open, doit, print e printto em seu menu de atalho, com doit como 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 Abrir com esteja acima do primeiro separador, ele é criado automaticamente pelo sistema e não requer uma entrada do Registro. O sistema cria automaticamente nomes de exibição para os verbos canônicos abertos e impressos. Como doit não é um verbo canônico, ele recebe um nome de exibição, "&Do It", que pode ser selecionado pressionando a tecla D. O verbo printto 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 adicionando um valor SuppressionPolicy à chave do verbo. Defina o valor de 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 .

Estendendo o menu de atalho para objetos shell predefinidos

Muitos objetos Shell predefinidos têm menus de atalho que podem ser estendidos. Registre o comando da mesma maneira 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 Criando Manipuladores de Extensão do Shell. Esses 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 Tipos de Arquivo, 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 padrão serve a 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 tiver sido associado anteriormente a outro aplicativo, essas características substituirão os originais.

Para registrar o procedimento padrão, coloque as mesmas chaves do Registro que você criou para o ProgID do aplicativo sob a subchave do aplicativo de aplicativos HKEY_CLASSES_ROOT\. 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 caracteres de comando incluem o sinalizador /a para notificar o aplicativo de que ele está abrindo um tipo de arquivo arbitrário. Se você incluir uma subchave DefaultIcon , 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 usuário abre o menu Arquivo no Windows Explorer, o primeiro comando é Novo. Selecionar esse comando exibe um submenu. Por padrão, ele contém dois comandos, Pasta e Atalho, que permitem que os usuários criem subpastas e atalhos. Esse 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 a eles. Inclua uma subchave ShellNew sob a chave da extensão de nome de arquivo. Quando o comando Novo do menu Arquivo for selecionado, o Shell o adicionará ao submenu Novo. A cadeia de caracteres de exibição do comando será a cadeia de caracteres 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. Os valores disponíveis seguem.

Valor Descrição
Comando Executa um aplicativo. Esse é um valor REG_SZ que especifica o caminho do aplicativo a ser executado. Por exemplo, você pode defini-lo para iniciar um assistente.
Dados Cria um arquivo que contém dados especificados. Os dados são um valor REG_BINARY com 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. FileName é um valor REG_SZ , definido como o caminho totalmente qualificado do arquivo a ser copiado.
NullFile Cria um arquivo vazio. NullFile não recebe um valor. Se NullFile for especificado, os valores Data e FileName serão ignorados.

 

A ilustração a seguir mostra o submenu Novo para o tipo de arquivo .myp usado como exemplo em Tipos de Arquivo e Personalizando Ícones. Agora ele tem um comando, MyProgram Application. Quando um usuário seleciona o Aplicativo MyProgram no submenu Novo , o Shell cria um arquivo chamado "Novo Aplicativo MyProgram.myp" e o passa para MyProgram.exe.

captura de tela do novo menu personalizado

A entrada do Registro 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