Windows Search como uma plataforma de desenvolvimento

Para indexar o conteúdo e as propriedades de novos formatos de arquivo e armazenamentos de dados, o Microsoft Windows Search deve ser estendido com suplementos.

Antes que um desenvolvedor de terceiros de novos formatos de arquivo e armazenamentos de dados possa fazer com que esses formatos e armazenamentos apareçam nos resultados da consulta no Windows Explorer, o desenvolvedor deve fazer as três seguintes coisas:

  • Implemente uma fonte de dados do Shell para estender o namespace do Shell.
  • Exponha itens em um armazenamento de dados (se eles estiverem adicionando um novo armazenamento de dados, pois ele precisaria ser indexado).
  • Desenvolva um manipulador de protocolo para que Windows Search possa acessar os dados para indexação.

Este tópico é organizado da seguinte maneira:

Introdução

Antes de começar a criar um aplicativo Windows Search, lembre-se de que a maneira preferencial de fazer isso é por meio de uma fonte de dados do Shell. Uma fonte de dados do Shell estende o namespace do Shell e expõe os itens em um armazenamento de dados. Os itens no armazenamento de dados podem ser indexados pelo sistema Windows Search usando um manipulador de protocolo. Essa abordagem indireta para acessar Windows Search implementando uma fonte de dados do Shell é preferencial porque fornece acesso à funcionalidade completa do Shell. Fazer dessa maneira garante uma experiência razoável de usuário.

Caso queira que os resultados da consulta apareçam no Windows Explorer, implemente uma fonte de dados do Shell antes de criar um manipulador de protocolo para estender o índice. No entanto, se todas as consultas forem programáticas (por meio do OLE DB, por exemplo) e interpretadas pelo código do aplicativo em vez do Shell, um namespace do Shell ainda será preferencial, mas não obrigatório.

Um manipulador de protocolo é necessário para que o Windows obtenha conhecimento do conteúdo do arquivo, como itens em bancos de dados ou tipos de arquivo personalizados. Embora o Windows Search possa indexar o nome e as propriedades do arquivo, o Windows não tem conhecimento do conteúdo do arquivo. Como resultado, esses itens não podem ser indexados ou expostos no Shell do Windows. Ao implementar um manipulador de protocolo personalizado, você pode expor esses itens. Para obter uma lista de manipuladores identificados pelo cenário de desenvolvedor que você está tentando alcançar, consulte Visão geral dos manipuladores.

Visão geral dos cenários de desenvolvimento de pesquisa

Os cenários de desenvolvimento mais comuns no Windows Search são:

Adição de um novo armazenamento de dados

Você precisará de um armazenamento de dados do Shell para Windows Search somente se estiver adicionando um novo armazenamento de dados a ser indexado. Um armazenamento de dados é um repositório de dados que pode ser exposto ao modelo de programação do Shell como um contêiner usando uma fonte de dados do Shell. Os itens em um armazenamento de dados podem então ser indexados pelo sistema Windows Search usando um manipulador de protocolo. O manipulador de protocolo implementa o protocolo para acessar uma fonte de conteúdo em seu formato nativo. As interfaces ISearchProtocol e ISearchProtocol2 são usadas para implementar um manipulador de protocolo personalizado, para expandir as fontes de dados que podem ser indexadas. Para obter informações sobre como criar uma fonte de dados do Shell, confira Implementar as interfaces básicas de objeto de pasta.

Adição de um novo formato de arquivo

Se você adicionar um novo formato de arquivo personalizado, precisará desenvolver um manipulador de filtro ou um manipulador de propriedades, mas não ambos. Um filtro é uma implementação da interface IFilter. Ele abre arquivos de um tipo de arquivo específico e filtra propriedades e partes do texto para o indexador. Os filtros são associados a tipos de arquivo, conforme indicado por extensões de nome de arquivo, tipos MIME ou CLSIDs (ID de classe). Embora um filtro possa lidar com vários tipos de arquivo, cada tipo de arquivo funciona com apenas um filtro.

