Compartilhar via


Práticas recomendadas para manipuladores de menu de atalho e vários verbos

Este tópico é organizado da seguinte maneira:

Práticas Recomendadas

Verbo estático são verbos mais simples de implementar e fornecem funcionalidade rica. Recomendamos fortemente que você implemente um verbo usando um dos métodos de verbos estáticos.

Práticas recomendadas para implementações de verbos

A lista a seguir representa as práticas recomendadas para implementações de verbos:

  • Escolha sempre o método de verbo mais simples que atenda às suas necessidades.
  • Use um método de verbo estático, se possível.
  • Não execute operações com uso intensivo de recursos ou E/S no thread da interface do usuário. Tanto IShellExtInit::Initialize quanto IContextMenu::QueryContextMenu precisam ser muito conservadores no trabalho que executam. IContextMenu::InvokeCommand deve ser executado em outro processo ou você deve criar um novo thread para evitar o bloqueio do chamador.
  • Verbos de prefixo com o nome do fornecedor independente de software (ISV) da seguinte maneira, ISVName.verb. O uso de nomes não qualificados pode resultar em colisões com vários ISVs que escolheram o mesmo nome de verbo.
  • Sempre use um ProgID específico do aplicativo. Como alguns tipos de item não usam esse mapeamento, há a necessidade de nomes exclusivos do fornecedor.
  • Posicione a interface do usuário em relação ao método de invocação, mas não seja executado em um thread invocador.
  • Não aceite o valor de retorno S_OK para verbos canônicos passados para o método IContextMenu::InvokeCommand . Isso causa uma falha para a implementação de verbo real a ser invocada e retorna um código de falha para verbos canônicos. Se você não oferecer suporte a verbos canônicos, retornará a falha quando um valor HIWORD(lpVerb) diferente de zero for encontrado.
  • Evite o uso de rundll32.exe como anfitrião do seu verbo.
  • Ao implementar IContextMenu::QueryContextMenu , certifique-se de retornar o número de verbos que foram adicionados ao menu por meio do valor HRESULT usando a macro ResultFromShort.
  • Se você se registrar em uma das seguintes entradas de chave do Registro, tenha cuidado e registre seu manipulador no tipo mais específico para reduzir as consequências possivelmente não intencionais:
    • HKEY_CLASSES_ROOT\*
    • HKEY_CLASSES_ROOT\AllFileSystemObjects
    • HKEY_CLASSES_ROOT\Pasta
    • HKEY_CLASSES_ROOT\Diretório
  • Defina a tecla MayChangeDefaultMenu somente se você antecipar que talvez seja necessário alterar o verbo padrão no menu de atalho. Se o manipulador não alterar o verbo padrão, você não deve definir essa chave porque isso faz com que o sistema carregue sua DLL desnecessariamente.
  • Minimize o trabalho executado em IShellExtInit::Initialize. Para manipuladores de menu de atalho, capture o objeto de dados passado para IShellExtInit::Initialize e processe-o em IContextMenu::QueryContextMenu ou IContextMenu::InvokeCommand.

Práticas recomendadas para vários verbos de seleção

Como o número de itens em um cenário de verbo de seleção múltipla pode ser grande, é importante que você considere as implicações de desempenho de suas implementações de verbo. Por exemplo, quando um usuário pesquisa "*" em um escopo que inclui um grande número de itens e, em seguida, clica em Selecionar tudo e clica com o botão direito do mouse, o verbo é apresentado com uma seleção que pode ter milhares de itens nele. Como resultado, os verbos devem considerar apenas o primeiro item da seleção e a contagem geral de itens. O primeiro item é definido como o item na parte superior do modo de exibição ou o item que o usuário clicou com o botão direito do mouse primeiro.

No Windows 7 e posterior, o número de itens passados para um verbo é limitado a 16 quando um menu de atalho é consultado. O verbo é então recriado e reinicializado com a seleção completa quando esse verbo é invocado.

É apropriado, em alguns casos, considerar um pequeno número de itens fixos. Por exemplo, é apropriado que um verbo "diff" considere apenas os dois primeiros itens. Geralmente, você não precisa testar cada item na seleção para ver se é um determinado tipo, ou consultar cada item na seleção para suas propriedades. Olhe antes para o primeiro item e decida se é apropriado adicionar seu verbo.

Seleções Heterogêneas

Verbos otimistas são adicionados automaticamente no caso de seleção múltipla, supondo que itens não inspecionados possam ser manipulados pelo verbo. Em contraste, verbos pessimistas não são adicionados quando a seleção contém itens não inspecionados, e só são adicionados nos casos em que o número de itens é pequeno.

Os verbos de estilo do jogador devem ser otimistas e ignorar silenciosamente os itens que não são manipulados. Se uma falha em agir em itens pode causar perda de dados ou confusão, então o verbo deve avisar os usuários sobre itens que não podem ser processados. Por exemplo, um verbo "backup" deve indicar que não foi possível fazer backup de alguns itens.

Escolher um Verbo Estático ou Dinâmico para o Menu de Atalho

Como Criar Manipuladores do Menu de Atalho

Personalizando um menu de atalho usando verbos dinâmicos

Menus de Atalho (Contexto) e Manipuladores de Menu de Atalho

Associações de Verbos e Arquivos

Referência do Menu de Atalho