Windows Search 4查询-Delphi示例 [英] Windows Search 4 Query - Delphi Example
本文介绍了Windows Search 4查询-Delphi示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下网页描述了以编程方式查询Windows Search:
The following web page describes querying Windows Search programmatically:
http://msdn.microsoft.com/en-us/library/aa965362.aspx
有人使用Delphi/Pascal编写示例吗?
Does anyone have examples using Delphi/Pascal?
我想到的例子很简单:
- 搜索某些文件类型.
- 搜索文件中的特定文本.
- 将上述搜索限制在特定路径上.
推荐答案
这是我前一段时间做过的-请注意,它可能已经过时了:
Here's one I did a while ago - be aware that it may be out of date:
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是您要执行的查询.
I think it's all pretty self explanatory, fQuery is the query you want to execute.
问候基思
这篇关于Windows Search 4查询-Delphi示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文