# AdvControl

Функция `AdvControl` позволяет запрашивать различную информацию и выполнять управляющие действия. Она работает везде: в панелях/редакторе/вьюере.

    intptr_t WINAPI AdvControl(
      const GUID *PluginId,
      enum ADVANCED_CONTROL_COMMANDS Command,
      intptr_t Param1,
      void *Param2
    );

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

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле `GlobalInfo.Guid` функции GetGlobalInfoW).
Command
Тип команды. Может быть следующим (перечисление ADVANCED_CONTROL_COMMANDS):

Команда | Описание
--- | ---
ACTL_COMMIT | "Фиксирует" действие последней операции с окнами (например, после `ACTL_SETCURRENTWINDOW`). `Param1` не используется. `Param2` не используется. Функция возвращает `TRUE` в случае успеха и `FALSE` при неудаче.
ACTL_GETARRAYCOLOR | Получить все цвета Far Manager. `Param1` размер буфера, в элементах FarColor. `Param2` указатель на буфер плагина, в который будут скопированы текущие цветовые атрибуты. `Param2 = NULL` позволяет узнать количество элементов в массиве цветов для копирования. Функция всегда возвращает количество элементов в массиве цветов.
ACTL_GETCOLOR | Получить цвет Far Manager по индексу. `Param1` одна из констант COL_*, описанных в `farcolor.hpp` `Param2` указывает на переменную типа FarColor, в которую будет помещен соответствующий индексу код цвета. Функция возвращает `TRUE`, если удалось получить указанные цветовые атрибуты.
ACTL_GETCURSORPOS | Получить информацию о положении курсора относительно окна Far Manager. `Param1` не используется. `Param2` указатель на структуру COORD. Функция возвращает `TRUE`, если положение курсора удалось получить, иначе - `FALSE`.
ACTL_GETFARHWND | Возвращает `HWND` текущего окна Far Manager. `Param1` не используется. `Param2` не используется.
ACTL_GETFARRECT | Получить информацию о координатах окна Far Manager в консольном буфере. `Param1` не используется. `Param2` указатель на структуру SMALL_RECT. Функция возвращает `TRUE`, если координаты окна Far Manager удалось получить, иначе - `FALSE`.
ACTL_GETFARMANAGERVERSION | Узнать версию Far Manager. `Param1` не используется. `Param2` указывает на переменную типа VersionInfo, в которую будет помещена информация о версии Far Manager. Функция всегда возвращает `TRUE`.
ACTL_GETWINDOWCOUNT | Возвращает число открытых окон в Far Manager. `Param1` не используется. `Param2` не используется. Минимальное число окон равно `1` (при запуске Far Manager: в обычном режиме - файловые панели; с ключами `-e` или `-v` - редактор или программа просмотра, соответственно).
ACTL_GETWINDOWINFO | Получить информацию о конкретном окне Far Manager. `Param1` не используется. `Param2` указатель на структуру WindowInfo. Функция возвращает `TRUE`, если окно с номером `WindowInfo.Pos` существует и `FALSE` - такого окна нет (поля структуры WindowInfo не заполняются). `WindowInfo.Pos` надо инициализировать перед вызовом функции. Память под `WindowInfo.TypeName` и `WindowInfo.Name` плагин должен выделить самостоятельно, требуемые размеры можно получить передав `NULL` в качестве `WindowInfo.TypeName` и `WindowInfo.Name`.
ACTL_GETWINDOWTYPE | Получить информацию о типе окна Far Manager. `Param1` не используется. `Param2` указатель на структуру WindowType. Функция возвращает `TRUE`, если удалось определить тип окна. В отличие от `ACTL_GETWINDOWINFO` эту команду можно вызывать из любых тредов.
ACTL_QUIT | Завершение работы Far Manager. `Param1` не используется. `Param2` не используется.
ACTL_REDRAWALL | Перерисовка всех окон Far Manager. `Param1` не используется. `Param2` не используется.
ACTL_SETARRAYCOLOR | Изменить заданный диапазон цветовой схемы Far Manager. `Param1` не используется. `Param2` указатель на структуру FarSetColors. Функция возвращает `TRUE` при успешной замене заданного диапазона цветовой схемы и `FALSE` для неверно заданных параметров в структуре FarSetColors.
ACTL_SETCURRENTWINDOW | Позволяет переключиться в конкретное окно Far Manager. `Param1` число, задающее номер активного окна (нумерация начинается с `0`). `Param2` не используется. Функция возвращает `TRUE`, если переключение состоялось и `FALSE` при неудаче (не существует требуемого окна). Внимание! Переключение не произойдёт до тех пор, пока не будет вызвана команда `ACTL_COMMIT` или пока Far Manager не получит управление.
ACTL_SETCURSORPOS | Устанавливает положение курсора относительно окна Far Manager. `Param1` не используется. `Param2` указатель на заполненную структуру COORD. Функция возвращает `TRUE`, если положение курсора удалось изменить, иначе - `FALSE`.
ACTL_SETPROGRESSSTATE | Устанавливает тип и состояние индикатора прогресса на кнопке Far Manager в панели задач. `Param1` может принимать одно из следующих значений (перечисление `TASKBARPROGRESSTATE`):
Константа | Описание
--- | ---
TBPS_NOPROGRESS |
TBPS_INDETERMINATE |
TBPS_NORMAL |
TBPS_ERROR |
TBPS_PAUSED |
`Param2` не используется. Функция возвращает `TRUE`. Внимание! Работает в Windows 7 и выше. Для подробностей см. https://msdn.microsoft.com - метод ITaskbarList3::SetProgressStat
ACTL_SETPROGRESSVALUE | Отображает и корректирует прогресс операции на кнопке Far Manager в панели задач. `Param1` не используется. `Param2` указатель на структуру ProgressValue. Функция возвращает `TRUE`. Внимание! Работает в Windows 7 и выше. Для подробностей см. https://msdn.microsoft.com - метод ITaskbarList3::SetProgressValue
ACTL_PROGRESSNOTIFY | Far Manager выполняет стандартное оповещение о завершении операции (при неактивном окне приложения кратковременное мерцание кнопкой Far Manager в панели задач и последующая подсветка её до получения окном фокуса). `Param1` не используется. `Param2` не используется. Функция возвращает `TRUE`.
ACTL_SYNCHRO | Позволяет потоку, запущенному плагином, выполнить код в контексте главного потока Far Manager посредством вызова функции ProcessSynchroEventW. `Param1` не используется. `Param2` указатель на данные, передающиеся в функцию `ProcessSynchroEventW`, может быть `NULL`. Функция всегда возвращает `0`. Внимание! Проверка на вызов функции `ProcessSynchroEventW` проводится в `GetInputRecord`, т.е. гарантированного времени отклика нет, но должно быть достаточно быстро.
ACTL_WAITKEY | Ожидать клавишу. `Param1` не используется. `Param2 = NULL` - ждём любую клавишу. `Param2` указатель на заполненную структуру INPUT_RECORD (код клавиши) - ждём конкретную клавишу. Функция всегда возвращает `0`.

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

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

Смотрите описание `Command`.
Смотрите также:
PanelControl, EditorControl, ViewerControl