C#에서 Windows 하이라이트 검색 만들기
문제
C#을 통해 실제로 Windows 검색을 수행하는 것이 가능합니까 (메뉴에서 Vista에서 찾을 수있는 것 (예 : 'Fire'를 작성하고 'Firefox'를 얻음)).
감사 :)
해결책
예, WDS (Windows Desktop Search) 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 Start Search Clone을 구축 할 수 있었지만 Vista Stores Start 메뉴 링크 (%AppData% Microsoft Windows Start Start Menu & C : ProgramData Windows Windows Windows Windows start 메뉴), 그런 다음 WDS를 비동기로로드하면 백그라운드가 발생하여 WDS에만 의존하는 것보다 검색 동작을 더 잘 복제합니다.
다른 팁
Windows Search는 인덱스를 사용하여 검색 필드의 텍스트가 업데이트 될 때 인덱스를 쿼리하여 결과를 달성합니다. 이 작업을 수행하려면 엔진이 결과를 매우 빠르게 반환 할 수 있어야하므로 조회에 매우 효율적인 컬렉션이 좋은 생각입니다.
그런 다음 검색 상자의 텍스트가 변경되면 해시 테이블을 쿼리하게됩니다.