是否有可能通过C#实际上做一个Windowssearch(你在Vista中从高亮菜单中find的那个(例如,你写'火',并得到'火狐'))。
谢谢 :)
是的,这可以通过Windows桌面搜索(WDS)API来实现。 你将需要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开始搜索克隆,但是,我通过首先扫描Vista存储开始菜单链接(%appdata%\ Microsoft \ Windows \ Start Menu&C:\ ProgramData \ Microsoft \ Windows \ Start Menu),然后将WDS结果异步加载到后台,这比单纯依靠WDS更好地复制了“开始搜索”行为。
当搜索字段中的文本被更新时,Windows搜索通过查询索引来使用索引来实现结果。 为了这个工作,引擎必须能够非常快速地返回结果,所以对于查找来说非常有效的集合是一个好主意。
然后,当搜索框中的文本发生更改时,您将查询哈希表。