Compartilhar via


Criando manipuladores de pesquisa

[Esse recurso só é compatível com Windows XP ou anterior. Em vez disso, use a Pesquisa do Windows.]

O Shell é compatível com vários utilitários de pesquisa que permitem que os usuários localizem objetos de namespace, como arquivos ou impressoras. Você pode criar um mecanismo de pesquisa personalizado e disponibilizá-lo aos usuários implementando e registrando um manipulador de pesquisa.

Os procedimentos gerais para implementar e registrar um manipulador de extensão do Shell são discutidos em Como criar manipuladores de extensão do Shell. Este documento se concentra nesses aspectos de implementação que são específicos para manipuladores de pesquisa.

Como os manipuladores de pesquisa funcionam

Os usuários têm duas maneiras de selecionar um mecanismo de pesquisa. A primeira maneira é no menu Iniciar. Com sistemas anteriores ao Windows 2000, a seleção do comando Localizar no menu Iniciar exibe um submenu dos mecanismos de pesquisa disponíveis. Com o Windows 2000 e posterior, o comando Localizar do menu Iniciar é renomeado como Pesquisa. A ilustração a seguir mostra o botão Pesquisar em um sistema Windows XP.

the start menu's search submenu

Os usuários também podem iniciar uma pesquisa no Windows Explorer. Em sistemas anteriores ao Windows 2000, eles clicam no comando Localizar no menu Ferramentas para exibir essencialmente o mesmo menu que o associado ao menu Iniciar. No entanto, o Windows Explorer para Windows 2000 manipula os mecanismos de pesquisa de uma maneira muito diferente. Em vez de lidar com mecanismos de pesquisa como um submenu do menu Ferramentas, agora há um botão Pesquisar na barra de ferramentas. Clicar neste botão abre o painel Pesquisa da barra do Explorer. A ilustração a seguir mostra o painel de pesquisa Pesquisar Arquivos e Pastas.

the windows explorer bar's search pane

Há várias diferenças na forma como o Windows 2000 e os sistemas anteriores gerenciam manipuladores de pesquisa que afetam a implementação e o registro.

Pré-Windows 2000 Windows 2000 e posterior
Os manipuladores de pesquisa são implementados como um tipo de manipulador de menu de atalho. Os manipuladores de pesquisa podem ser implementados como manipuladores de menu de atalho ou como documentos DHTML (HTML Dinâmico).
Os manipuladores de pesquisa podem ser estáticos ou dinâmicos. Os manipuladores estáticos são carregados somente quando são selecionados pelo usuário. Os manipuladores dinâmicos são carregados pelo Shell na inicialização e não são encerrados até que o Shell seja encerrado. Os manipuladores implementados como manipuladores de menu de atalho podem ser estáticos ou dinâmicos. Os manipuladores implementados como documentos DHTML devem ser estáticos.
Os manipuladores de pesquisa aparecem no submenu Localizar do menu Iniciar e no submenu Localizar do menu Ferramentasdo Windows Explorer. Os manipuladores de pesquisa aparecem apenas no submenu de Pesquisa do menu Iniciar. Para disponibilizar um painel de pesquisa personalizado por meio da barra de menus do Windows Explorer, você deve implementá-lo como um objeto de banda. Em seguida, ele é listado no submenu da Barra do Gerenciador do menu Exibição do Windows Explorer.

 

Registrando manipuladores de pesquisa

Os manipuladores de pesquisa são registrados na subchave FindExtensionsdos tipos de arquivo.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

A partir desse ponto, o procedimento de registro depende se o manipulador deve ser estático ou dinâmico. Para obter uma discussão geral sobre como registrar manipuladores de extensão do Shell, consulte Como criar manipuladores de extensão do Shell.

Como registrar um manipulador de pesquisa estático

