c# - 在 C# 中进行 Windows 高亮搜索

标签 c# windows search wds

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

谢谢:)

最佳答案

是的,这可以通过 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\开始菜单),然后在后台异步加载 WDS 结果,这比仅依赖 WDS 更好地复制了开始搜索行为。

关于c# - 在 C# 中进行 Windows 高亮搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/808779/

相关文章:

c# - 表单丢失后无法获得焦点

c# - 如何在 C# 中获取加拿大安大略省的当前日期时间值?

linux - Git 存档行结尾与克隆不同

通过 MYSQL php 搜索 phpbb 的 'topic_title',但精确匹配不起作用

linux - 如何使用linux命令列出包含特定字符串的文件

c# - 如何保护我的 .NET 程序集不被反编译?

c# - Linq 中的单元测试虚拟方法

windows - 为什么 WMDC/ActiveSync 如此不稳定?

windows - 批处理脚本 (Windows) 字符串替换

java - Java 搜索算法 - 电梯递归函数 - 与基本情况的斗争