EverythingLib.pas单元的调用示例,涵盖主要方法及常见使用场景:

program EverythingAPIDemo;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, EverythingLib;

procedure BasicSearchDemo;
var
  i: Integer;
  FileName: LPCWSTR;
  FileSize: Int64;
  ftCreated, ftModified: TFileTime;
begin
  // 初始化
  Everything_Reset;

  // 设置搜索参数
  Everything_SetSearchW('*.txt');                     // 搜索所有txt文件
  Everything_SetMatchCase(False);                     // 不区分大小写
  Everything_SetMax(100);                             // 最多返回100条结果
  Everything_SetSort(EVERYTHING_SORT_DATE_MODIFIED_DESCENDING); // 按修改时间降序
  Everything_SetRequestFlags(
    EVERYTHING_REQUEST_FILE_NAME or
    EVERYTHING_REQUEST_PATH or
    EVERYTHING_REQUEST_SIZE or
    EVERYTHING_REQUEST_DATE_MODIFIED
  ); // 请求文件名、路径、大小和修改时间

  // 执行查询(同步模式)
  if Everything_QueryW(True) then
  begin
    // 检查错误
    if Everything_GetLastError <> EVERYTHING_OK then
    begin
      Writeln('搜索失败,错误代码:', Everything_GetLastError);
      Exit;
    end;

    // 获取结果总数
    Writeln('找到 ', Everything_GetNumResults, ' 个结果:');

    // 遍历结果
    for i := 0 to Everything_GetNumResults - 1 do
    begin
      // 获取文件名
      FileName := Everything_GetResultFileNameW(i);
      Write('文件名:', FileName);

      // 获取文件大小(需先请求EVERYTHING_REQUEST_SIZE)
      if Everything_GetResultSize(i, FileSize) then
        Write(', 大小:', FileSize, ' 字节');

      // 获取修改时间(需先请求EVERYTHING_REQUEST_DATE_MODIFIED)
      if Everything_GetResultDateModified(i, ftModified) then
        Write(', 修改时间:', FileTimeToDateTime(ftModified));

      Writeln;
    end;
  end;

  // 清理资源
  Everything_CleanUp;
end;

procedure AdvancedUsageDemo;
var
  hWnd: HWND;
  dwFlags: DWORD;
begin
  // 设置异步查询
  hWnd := AllocateHWnd(nil); // 需要实际处理消息的窗口句柄
  Everything_SetReplyWindow(hWnd);
  Everything_SetReplyID(123); // 自定义消息标识

  // 执行异步查询
  Everything_QueryW(False);

  // 在窗口消息循环中处理查询结果...
  // 使用Everything_IsQueryReply判断消息是否属于查询回复

  // 获取当前配置
  dwFlags := Everything_GetRequestFlags;
  Writeln('当前请求标志:', IntToHex(dwFlags, 8));

  // 获取Everything版本信息
  Writeln(Format('Everything版本:%d.%d.%d.%d', [
    Everything_GetMajorVersion,
    Everything_GetMinorVersion,
    Everything_GetRevision,
    Everything_GetBuildNumber
  ]));

  // 数据库操作示例
  if not Everything_IsDBLoaded then
    Writeln('数据库未加载!');

  // 重建索引(需要管理员权限)
  if Everything_IsAdmin then
    Everything_RebuildDB;
end;

// 辅助函数:将FILETIME转换为Delphi的TDateTime
function FileTimeToDateTime(ft: TFileTime): TDateTime;
var
  st: TSystemTime;
begin
  FileTimeToSystemTime(ft, st);
  Result := SystemTimeToDateTime(st);
end;

begin
  try
    BasicSearchDemo;
    AdvancedUsageDemo;
  except
    on E: Exception do
      Writeln('发生异常:', E.Message);
  end;
  Readln;
end.

示例说明:

  1. 基本搜索流程

    • 使用Everything_Reset初始化

    • 设置搜索参数(匹配模式、排序方式、返回字段)

    • 执行同步查询Everything_QueryW(True)

    • 遍历结果并获取文件属性

  2. 高级功能

    • 异步查询与窗口消息处理

    • 获取系统配置信息(版本号、数据库状态)

    • 数据库维护操作(重建索引)

  3. 关键方法覆盖

    • 设置类:SetSearchWSetMatchCaseSetSort

    • 查询类:QueryWIsQueryReply

    • 结果获取类:GetNumResultsGetResultFileNameWGetResultSize

    • 系统操作类:RebuildDBIsAdminGetMajorVersion

  4. 注意事项

    • Unicode/ANSI函数需根据项目字符集选择

    • 异步查询需要配合窗口消息循环

    • 部分操作(如重建索引)需要管理员权限

    • 请求字段需通过SetRequestFlags明确指定

常见场景扩展:

  • 分页查询:结合SetMaxSetOffset

  • 高亮显示:使用GetResultHighlightedXXX系列函数

  • 运行统计GetRunCountFromFileNameW获取文件打开次数

  • 文件监控:通过UpdateAllFolderIndexes实时更新索引

posted @ 2025-04-12 08:01  RulesOS  阅读(41)  评论(0)    收藏  举报