2009-04-30 2 views
3

Wäre es möglich, durch C# tatsächlich eine Windows-Suche (die Sie in Vista aus dem Menü mit Highlighting (z. B. Sie schreiben "Feuer" und erhalten "Firefox")).Machen Sie eine Windows-Highlight-Suche in C#

Thanks :)

+0

Haben Sie schon einmal herausgefunden, wie Sie den Hervorhebungsteil davon machen können? – anon

Antwort

5

Ja, dies ist mit der Windows Desktop Search (WDS) API möglich. Sie benötigen die SDK, die sogar eine .Net-Assembly bereitstellt, wenn ich mich richtig erinnere. Sehen Sie sich dann the documentation an, um zu erfahren, wie Sie den WDS-Index abfragen können. Es ist ganz einfach, hier ist das C# Beispiel bieten sie:

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(); 

Als ich das eine Weile zurück, in einem Projekt verwendet, die Query-String-I verwendet wurde, so etwas wie dieses Jahr:

CSearchManager SearchManager = new CSearchManager(); 
CSearchCatalogManager CatalogManager = SearchManager.GetCatalog("SystemIndex"); 
CSearchQueryHelper QueryHelper = CatalogManager.GetQueryHelper(); 
string connection_string = QueryHelper.ConnectionString; 

Dann werden ein zu tun einfache Dateisuche:

QueryHelper.QueryWhereRestrictions = "AND scope='file:'"; 
QueryHelper.QuerySorting = "System.ItemNameDisplay ASC"; 
string sqlQuery = QueryHelper.GenerateSQLFromUserQuery(Filename); 

Aus der Dokumentation können Sie sehen, wie Sie Abfragen erstellen, die Ihnen die Ergebnisse liefern, die Sie benötigen.

Jetzt eine kurze Notiz. Ich war in der Lage, einen Vista Start Search Klon zu erstellen, aber ich tat es, indem ich zuerst Link-Dateien an den Stellen scannte, wo Vista Startmenü-Links speichert (% appdata% \ Microsoft \ Windows \ Startmenü & C: \ ProgramData \ Microsoft \ Windows \ Start Menu), dann asynchron Laden von WDS-Ergebnissen in den Hintergrund, wodurch das Suchverhalten von Search besser repliziert wird, als wenn Sie sich ausschließlich auf WDS verlassen.

+1

Danke :) Ich frage mich nur, was ist das Feld: Benutzer-ID = ; Passwort = . Mein Benutzername und Passwort auf meinem System/Windows-Account? Danke – Johannes

1

Windows-Suche einen Index, die Ergebnisse zu erzielen, verwendet durch den Index als der Text in das Suchfeld abfragt aktualisiert. Damit dies funktioniert, muss die Engine in der Lage sein, Ergebnisse sehr schnell zurückzugeben, so dass eine Sammlung, die sehr effizient für Nachschlagevorgänge ist, eine gute Idee ist.

Sie würden dann die Hashtabelle abfragen, wenn sich der Text im Suchfeld ändert.