【问题标题】:make a windows highlight search in c#在 C# 中进行 Windows 高亮搜索
【发布时间】:2009-04-30 20:04:03
【问题描述】:

是否有可能通过 c# 实际进行 windows 搜索(您在 Vista 中通过突出显示的菜单中找到的搜索(例如,您编写 'fire' 并获得 'firefox')。

谢谢:)

【问题讨论】:

  • 你有没有想过如何做这部分的突出显示?

标签: c# windows search wds


【解决方案1】:

是的,这可以通过 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 & C:\ProgramData\Microsoft\Windows \Start Menu),然后在后台异步加载 WDS 结果,这比仅依赖 WDS 更好地复制 Start Search 行为。

【讨论】:

  • 谢谢 :) 我只是想知道该字段是什么:用户 ID=;密码=。我的系统/Windows 帐户上的用户名和密码?谢谢
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2015-07-08
    • 2019-03-08
    相关资源
    最近更新 更多