Um manipulador de propriedades converte dados armazenados em um arquivo em um esquema estruturado que é reconhecido e pode ser acessado por Windows Explorer, Windows Search e outros aplicativos. Esses sistemas podem interagir com o manipulador de propriedades para gravar e ler propriedades de e para um arquivo. Os dados traduzidos incluem exibição de detalhes, dicas de informações, painel de detalhes, páginas de propriedades e assim por diante. Cada manipulador de propriedades é associado a um tipo de arquivo específico, identificado pela extensão de nome de arquivo. Você precisa de um manipulador de propriedades para fazer o seguinte:

  • Mostrar propriedades de item não indexadas na interface do usuário (UI).
  • Suporte à gravação de propriedades.

Consumo de resultados do Windows Search

As seguintes seções descrevem várias maneiras de consumir os resultados do Windows Search:

Consulta de dados

Os desenvolvedores que escrevem aplicativos sobre o sistema combinado do Windows Search e Windows Property podem acessar arquivos e itens, independentemente do aplicativo ou tipo de arquivo. Há duas maneiras de os aplicativos acessarem os dados do indexador:

  • Os aplicativos se comunicam diretamente com o OLE DB enviando consultas SQL (Structured Query Language) do Windows Search para o provedor OLE DB do Windows Search para recuperar os resultados. As consultas podem ser construídas manualmente ou usando a interface ISearchQueryHelper para gerar o SQL a partir de palavras-chave de pesquisa e AQS (Sintaxe de Consulta Avançada).
  • Os aplicativos funcionam por meio da camada Shell. A vantagem da camada Shell é que ela também suporta outras fontes como o grep. No entanto, a desvantagem é que nem todos os recursos do indexador estão disponíveis.

Outra opção é usar os protocolos search-ms:// e search://, que executam pesquisas baseadas em URL renderizadas por meio do Windows Explorer. Essa opção habilita o desenvolvimento mais leve, mas não retorna resultados ou seleções de usuário da exibição de resultados para o aplicativo de chamada. Além disso, como outros protocolos, os aplicativos de pesquisa de terceiros podem assumir os protocolos search-ms:// e search:// se os aplicativos estiverem em conformidade com o conjunto de recursos necessário. Para obter mais informações sobre consultas, consulte Processo de consulta no Windows Search e Consulta do índice programaticamente.

No Windows 7 e posterior, a pesquisa federada oferece um novo provedor de pesquisa que consulta armazenamentos de dados remotos por meio de servidores Web, por meio do protocolo OpenSearch e enumera os resultados como feeds RSS ou Atom XML. Os conectores de pesquisa são junções de namespace que simulam o comportamento da pasta usando um provedor de pesquisa. Para obter mais informações sobre a federação de pesquisa para armazenamentos de dados remotos no Windows 7, consulte Pesquisa federada no Windows.

Indexação de arquivos e itens

O conteúdo indexado é baseado nos tipos de arquivo e dados com suporte por meio de suplementos incluídos no Windows Search e nas regras padrão de inclusão e exclusão para pastas no sistema de arquivos. Por exemplo, os filtros incluídos na Windows Search oferecem suporte a mais de 200 tipos comuns de dados, incluindo documentos do Microsoft Office, email do Microsoft Outlook (em conjunto com o manipulador de protocolo MAPI), arquivos de texto sem formatação, HTML e muito mais. Para obter uma lista completa dos tipos de arquivo com suporte nativo, consulte O que está incluído no índice.

O índice pode ser estendido com manipuladores de propriedades e filtros para expor o conteúdo e as propriedades de novos formatos de arquivo ao índice e ao Windows Explorer. Filtros são uma implementação da interface IFilter. Existem dois tipos de filtros: um que interage com itens individuais, como arquivos, e outro que interage com contêineres, como pastas. Os filtros são multifuncionais, pois oferecem suporte a dados em partes, conteúdo de texto, algumas propriedades e vários idiomas.

Por outro lado, os manipuladores de propriedades têm uma finalidade mais específica: expor as propriedades de tipos de arquivo específicos identificados por extensões de nome de arquivo. Um manipulador de propriedades para um tipo de arquivo pode habilitar propriedades obter e definir e pode enumerar as propriedades associadas a esse tipo de arquivo. Ao contrário dos filtros, os manipuladores de propriedades não dão suporte ao lançamento de dados ou conteúdo de texto, e os manipuladores de propriedades não têm como indicar em qual linguagem uma propriedade de texto está, a menos que ofereçam suporte à gravação de propriedades.

Indexação de um armazenamento de dados

