문제

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는 인덱스를 사용하여 검색 필드의 텍스트가 업데이트 될 때 인덱스를 쿼리하여 결과를 달성합니다. 이 작업을 수행하려면 엔진이 결과를 매우 빠르게 반환 할 수 있어야하므로 조회에 매우 효율적인 컬렉션이 좋은 생각입니다.

그런 다음 검색 상자의 텍스트가 변경되면 해시 테이블을 쿼리하게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top