1

以下网页描述了以编程方式查询 Windows 搜索:

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

有人有使用 Delphi/Pascal 的例子吗?

我想到的例子相当简单:

  1. 搜索某些文件类型。
  2. 在文件中搜索特定文本。
  3. 将上述这些搜索限制为特定路径。
4

1 回答 1

2

这是我不久前做的一个 - 请注意它可能已经过时了:

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

  IMAGE_COLUMNS = '"System.Image.Horizo​​ntalSize", "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"';

程序 TWDSDataSource.RetrieveDataFromDB;
变量
  经理:ISearchManager;
  目录管理器:ISearchCatalogManager;
  查询助手:ISearchQueryHelper;
  wQuery:字符串;
  温度:PWideChar;
  sTemp:字符串;
开始
  经理 := CoCSearchManager.Create;
  如果成功(manager.GetCatalog('SystemIndex',catalogManager)) 然后
  开始
    如果成功(catalogManager.GetQueryHelper(queryHelper))那么
    开始
      如果 fMaxResults 为 0 则
        queryHelper.Set_QueryMaxResults(fMaxResults);

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

      queryHelper.Get_ConnectionString(temp);
      sTemp := 温度;
      数据集 := CreateComObject(CLASS_Recordset) as _Recordset;
      dataset.CursorLocation := adUseClient;
      dataset.Open(wQuery, stemp, adOpenForwardOnly, adLockReadOnly, adCmdText);
      dataset.Set_ActiveConnection(nil);
      bDatabaseFailed := false;
    以其他方式结束
      bDatabaseFailed := true;
  以其他方式结束
    bDatabaseFailed := true;
结尾;

我认为这一切都是不言自明的,fQuery 是您要执行的查询。

问候基思

于 2010-06-30T22:21:27.517 回答