Frage

Die folgende Webseite beschreibt das Abfragen der Windows-Suche programmatisch:

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

Hat jemand Beispiele mit Delphi / Pascal?

Beispiele I im Sinn haben, sind recht einfach:

  1. Suchen Sie nach bestimmten Dateitypen.
  2. Suchen nach einem bestimmten Text innerhalb von Dateien.
  3. als diese oben Suche auf einen bestimmten Pfad.
War es hilfreich?

Lösung

Hier ist ein ich vor einer Weile tat - beachten Sie, dass es veraltet aus kann:

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;

Ich denke, es ist alles ziemlich selbsterklärend, fQuery ist die Abfrage, die Sie ausführen möchten.

Viele Grüße Keith

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top