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

O SDK do Windows Search fornece um assembly de interoperabilidade para você trabalhar com objetos COM (Component Object Model) expostos pelo Windows Search e outros programas nas interfaces e classes usando código gerenciado. O assembly de interoperabilidade é assinado digitalmente pela Microsoft e pode ser encontrado com os exemplos da Pesquisa do Windows.

Este tópico é organizado da seguinte maneira:

Usando o CodePack da API do Windows

Se você estiver trabalhando no ambiente do Microsoft .NET, use o Pacote de Códigos da API do Windows para Microsoft .NET Framework para obter os resultados da pesquisa ou apenas navegue pelo namespace. O Pacote de Código da API do Windows para Microsoft .NET Framework fornece uma coleção de itens do Shell que são essencialmente wrappers em torno da interface IShellItem nativa. Você pode iterar nessa coleção e obter os vários valores de propriedade de maneira semelhante a como enumerar os resultados em uma tabela de uma consulta OLE DB (Object Linking and Embedding Database).

O snippet de código a seguir ilustra como iterar em itens de pesquisa e obter os valores de propriedade para cada um.

foreach (ShellObject so in KnownFolders.SavedSearches)
{
    searchFolder = new ShellSearchFolder(finalSearchCondition, (ShellContainer)so);
    List<ShellObject> items = new List<ShellObject>();
    foreach (ShellObject so2 in searchFolder) items.Add(so2);   
}

Acessando resultados de índice

Você pode acessar os resultados do índice por meio do OLE DB ou do modelo de dados do Shell. Há vantagens e desvantagens com qualquer abordagem. Uma vantagem é que o OLE DB e o SQL (linguagem SQL) são familiares para programadores de banco de dados. Outras vantagens são o melhor controle sobre o desempenho ao consultar apenas o indexador e o acesso a funcionalidades adicionais, como a capacidade de localizar resultados anteriores em um novo conjunto de linhas rapidamente.

As vantagens do modelo de dados do Shell são que ele abstrai em diferentes fontes de informações, como OpenSearch, e fornece acesso a funcionalidades adicionais, como miniaturas e manipuladores de propriedades. O modelo de objeto Shell também não requer suporte especial para casos de resultados que não sejam de nome de arquivo, como itens de email e resultados do OneNote, nem para qualquer item que resida no índice do usuário. Observe que no Shell KNOWNFOLDERID é o escopo de pasta conhecido para conteúdo indexado local. Para obter mais informações sobre como criar uma fonte de dados do Shell, consulte Implementando as interfaces básicas de objeto de pasta.

As fontes de dados do OpenSearch não são expostas por meio do OLE DB para pesquisa federada no Windows 7 e posterior. Por esse motivo, recomendamos que você considere escrever um provedor LINQ para o namespace do Shell em vez de usar o OLE DB para acessar os resultados do indexador. Para obter mais informações, consulte Passo a passo: criando um provedor LINQ IQueryable.

Aplicativo de exemplo usando o Codepack da API do Windows

A captura de tela a seguir representa uma simulação de um aplicativo de exemplo criado com o Pacote de Códigos da API do Windows para Microsoft .NET Framework.

captura de tela do aplicativo media player mostrando mensagens de email

Conceitual

Pesquisa federada no Windows

Outros recursos

Interoperabilidade entre idiomas