O índice pode ser estendido com manipuladores de protocolo para fornecer acesso a armazenamentos de dados proprietários. Por exemplo, arquivos e itens contidos em armazenamentos de dados que não são do sistema de arquivos (como bancos de dados e armazenamentos de email) exigem um manipulador de protocolo para mapear de uma URL para um fluxo. Os manipuladores de protocolo também podem, opcionalmente, determinar os filtros corretos a serem usados para extrair informações de um fluxo. Os filtros enumeram as URLs do armazenamento de dados. Os itens são indexados individualmente usando o filtro e/ou manipulador de propriedades adequado. Para obter mais informações, consulte Extensão do índice.

Gerenciamento do processo de indexação

Os desenvolvedores de aplicativos podem controlar o escopo e a frequência da indexação do Windows Search usando várias interfaces de gerenciamento. Essas interfaces incluem a funcionalidade de adicionar e remover os diretórios que o indexador examina em busca de alterações, notificar manualmente o índice sobre alterações nos dados, verificar o status do indexador e forçar a reindexação de alguns ou de todos os dados. Para obter mais informações, consulte Gerenciamento de índices.

Integração do sistema do Windows Property com aplicativos do Windows Search

O Sistema de propriedades do Windows é um sistema extensível de leitura/gravação de definições de dados que fornece uma maneira uniforme de expressar metadados sobre itens do Shell. O sistema de propriedades do Windows no Windows Vista e posterior, habilita que você armazene e recupere metadados para itens do Shell. Um item do Shell é qualquer parte única do conteúdo, como um arquivo, pasta, e-mail ou contato. Uma propriedade é uma parte individual de metadados associada a um item do Shell. Os valores de propriedade são expressos como uma estrutura PROPVARIANT.

Uma extensa lista de propriedades comuns está incluída para vários tipos de itens comuns, como fotos, músicas, documentos, mensagens, contatos e arquivos. Os desenvolvedores também podem introduzir suas próprias propriedades na plataforma se nenhuma propriedade existente atender às suas necessidades. Para obter mais informações sobre a integração de aplicativos com o sistema de propriedades do Windows, consulte Desenvolvimento de manipuladores de propriedades.

Visão geral dos manipuladores

Um manipulador é um objeto COM (Component Object Model) que fornece funcionalidade para um item de Shell. A maioria das fontes de dados do Shell oferece um sistema extensível para associar manipuladores a itens. Por exemplo, a pasta do sistema de arquivos usa o sistema de associação para pesquisar os manipuladores de um tipo de arquivo específico. Um manipulador específico é necessário para cada tipo de arquivo. Um manipulador de filtro é necessário para o tipo de arquivo Adobe Acrobat .pdf, por exemplo e outro manipulador de filtro é necessário para o formato de arquivo .doc e assim por diante.

Diferentes manipuladores têm alguma semelhança. No Windows Vista e posterior, todos os manipuladores devem usar uma das seguintes interfaces para inicializar o manipulador: IInitializeWithStream, IInitializeWithItem ou IItinitializeWithFile.

A tabela a seguir lista as tarefas de desenvolvedor de alto nível, o tipo de manipulador necessário para cada tarefa e fornece um link para informações conceituais sobre como executar cada tarefa.

Tarefa Manipulador Informações conceituais
Acesso as propriedades de um arquivo para indexação Manipulador de propriedade Desenvolvimento de manipuladores de propriedades
Propriedades definidas pelo sistema para formatos de arquivos personalizados
Adicionando formatos de área de transferência para o objeto de dados (IDataObject) de um item (os objetos de dados são usados em cenários de arrastar e soltar e copiar/colar.) Manipulador de objeto de dados Criação de manipuladores de dados
Adição de verbos para um item que são comumente exibidos em um menu de atalho Manipulador de menu de atalho Criação de manipuladores de menu de contexto
Personalizar um Menu de Atalho usando Verbos Dinâmicos
Associação de um tipo de arquivo a um ícone específico Manipulador de ícones Criação de manipuladores de ícones
Criação de folhas de propriedades com imagens de interface do usuário e controles que permitem interação personalizada com um tipo de arquivo Manipulador de folha de propriedades Manipuladores de folha de propriedades
A habilitação de um tipo de item para dar suporte a cenários de arrastar e soltar e copiar/colar Manipulador do tipo "soltar" Para obter detalhes, consulte Transferência de objetos Shell com arrastar e soltar e a área de transferência.
Extração de partes de texto e propriedades de documento para indexação Manipulador de filtro Desenvolvimento de manipuladores de filtro
Indexação de um novo tipo de arquivo Manipulador de filtro e manipulador de propriedades Desenvolvimento de manipuladores de filtro
Desenvolvimento de manipuladores de propriedades
Indexação do conteúdo de um armazenamento de dados Manipulador de protocolo Desenvolver manipuladores de protocolo
Visualização de uma exibição simplificada do item Shell no painel de visualização do Windows Explorer Gerenciador de visualização Gerenciadores de visualização
Fornecimento de texto pop-up quando um mouse passa sobre um objeto de interface do usuário Manipulador de infodicas Criação de manipuladores de extensão do Shell (personalização de Infotip)
Fornecimento de uma imagem estática para representar um item do Shell Manipulador de miniaturas Manipuladores de miniaturas

 

