Вот пример запроса.Обратите внимание, что он не использует Windows 7 SDK.
using System;
using System.Data.OleDb;
namespace FileSearchingExe
{
class MainProgram
{
static void Main(string[] args)
{
string sqlQuery = "SELECT TOP 10 \"System.ItemPathDisplay\", \"System.DateModified\" FROM \"SystemIndex\" WHERE CONTAINS(*,'\"urSearchWord*\"') " +
"AND scope='file:C:/SomeFolder' ORDER BY System.ItemPathDisplay DESC"; //note the forwardslash in the scope parameter.
// --- Perform the query ---
// create an OleDbConnection object which connects to the indexer provider with the windows application
using (System.Data.OleDb.OleDbConnection conn = new OleDbConnection("provider=Search.CollatorDSO.1;EXTENDED PROPERTIES=\"Application=Windows\""))//queryHelper.ConnectionString))
{
// open the connection
conn.Open();
// now create an OleDB command object with the query we built above and the connection we just opened.
using (OleDbCommand command = new OleDbCommand(sqlQuery, conn))
{
// execute the command, which returns the results as an OleDbDataReader.
using (OleDbDataReader WDSResults = command.ExecuteReader())
{
while (WDSResults.Read())
{
// col 0 is our path in display format
Console.WriteLine("{0}, {1}", WDSResults.GetString(0), WDSResults.GetDateTime(1).ToString());
}
}
}
}
}
}
}
Однако он был адаптирован из примера DSearch в Windows 7 SDK.([SDK] \ Samples \ winui \ WindowsSearch \ DSearch. [SDK] обычно представляет собой «C: \ Program Files \ Microsoft SDK \ Windows \ v7.1»
Обратите внимание, что вы можете сделать запрос SQL более простым(но немного менее гибкий imo), если вы используете SDK * 1006. * Однако, чтобы использовать этот класс и связанные с ним классы, вам нужно иметь ссылку на Microsoft.Search.Interop
, который не включен в Windows 7 SDK как DLL. Однако вы можетеполучите его в виде dll, используя TlbImp.exe (импортер библиотек типов, в [SDK] \ bin) в файле SearchAPI.tlb (в [SDK] \ Lib). Также описано здесь .
Надеюсь, этот пост поможет всем, кому необходимо программно подключиться к поиску Windows в Windows 7 или выше.