Os manipuladores de pesquisa estáticos são carregados somente quando são iniciados pelo usuário. Essa abordagem funciona melhor para DLLs que são pequenas e podem ser carregadas rapidamente. Se você estiver usando DHTML para implementar seu manipulador, ele deverá ser estático. Para registrar um manipulador de extensão estático, crie uma subchave nomeada para o manipulador na subchave Estática da subchave FindExtensions. O nome não é usado pelo sistema, mas não deve ser idêntico a outros nomes de manipulador de pesquisa na subchave FindExtensions.

Manipuladores de pesquisa baseados em menu de atalho

Se o manipulador for implementado como um manipulador de menu de atalho, defina o valor padrão da subchave de nome do manipulador como o GUID do identificador de classe do objeto (CLSID). Na subchave de nome do manipulador, crie uma subchave chamada 0 (zero) e defina seu valor padrão para a cadeia de caracteres que será exibida no submenu Pesquisar ou Localizar. Você pode habilitar os atalhos de teclado da maneira usual, precedendo o caractere de atalho com uma ampulheta(&). Você pode ter um ícone pequeno opcional exibido à direita do texto do menu criando uma subchave DefaultIcon sob a subchave 0. Defina seu valor padrão como uma cadeia de caracteres que contém o caminho do arquivo que contém o ícone, seguido por uma vírgula, seguido pelo índice baseado em zero do ícone.

O exemplo a seguir registra o manipulador de pesquisa MySearchEngine. O texto do menu é "Meu Mecanismo de Pesquisa", com M especificado como a chave de atalho. O ícone está em C:\MyDir\MySearch.dll, com um índice de 2.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     Static
                        MySearchEngine
                           (Default) = {MySearchEngine CLSID GUID}
                           0
                              (Default) = &My Search Engine
                              DefaultIcon
                                 (Default) = c:\MyDir\MySearch.dll,2

Manipuladores de pesquisa baseados em DHTML

Com o Windows 2000, você também pode implementar um manipulador de pesquisa como um documento DHTML. O nome dele está listado no submenu Pesquisar do menu Iniciar. Quando o usuário o seleciona, ele inicia o Windows Explorer com a barra do Explorer aberta no documento de pesquisa. Você também pode especificar um documento DHTML a ser exibido à direita da barra do Explorer. Não há como iniciar um manipulador diferente do painel de Pesquisa padrão. Os mecanismos de pesquisa podem ser iniciados diretamente do Windows Explorer, mas somente se forem implementados como objetos de banda.

Para registrar um manipulador de pesquisa baseado em DHTML, defina a subchave de nome do manipulador para a forma de cadeia de caracteres de CLSID_ShellSearchExt (atualmente {169A0691-8DF9-11d1-A1C4-00C04FD75D13}) e crie as subchaves a seguir.

  1. Crie uma subchave 0(zero) na subchave de nome do manipulador e defina seu valor padrão para o texto do menu.
  2. Para que um ícone seja exibido ao lado do texto do menu, crie uma subchave DefaultIcon abaixo de 0 e defina seu valor padrão como o caminho e o índice do ícone.
  3. Crie uma subchave SearchGUID abaixo de 0. Atribua um GUID ao documento DHTML e defina o valor padrão do SearchGUID como seu formulário de cadeia de caracteres. Esse GUID não precisa ser registrado em HKEY_CLASSES_ROOT\CLSID.
  4. Crie uma subchave de URL em SearchGUID. Defina seu valor padrão para o caminho do documento HTML que será exibido na barra do Explorer.
  5. Crie uma subchave UrlNavNew em SearchGUID. Defina seu valor padrão para o caminho do documento HTML que aparecerá à direita da barra do Explorer.

