Вопрос

Можно ли через С# на самом деле выполнить поиск в Windows (тот, который вы найдете в Vista из меню с подсветкой (например, вы пишете «fire» и получаете «firefox»)).

Спасибо :)

Это было полезно?

Решение

Да, это возможно с помощью API Windows Desktop Search (WDS).Вам понадобится SDK, который даже предоставляет сборку .Net, если я правильно помню.Тогда посмотрите документация чтобы узнать, как запросить индекс WDS.Это довольно просто, вот пример C#, который они предоставляют:

OleDbConnection conn = new OleDbConnection(
    "Data Source=(local);Initial Catalog=Search.CollatorDSO;Integrated Security=SSPI;User ID=<username>;Password=<password>");

OleDbDataReader rdr = null;

conn.Open();

OleDbCommand cmd = new OleDbCommand("SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX", conn);

rdr = cmd.ExecuteReader();

while (rdr.Read())
{
    Console.WriteLine(rdr[0]);
}

rdr.Close();
conn.Close();

Когда я некоторое время назад использовал это в проекте, строка запроса, которую я использовал, была построена примерно так:

CSearchManager SearchManager = new CSearchManager();
CSearchCatalogManager CatalogManager = SearchManager.GetCatalog("SystemIndex");
CSearchQueryHelper QueryHelper = CatalogManager.GetQueryHelper();
string connection_string = QueryHelper.ConnectionString;

Затем выполните простой поиск файлов:

QueryHelper.QueryWhereRestrictions = "AND scope='file:'";
QueryHelper.QuerySorting = "System.ItemNameDisplay ASC";
string sqlQuery = QueryHelper.GenerateSQLFromUserQuery(Filename);

Из документации вы можете узнать, как создавать запросы, которые дают нужные вам результаты.

Теперь небольшое замечание.Мне удалось создать клон Vista Start Search, однако я сделал это, сначала просканировав файлы ссылок в тех местах, где Vista хранит ссылки меню «Пуск» (%appdata%\Microsoft\Windows\Start Menu & C:\ProgramData\Microsoft\Windows \Start Menu), а затем асинхронно загружает результаты WDS в фоновом режиме, что лучше воспроизводит поведение начала поиска, чем полагаться исключительно на WDS.

Другие советы

Поиск Windows использует индекс для получения результатов путем запроса индекса по мере обновления текста в поле поиска.Чтобы это работало, движок должен быть способен очень быстро возвращать результаты, поэтому хорошей идеей является коллекция, которая очень эффективна для поиска.

Затем вы запросите хеш-таблицу, когда текст в поле поиска изменится.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top