OpenW

Programming Far Manager plugins

OpenW

Функция OpenW вызывается Far Manager'ом для запуска плагина.
HANDLE WINAPI OpenW(
  const struct OpenInfo *Info
);

Параметры

Info
Указатель на структуру OpenInfo, Far Manager передает служебную информацию об открытом плагине.
В начале функции проверьте, что поле OpenInfo.StructSize >= sizeof(OpenInfo).

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

Eсли функция завершается успешно, то возвращаемое значение - описатель плагина. Этот описатель позже будет передаваться другим функциям плагина для того, чтобы позволить им различать различные копии загруженного плагина. Формат и содержание описателя не важны для Far Manager'а - они могут быть, к примеру, адресом внутреннего объекта плагина, или адресом структуры с данными плагина, или любым другим уникальным идентификатором, отличным от нуля.
В случае неудачного завершения функции, возвращаемое значение должно равняться NULL.

Замечание для OpenW Внимание!

  • Если значение поля OpenInfo::OpenFrom, принимаемое плагином, равно OPEN_FROMMACRO, то возвращаемое значение формируется по правилам:
    - Если плагин вернул 0, макросу возвращается false.
    - Если плагин вернул 1 или INVALID_HANDLE_VALUE, макросу возвращается true.
    - Чтобы вернуть макросу более одной величины (или одну величину не-булевого типа), плагин должен заполнить структуру FarMacroCall и вернуть в Far Manager указатель на эту структуру.
    - Если плагин хочет открыть панель, он должен поместить её описатель в начальный элемент массива Values структуры FarMacroCall и вернуть в Far Manager указатель на эту структуру. Элемент должен быть типа FMVT_PANEL. Макросу возвращается значение true.

Замечания

  1. Вы можете использовать эту функцию для реализации плагинов, работающих без создания файловых панелей. Просто выполните все необходимые действия и верните NULL.
  2. В случае, если плагин вызывает функцию после удачного выполнения AnalyseW и желает монопольно обработать файл (т.е. другие плагины не будут опрошены Far Manager'ом) без создания панели, то верните в функции PANEL_STOP.

Пример

Пример из плагина "ProcList".
HANDLE WINAPI OpenW(const struct OpenInfo *OInfo)
{
  Plist* hPlugin = new Plist();

  if (OInfo->OpenFrom == OPEN_COMMANDLINE && (NORM_M_PREFIX(reinterpret_cast< LPCWSTR >(OInfo->Data))))
  {
    if (!hPlugin->Connect((wchar_t*)OInfo->Data))
    {
      delete hPlugin;
      hPlugin = nullptr;
    }
  }

  return hPlugin;
}