Windows Search 4 Query - пример Delphi

Следующая веб-страница описывает запросы Windows Search программно:

http://msdn.microsoft.com/en-us/library/aa965362.aspx

У кого-либо есть примеры с помощью Delphi/Паскаль?

Примеры, которые я имею в виду, довольно просты:

  1. Поиск определенных типов файлов.
  2. Поиск определенного текста в файлах.
  3. Ограничьте их выше поисков к определенному пути.

1
задан Greg Bishop 30 June 2010 в 21:08
поделиться

1 ответ

Вот один, который я сделал некоторое время назад - имейте в виду, что он может быть устаревшим:

const
  GENERAL_COLUMNS = '"System.Itemname", "System.Size", "System.DateCreated", "System.ItemDate",' +
                    '"System.ItemFolderPathDisplay", "System.Search.AutoSummary", "System.ItemType"';

  IMAGE_COLUMNS = '"System.Image.HorizontalSize", "System.Image.VerticalSize", '+
                  '"System.Image.BitDepth", "System.Image.Compression", '+
                  '"System.Photo.CameraModel", "System.Photo.DateTaken", "System.Photo.Flash"';
  MUSIC_COLUMNS = '"System.Music.Artist", "System.Music.Genre", "System.Music.TrackNumber", '+
                  '"System.Audio.Compression", "System.Audio.SampleRate", '+
                  '"System.DRM.IsProtected", "System.Music.AlbumTitle", "System.Rating", '+
                  '"System.Audio.EncodingBitrate"';

procedure TWDSDataSource.RetrieveDataFromDB;
var
  manager : ISearchManager;
  catalogManager : ISearchCatalogManager;
  queryHelper : ISearchQueryHelper;
  wQuery : string;
  temp : PWideChar;
  sTemp : string;
begin
  manager := CoCSearchManager.Create;
  if Succeeded(manager.GetCatalog('SystemIndex',catalogManager)) then
  begin
    if Succeeded(catalogManager.GetQueryHelper(queryHelper)) then
    begin
      if fMaxResults  0 then
        queryHelper.Set_QueryMaxResults(fMaxResults);

      queryHelper.Set_QuerySelectColumns(GENERAL_COLUMNS + ',' + MUSIC_COLUMNS + ',' + IMAGE_COLUMNS);
      queryHelper.GenerateSQLFromUserQuery(PWideChar(fQuery),temp);
      wQuery := temp;

      queryHelper.Get_ConnectionString(temp);
      sTemp := temp;
      dataset := CreateComObject(CLASS_Recordset) as _Recordset;
      dataset.CursorLocation := adUseClient;
      dataset.Open(wQuery, stemp, adOpenForwardOnly, adLockReadOnly, adCmdText);
      dataset.Set_ActiveConnection(nil);
      bDatabaseFailed := false;
    end else
      bDatabaseFailed := true;
  end else
    bDatabaseFailed := true;
end;

Я думаю, что все довольно понятно, fQuery - это запрос, который вы хотите выполнить.

С уважением Кейт

2
ответ дан 2 September 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: