# PluginsControl

Функция `PluginsControl` позволяет управлять сторонними плагинами.

    intptr_t WINAPI PluginsControl(
      HANDLE hHandle,
      enum FAR_PLUGINS_CONTROL_COMMANDS Command,
      intptr_t Param1,
      void *Param2
    );

### Параметры

hHandle
Смотрите описание `Command`.
Command
Может быть одним из следующих значений (перечисление FAR_PLUGINS_CONTROL_COMMANDS):

Команда | Описание
--- | ---
PCTL_LOADPLUGIN, PCTL_FORCEDLOADPLUGIN | Загрузить необходимый плагин обычным способом (плагин не всегда грузится в память, данные могут браться из кеша), либо форсировано сразу в память (может понадобиться для межплагинового взаимодействия). `hHandle` установите в значение `INVALID_HANDLE_VALUE`. `Param1` должен быть установлен в одно из значений (перечисление FAR_PLUGIN_LOAD_TYPE):
Тип | Описание
--- | ---
PLT_PATH | Полный путь с именем dll-файла плагина.
`Param2` указывает на строку, содержащую полный путь с именем dll-файла плагина. Функция возвращает описатель плагина, если плагин удалось загрузить, и `NULL` - если не удалось.
PCTL_FINDPLUGIN | Найти необходимый плагин среди установленных. `hHandle` установите в значение `INVALID_HANDLE_VALUE`. `Param1` должен быть установлен в одно из значений (перечисление FAR_PLUGIN_FIND_TYPE):
Тип | Описание
--- | ---
PFM_GUID | Искать по значению GUIDа плагина.
PFM_MODULENAME | Искать по имени dll-файла плагина.
`Param2` указывает либо на структуру с значением GUID, либо на строку, содержащую имя dll-файла плагина. Функция возвращает описатель найденного плагина, либо `NULL`, если плагин не удалось найти.
PCTL_UNLOADPLUGIN | Выгрузить плагин. `hHandle` описатель установленного плагина, его можно получить по команде PCTL_FINDPLUGIN. `Param1` не используется. `Param2` не используется. Функция возвращает `TRUE`, если плагин удалось выгрузить.
PCTL_GETPLUGININFORMATION | Получить суммарную информацию об установленном плагине. `hHandle` описатель установленного плагина, его можно получить по команде PCTL_FINDPLUGIN или PCTL_GETPLUGINS. `Param1` размер буфера под запрошенные данные. Начало буфера - структура типа FarGetPluginInformation, затем следуют компоненты структуры. `Param2` указатель на структуру FarGetPluginInformation, может быть `NULL` для запроса размера буфера. Функция возвращает необходимый размер буфера.
PCTL_GETPLUGINS | Получить описатели всех установленных плагинов. `hHandle` установите в значение `INVALID_HANDLE_VALUE`. `Param1` количество элементов в массиве `Param2`. `Param2` массив описателей `HANDLE`, буфер под данные выделяет плагин, может быть `NULL` для запроса количества элементов. Функция возвращает количество установленных плагинов.

Param1
Указывает на `Параметр1` команды. Смотрите описание `Command`.
Param2
Указывает на `Параметр2` команды. Смотрите описание `Command`.

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

Смотрите описание `Command`.

### Замечания

### Пример

    const wchar_t *PlugPath = L"C:\\FAR\\Plugins\\AutoWrap\\AutoWrap.dll";

    //загрузим либо выгрузим плагин
    if (Load || Unload)
    {
      if (Load)
        Info.PluginsControl(INVALID_HANDLE_VALUE,PCTL_LOADPLUGIN,PLT_PATH,PlugPath);
      else
      {
        HANDLE hPlugin = reinterpret_cast(Info.PluginsControl(INVALID_HANDLE_VALUE,PCTL_FINDPLUGIN,PFM_MODULENAME,PlugPath));
        if(hPlugin)
          Info.PluginsControl(hPlugin,PCTL_UNLOADPLUGIN,0,nullptr);
      }
    }

Смотрите также:
PanelControl