【问题标题】:Windows Search 4 Query - Delphi ExampleWindows Search 4 查询 - Delphi 示例
【发布时间】:2010-06-30 21:08:46
【问题描述】:

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

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

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

我想到的例子很简单:

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

【问题讨论】:

    标签: delphi pascal windows-search


    【解决方案1】:

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

    常量 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 是您要执行的查询。

    问候 基思

    【讨论】:

    • 感谢您的示例代码。这个单元的USES子句是什么?
    • AdoDB、Windows、SysUtils、ComObj、图形、变体、ShellApi、ShlObj、AdoInt、JPeg、Utils、SearchAPILib_tlb、ThreadSafeJpeg;大多数可能无关紧要。
    • 我发现我需要以下uses子句:uses Windows、SysUtils、Classes、DB、ComObj、AdoInt、SearchAPILib_TLB、ADODB;最后一个跟进(我认为):数据集定义为什么样的组件?我假设它是 TADODataset 组件,但我收到一个编译错误,即 Open 过程的参数太多。
    • 我倾向于直接使用 ADO 类型库而不是使用 delphi 组件,因此调用 CreateComObject - 即数据集是一个 _Recordset。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2011-07-12
    • 2019-04-14
    相关资源
    最近更新 更多