AnalyseW

Programming Far Manager plugins

AnalyseW

Far Manager вызывает функцию AnalyseW для открытия панели плагина, эмулирующего файловую систему на базе переданного этой функции файла (например, архива).
HANDLE WINAPI AnalyseW(
  const struct AnalyseInfo *Info
);

Параметры

Info
Указатель на структуру AnalyseInfo - информация, переданная Far Manager'ом, для анализа плагином содержимого файла.
В начале функции проверьте, что поле AnalyseInfo.StructSize >= sizeof(AnalyseInfo).

Возвращаемое значение

Если плагин обрабатывает переданный файл и на базе него эмулирует файловую систему, то плагин должен возвращать описатель, отличный от NULL (INVALID_HANDLE_VALUE считается валидным описателем).

Замечания

  1. Возвращенный плагином описатель будет равен значению поля OpenAnalyseInfo.Handle в функции OpenW(OPEN_ANALYSE,...).
  2. Плагин должен освободить память выделенную под описатель в функции CloseAnalyseW (значение поля CloseAnalyseInfo.Handle).
  3. Если плагин будет эмулировать файловую систему, то необходимо сохранить значение поля AnalyseInfo.FileName во внутренних переменных, т.к. позже оно может понадобиться плагину.
  4. Far Manager при нажатии Enter на выбранном файле опрашивает все плагины, экспортирующих эту функцию. Плагины просматриваются в алфавитном порядке (по имени DLL-модуля) и кто первый вернул значение, отличное от NULL - тому и отдаётся управление. Данное поведение по умолчанию дополнительно регулируется опцией Far Manager "Параметры менеджера плагинов" - "Обработка файла", если опция включена, то будет показано меню со всеми плагинами, экспортирующими эту функцию (подробности смотрите в файле помощи Far Manager).

Пример

Пример из плагина "TmpPanel".
HANDLE WINAPI AnalyseW(const struct AnalyseInfo *Info)
{
  if (Info->FileName == nullptr || !Info->BufferSize)
    return nullptr;

  if (!FSF.ProcessName(Opt.Mask, (wchar_t*)Info->FileName, lstrlen(Info->FileName),PN_CMPNAMELIST))
    return nullptr;

  return HANDLE(1); // будем эмулировать панель на базе переданного Far Manager'ом файла
}
Смотрите также: