在c#中使窗口突出显示搜索

时间:2009-04-30 20:04:04

标签: c# windows search wds

是否可以通过c#实际进行Windows搜索(您在菜单中使用higlighting找到的那个(例如,您编写'fire'并获取'firefox')。

谢谢:)

2 个答案:

答案 0 :(得分:5)

是的,这可以通过Windows桌面搜索(WDS)API实现。如果我没记错的话,你需要SDK,它甚至可以提供.Net程序集。然后查看the documentation以了解如何查询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开始搜索克隆,但是,我首先扫描了Vista存储开始菜单链接的地方的链接文件(%appdata%\ Microsoft \ Windows \ Start Menu&amp; C:\ ProgramData \ Microsoft \ Windows \ Start Menu),然后在后台异步加载WDS结果,这比完全依赖WDS复制开始搜索行为。

答案 1 :(得分:1)

Windows搜索使用索引通过在更新搜索字段中的文本时查询索引来实现结果。为了使其工作,引擎必须能够非常快速地返回结果,因此一个非常有效的查找集合是一个好主意。

然后,当搜索框中的文本发生变化时,您将查询哈希表。