Question

Serait-il possible, avec c #, de faire une recherche dans Windows (celle que vous trouvez dans Vista dans le menu en surbrillance (par exemple, vous écrivez 'fire' et obtenez 'firefox')).

Merci :))

Était-ce utile?

La solution

Oui, cela est possible avec l’API Windows Desktop Search (WDS). Vous aurez besoin de SDK , qui fournit même un assemblage .Net si je me souviens bien. Consultez ensuite la documentation pour savoir comment procéder. interroger l'index WDS. C’est assez simple, voici l’exemple C # fourni:

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

Lorsque j'ai utilisé cela dans un projet il y a quelque temps, la chaîne de requête que j'ai utilisée s'apparentait à quelque chose comme ceci:

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

Ensuite, effectuez une recherche de fichier simple:

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

Dans la documentation, vous apprendrez à créer des requêtes qui vous permettront d'obtenir les résultats souhaités.

Maintenant, une note rapide. J'ai pu créer un clone Vista Start Search. Cependant, je l'ai d'abord analysé les fichiers de liens situés dans les emplacements où Vista stocke les liens du menu Démarrer (% appdata% \ Microsoft \ Windows \ Menu Démarrer & amp; C: \ ProgramData \ Microsoft \ Windows \ Start Menu), puis le chargement asynchrone des résultats WDS en arrière-plan reproduit mieux le comportement de la recherche démarrée que s’appuyant uniquement sur WDS.

Autres conseils

La recherche Windows utilise un index pour obtenir les résultats en l'interrogeant au fur et à mesure que le texte du champ de recherche est mis à jour. Pour que cela fonctionne, le moteur doit être capable de renvoyer les résultats très rapidement. Une collection très efficace pour les recherches est une bonne idée.

Vous pouvez alors interroger la table de hachage lorsque le texte de la zone de recherche change.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top