A tabela a seguir lista os manipuladores e as interfaces para implementar cada tipo de manipulador.

Manipulador Interfaces
Manipulador do tipo "soltar" IDropTarget, IDropTargetHelper, IPersistFile, IShellExtInit
Manipulador de objeto de dados IDataObject, IPersistFile
Manipulador de filtro IFilter
Manipulador de ícones IExtractIcon
Opcional: IPersist, IPersistFile
Manipulador de infodicas IQueryInfo
Gerenciador de visualização IPreviewHandler
Manipulador de propriedade IPropertyStore
Manipulador de protocolo IFilter, ISearchProtocol, IUrlAccessor
Opcional: ISearchProtocol2, IUrlAccessor2, IUrlAccessor3, IUrlAccessor4
Manipulador de folha de propriedades IShellExtInit, IShellPropSheetExt
Manipulador de menu de atalho IContextMenu, IExplorerCommand, IShellExtInit
Manipulador de miniaturas IThumbnailProvider

 

Observação

Às vezes, um manipulador de propriedades é conhecido como um manipulador de metadados. Às vezes, uma fonte de dados do Shell é conhecida como uma extensão de namespace do Shell. Um manipulador de tipo de arquivo às vezes é conhecido como um manipulador de extensão do Shell ou uma extensão do Shell.

 

Para obter mais informações sobre como criar manipuladores, consulte Criação de manipuladores de extensão do Shell. Para obter mais informações sobre propriedades, consulte Sistema de Propriedades do Windows.

Diretrizes do instalador de suplementos

Use as seguintes diretrizes ao criar um instalador de suplemento:

  • O instalador deve usar o instalador EXE ou MSI.
  • As notas de versão devem ser fornecidas.
  • Uma entrada Adicionar/Remover programas deve ser criada para cada suplemento instalado.
  • O instalador deve assumir todas as configurações do registro para o tipo de arquivo ou repositório específico que o suplemento atual reconhece.
  • Se um suplemento anterior estiver sendo substituído, o instalador deverá notificar o usuário.
  • Se um suplemento mais recente tiver substituído um suplemento anterior, o usuário deverá ser capaz de restaurar a funcionalidade do suplemento anterior e torná-lo o suplemento padrão novamente para esse tipo de arquivo ou armazenamento.

Observação para os implementadores

Antes de criar um filtro ou manipulador de propriedades os desenvolvedores devem considerar o seguinte:

  • Esses manipuladores são extensões em processo que são carregadas em processos que você não controla, como o processo do daemon de filtro, Windows Explorer (pesquisa grep) e hosts de terceiros, como Windows Mail).
  • Você deve escrever um código seguro que seja robusto o suficiente para lidar com formulários arbitrariamente corrompidos do seu formato de arquivo, que foram criados para atacar o sistema.
  • Seu suplemento não deve vazar recursos que produzirão problemas para os processos do host.
  • Seu suplemento não deve falhar, pois também falhará nos processos do host e retardará o processo de filtragem.
  • Como esses manipuladores são executados em um processo de sistema em segundo plano, eles devem ser executados rapidamente com um mínimo de CPU e E/S consumidas para atender aos requisitos de desempenho do sistema.

Portanto, esses suplementos devem ser escritos por desenvolvedores com experiência na criação de código no nível do sistema.

Recursos adicionais

Visão geral do Windows Search

Idiomas Compatíveis com o Windows Search

Usar código gerenciado com os dados do Shell e do Windows Search

Guia do desenvolvedor do Windows Search