O exemplo a seguir registra o manipulador de pesquisa MySearchEngine implementado como um documento DHTML. O texto do menu é "Meu Mecanismo de Pesquisa", com M especificado como a chave de atalho. O ícone está em C:\MyDir\MySearch.dll, com um índice de 2. O documento DHTML da barra do Explorer é C:\MyDir\MySearch.htm e o documento que será exibido à direita da barra do Explorer é C:\MyDir\MySearchPage.htm.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     Static
                        MySearchEngine
                           (Default) = {169A0691-8DF9-11d1-A1C4-00C04FD75D13}
                           0
                              (Default) = &My Search Engine
                              DefaultIcon
                                 (Default) = c:\MyDir\MySearch.dll,2
                                 SearchGUID
                                    (Default) = {My Search GUID}
                                    Url
                                       (Default) = C:\MyDir\MySearch.htm
                                    UrlNavNew
                                       (Default) = C:\MyDir\MySearchPage.htm

Como registrar um manipulador de pesquisa dinâmica

Se o manipulador for implementado como um manipulador de menu de atalho, você também poderá registrá-lo como um manipulador dinâmico. Nesse caso, ele será carregado com o Shell e terminará somente quando o Shell for encerrado. Os manipuladores de pesquisa dinâmica respondem muito mais rapidamente do que os manipuladores estáticos quando são iniciados pelo usuário. Essa abordagem funciona melhor se a DLL do manipulador pode levar muito tempo para ser carregada ou se é provável que seja chamada com frequência.

Manipuladores de pesquisa dinâmica são registrados na subchave FindExtensions.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

Crie uma subchave de FindExtensions nomeada para o manipulador e defina seu valor padrão para o GUID CLSID do manipulador. Não há suporte para ícones de menu para manipuladores de pesquisa dinâmica. O exemplo a seguir registra MySearchEngine como um manipulador de pesquisa dinâmico.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     MySearchEngine
                        (Default) = {MySearchEngine CLSID GUID}
                        0
                           (Default) = &My Search Engine

Ao contrário dos manipuladores de pesquisa estáticos, você não especifica o texto do menu no Registro. Quando o manipulador for carregado, o Shell chamará o método IContextMenu::QueryContextMenu do manipulador para adicionar itens ao submenu Localizar ou Pesquisar.

Como implementar manipuladores de pesquisa

Os manipuladores de pesquisa podem ser implementados como manipuladores de menu de atalho para todas as versões do Windows. Para o Windows 2000, eles também podem ser implementados como documentos DHTML.

Para obter uma discussão geral sobre como implementar manipuladores de menu de atalho, consulte Como criando manipuladores de menu de contexto. Os manipuladores de pesquisa diferem dos manipuladores de menu de atalho padrão de apenas algumas maneiras.

Para manipuladores de menu estático, o submenu Localizar ou Pesquisar é criado a partir das informações no registro. Não é necessário que o manipulador adicione um item de menu, como faria um manipulador de menu de atalho normal. O Shell gerencia manipuladores de menu estático da seguinte maneira.

  • Quando o usuário inicia o item de menu do manipulador, o Shell carrega a DLL do manipulador e chama IContextMenu::InvokeCommand para notificar o manipulador para iniciar o mecanismo de pesquisa. Os métodos IShellExtInit::Initializee IContextMenu::QueryContextMenunão são chamados.
  • Quando IContextMenu::InvokeCommand é chamado, o membro lpVerb da estrutura CMINVOKECOMMANDINFO que é passada identifica o comando. A palavra de ordem baixa de lpVerb é definida como o equivalente numérico do nome da subchave do comando. Como essa subchave normalmente é nomeada 0, lpVerb geralmente é definido como zero. Em seguida, o manipulador deve iniciar o mecanismo de pesquisa.

Manipuladores de pesquisa dinâmica são implementados da mesma maneira que os manipuladores de menu de atalho normais. A principal exceção é que, quando IShellExtInit::Initialize é chamado, os argumentos pidlFolder e lpdobj são definidos comoNULL .

Os manipuladores de pesquisa baseados em DHTML são implementados como um documento DHTML normal. Eles podem incluir qualquer tecnologia html, DHTML ou script compatível com o Windows Internet Explorer.