Compartilhar via


Adicionar ícones e menus de contexto com extensões de shell

Observação

O Windows Desktop Search 2.x é uma tecnologia obsoleta que estava originalmente disponível como um suplemento para Windows XP e Windows Server 2003. Em versões posteriores, use a Pesquisa do Windows .

Você pode melhorar a experiência dos usuários com a Pesquisa de Área de Trabalho do Microsoft Windows (WDS) e o manipulador de protocolo implementando extensões do Shell. Sem mais extensão, o manipulador de protocolo criado não incluirá as seguintes experiências de usuário:

  • O WDS não exibirá ícones específicos para seus resultados.
  • Quando os usuários clicarem duas vezes em um item, a interface do usuário não responderá ao evento.
  • Quando os usuários clicarem com o botão direito do mouse em um item, o menu de contexto não dará suporte a nenhuma operação para o item.

Implementações mínimas de IPersist e IPersistFolder são exigidas pelo IShellFolder, e uma implementação mínima de IShellFolder é necessária para IContextMenu e IExtractIcon, as duas interfaces que fornecem uma experiência de usuário mais perfeita.

 

IPersist

A interface IPersist define o método único GetClassID, que foi projetado para fornecer o CLSID de um objeto que pode ser armazenado persistentemente no sistema.

Método Descrição
GetClassID() Retorna a ClassID do manipulador de protocolo

 

Observação

O mesmo CLSID deve ser implementado para IPersist, IPersistFolder e IShellFolder.

 

 

IPersistFolder

A interface IPersistFolder é usada para inicializar objetos de pasta shell. A implementação dessa interface, que é derivada do IPersist, é como a pasta é informada onde ela está no namespace do Shell.

Método Descrição
Initialize() Instrui um objeto de pasta shell a se inicializar com base nas informações passadas e retorna S_OK

 

Observação

O mesmo CLSID deve ser implementado para IPersist, IPersistFolder e IShellFolder.

 

Você não usa essa interface diretamente. Ele é usado pela implementação do sistema de arquivos da interface IShellFolder::BindToObject quando inicializa um objeto de pasta shell.

 

Ishellfolder

A interface IShellFolder é usada para gerenciar pastas e uma implementação parcial é necessária para que o ícone e as interfaces de contexto implementadas para um manipulador de protocolo se comportem corretamente na interface do usuário de resultados da Pesquisa da Área de Trabalho do Windows. A maior parte da funcionalidade necessária é exposta por meio do método GetUIObjectOf . Esse método permite que um suplemento consulte as interfaces IExtractIcon e IContextMenu .

A interface IShellFolder usa PIDLs em vez de URLs. Ao contrário dos requisitos de uma extensão de Namespace completa, os suplementos podem usar uma estrutura de IDL simples que contém apenas a URL.

Os seguintes métodos de IShellFolder devem ser implementados. Observe que cinco desses métodos exigem implementação mínima.

Método Descrição
BindToObject() Retorna E_NOTIMPL
BindToStorage() Retorna E_NOTIMPL
CreateViewObject() Retorna E_NOTIMPL
SetNameOf() Retorna E_NOTIMPL
ParseDisplayName() Converte uma URL na estrutura PIDL
CompareIDs() Compara dois valores de PIDL
GetDisplayNameOf() Retorna a URL de um PIDL
GetUIObjectOf() Esse método é semelhante ao método OLE COM QueryInterface. Se um ícone for solicitado, o chamador solicitará o IID_IExtractIcon; se um menu de contexto for solicitado, o chamador solicitará o IID_IContextMenu.

 

Observação

O mesmo CLSID deve ser implementado para IPersist, IPersistFolder e IShellFolder.

 

IShellFolder não é usado para enumerar pastas. Isso significa que o nome de exibição de uma pasta será a URL física. Isso pode mudar no futuro.

 

Icontextmenu

Quando o WDS exibe resultados para o usuário, o usuário pode clicar com o botão direito do mouse em um item e ver um menu de contexto definido pela interface IContextMenu .

A ação padrão no menu de contexto é a mesma ação executada quando o item é clicado duas vezes. Sem as interfaces IShellFolder ou IContextMenu correspondentes para o item, o comportamento padrão de um evento de clique duplo é passar a URL como um argumento para a função ShellExecute.

 

IExtractIcon

IExtractIcon recupera um ícone para a interface do usuário do WDS com base na URL no PIDL fornecido pelo manipulador de protocolo.

 

Exemplo de código

O código de exemplo da interface do usuário do manipulador de protocolo personalizado demonstra uma implementação de IShellFolder e interfaces de suporte e inclui suporte para manipular os PIDLs.

Referência

Código de exemplo da interface do usuário do manipulador de protocolo personalizado

Instalando e registrando manipuladores de protocolo