 Programming Far Manager plugins - Encyclopedia for Developers

Encyclopedia for Developers

Far Manager версии 3.0 - консольный юникодный файловый менеджер для операционных систем семейства Windows NT. Программа предоставляет удобный интерфейс пользователя для работы с файловыми системами (реальными и эмулированными) и файлами.

Far Manager является оболочкой, позволяющей расширять свои возможности за счёт подключения внешних исполняемых модулей (плагинов). Чтобы добавить новую команду, функцию редактора или чтобы эмулировать файловую систему на панели Far Manager (например, отображение архивов, сетевых ресурсов или реестра), вы можете написать собственный Far-плагин в виде DLL-библиотеки.

Оболочка Far Manager настолько тесно слилась со своими плагинами, что говорить о ней и не говорить о плагинах просто бессмысленно. Плагины неимоверно расширяют возможности Far Manager, дополняя их и модифицируя. Скачать большинство таких можно из раздела сайта PlugRinG.

Энциклопедия «Programming Far Manager plugins - Encyclopedia for Developers» является наиболее полным справочным руководством по Far Manager Plugin API последних версий и предназначена в первую очередь для программистов, пишущих (и начинающих писать) плагины. Энциклопедия позволит вам узнать все аспекты написания плагинов, ознакомиться со статьями и заметками авторов, имеющих богатый опыт в данной предметной области.

Мы надеемся, что эта Энциклопедия станет для вас чрезвычайно полезным помощником в работе по программированию плагинов для Far Manager.

О проекте
Что нового?
Лицензия
Авторы
Ссылки

Basic API
Panel API
Editor API
Viewer API
Dialog API
Settings API
Plugin Manager API
Miscellaneous API
Macro API

Экспортируемые функции
Сервисные функции
Стандартные функции
Структуры
Локализация
Типы и определения

Макросы

"Правила хорошего тона"
Примеры
Статьи


О проекте Programming Far Manager plugins - Encyclopedia for Developers

главная | Лицензия

Цель проекта - создание "полнофункционально-избыточного" файла помощи на русском и английском, применительно для языка программирования C/C++.

Данная энциклопедия в основном будет интересна разработчикам плагинов для юникодного Far Manager.

Энциклопедия существует в двух вариантах - HTMLHelp (CHM) и OnlineHelp-версия.

Энциклопедия, кроме оригинальных тем по Plugins API, содержит множество дополнительных разделов, которые (как мы надеемся) помогут разработчикам плагинов при написании собственных "произведений".


Что нового в Encyclopedia for Developers?

главная

03 февраля 2015 г.

    Минимально необходимая версия Far Manager - 3.0.0.4261.

  • добавлена стандартная функция FSF.FarClock - то же, что Far.UpTime в макросах, но в микросекундах и с микросекундным разрешением

16 октября 2014 г.

    Минимально необходимая версия Far Manager - 3.0.0.4134.

  • добавлен флаг в Editor API: ECF_AUTODELETE

21 июля 2014 г.

    Минимально необходимая версия Far Manager - 3.0.0.4013.

  • добавилась команда ECTL_GETTITLE

21 марта 2014 г.

    Минимально необходимая версия Far Manager - 3.0.0.3838, релиз.

  • добавилось сообщение DM_GETDIALOGTITLE
  • добавилось сообщение DN_DRAWDLGITEMDONE
  • добавилось сообщение DN_DROPDOWNOPENED
  • известные GUID диалогов и меню Far Manager

16 ноября 2013 г.

    Минимально необходимая версия Far Manager - 3.0.0.3714, релиз.

  • добавлен тип события в Panel API: FE_CHANGESORTPARAMS

30 мая 2013 г.

    Минимально необходимая версия Far Manager - 3.0.0.3436.

  • KMFLAGS_DISABLEOUTPUT теперь является значением по умолчанию и игнорируется Far Manager'ом
  • добавлен новый флаг KMFLAGS_ENABLEOUTPUT

28 апреля 2013 г.

    Минимально необходимая версия Far Manager - 3.0.0.3371, релиз.

  • добавлены команды Info.EditorControl: ECTL_SUBSCRIBECHANGEEVENT, ECTL_UNSUBSCRIBECHANGEEVENT

22 марта 2013 г.

    Минимально необходимая версия Far Manager - 3.0.0.3265, релиз.

  • добавлена команда в Panel API: FCTL_SETACTIVEPANEL

14 декабря 2012 г.

    Минимально необходимая версия Far Manager - 3.0.0.3013, релиз.

  • добавлены флаги в Dialog API: DIF_SEPARATORUSER, DIF_RIGHTTEXT и DIF_WORDWRAP

04 ноября 2012 г.

    Завершился активный этап изменений Plugins API v3.0

    Минимально необходимая версия Far Manager - 3.0.0.2927, релиз.

  • изменению подверглось подавляющее большинство функций и структур API,
    плагины, написанные для предыдущих версий уникодного Far Manager, требуется адаптировать!

03 Февраля 2011 г.

    Внимание! Начался второй этап изменений Plugins API - версия API теперь v3.0

01 февраля 2011 г.

    Что изменилось в Plugins API v2.0 в сравнении c Plugins API v1.0

  • глобально char/char* заменены на wchar_t/wchar_t*
  • глобально фиксированные массивы char[n] заменены на указатели wchar_t* на буферы выделяемые плагином
  • ФАР не использует SetCurrentDirectoryW() при навигации по папкам, как следствие, бонусы:
    - хождение по папкам глубже MAX_PATH;
    - вход в папки, оканчивающиеся точками, пробелами и прочим;
    - папка, открытая на панели, не блокируется от удаления извне;
  • изменилась синхронизация CurrentDirectory ФАРа:
    - команда Info.Control - FCTL_GETCURRENTDIRECTORY переименована в FCTL_GETPANELDIR
    - вместо Info.Control - FCTL_GETCURRENTDIRECTORY используйте FSF.GetCurrentDirectory()
    - вместо ConvertNameToFullW() используйте FSF.ConvertPath()
  • описатели CURRENT_PANEL/ANOTHER_PANEL переименованы в PANEL_ACTIVE/PANEL_PASSIVE
  • функция Info.GetPluginDirList() изменена, вместо INVALID_HANDLE_VALUE используются PANEL_ACTIVE/PANEL_PASSIVE
  • макроса NM больше нет
  • структура PluginPanelItem.FindData изменена
  • проверки на размер PluginPanelItem больше нет
  • в структуре OpenPluginInfo.InfoPanelLine - массив структур заменён на массив указателей
  • функция Info.Control() изменена, у ней теперь вместо трёх - ЧЕТЫРЕ параметра!
  • изменена структура PanelInfo: убраны элементы PanelItems, SelectedItems, ColumnTypes, ColumnWidths, CurDir
  • команды Info.Control - FCTL_GETPANELSHORTINFO больше нет, её функцию выполняет FCTL_GETPANELINFO
  • в команде Info.Control - FCTL_GETCMDLINE память под буфер плагин выделяет сам
  • в команде Info.Control - FCTL_SELECTEDTEXT память под буфер плагин выделяет сам
  • команда Info.AdvControl - ACTL_GETWCHARMODE удалена
  • команда Info.AdvControl - ACTL_CONSOLEMODE удалена
  • команда Info.EditorControl - ECTL_EDITORTOOEM удалена
  • команда Info.EditorControl - ECTL_OEMTOEDITOR удалена
  • команда Info.EditorControl - ECTL_SETTITLE, теперь плагин самостоятельно должен восстанавливать "заголовок"
  • команда FCTL_SETSELECTION изменена на систему команд:
    - FCTL_BEGINSELECTION
    - FCTL_SETSELECTION
    - FCTL_ENDSELECTION
  • в Info.AdvControl - ACTL_WAITKEY теперь приходят и макрокнопки
  • в функции Info.Message удалён флаг FMSG_DOWN
  • память под WindowInfo::TypeName выделяет плагин
  • память под WindowInfo::Name выделяет плагин
  • функции FSF.ConvertNameToReal() больше нет
  • функции FSF.ExpandEnvironmentStr() больше нет
  • функция FSF.GetDirList() изменена
  • функция FSF.MkTemp() изменена
  • функция FSF.GetFileOwner() изменена
  • функция FSF.FarKeyToName() изменена
  • функция WINAPI PutFilesW() изменена
  • функция WINAPI MakeDirectoryW() изменена
  • функция WINAPI GetFilesW() изменена
  • флага OPIF_FINDFOLDERS больше нет
  • структуры FARINT64 больше нет
  • структуры EditorConvertText больше нет
  • изменена структура EditorInfo: убран элемент FileName
  • изменилась системы команд Info.GetDirList/GetPluginDirList и Info.FreeDirList/FreePluginDirList
  • команда EditorSetParameter - ESPT_GETWORDDIV изменена
  • таблиц кодировки больше нет, все Table теперь CodePage
  • плагины в Viewer/Editor могут теперь передавать конкретные кодовые страницы
  • изменения в Dialog API:
    - главное отличие от старого Dialog API, это то, что массив структур FarDialogItem является только входным, в него не пишутся изменения при закрытии диалога
    - структура FarDialogItem изменена
    - функций Dialog() и DialogEx() больше нет
    - вместо них DialogInit(), DialogRun(), DialogFree()
    - сообщение DM_GETDLGITEM изменено, Param2 указатель на память куда будет скопирован элемент
    - событие DN_EDITCHANGE приходит при любых изменениях в строке редактирования
    - событие DN_LISTHOTKEY приходит в комбинированный список
    - добавилось сообщение DM_GETCONSTTEXTPTR
    - добавилось сообщение DM_GETDLGITEMSHORT
    - добавилось сообщение DM_SETDLGITEMSHORT
    - добавилось сообщение DM_GETDIALOGTITLE
    - добавилось сообщение DN_DRAWDLGITEMDONE
    - добавилось сообщение DN_DROPDOWNOPENED
    - добавился флаг DIF_EDITPATH
    - добавился флаг FIB_EDITPATH
    - добавился флаг FDLG_KEEPCONSOLETITLE в функции Info.DialogInit() - флага DIF_NOTCVTUSERCONTROL больше нет
    - флага LIF_USETEXTPTR больше нет
    - флага MIF_USETEXTPTR больше нет
  • Плановые изменения в макросах:
    - удалена команда $Date - заменить на print(Date("формат"))
    - удалена команда $MMode - заменить на mmode(1,2)
    - удалено состояние IClip - заменить на clip(5,-1) (при этом учесть, что clip() вернет 1 или 2)
    - удалена команда $IClip - заменить на clip(5,0) или просто clip(5)
    - удалено состояние DisableOutput (не флаг макроса!) - заменить на вызов функции mmode(1,-1)
    - добавлена функция N=mload(S)
    - добавлена функция beep()
    - добавлена функция kbdLayout()
    - удалена команда $KbdSwitch, замените $KbdSwitch на kbdLayout(1)
    - функция Menu.ItemStatus() теперь в старшем слове возвращает код символа пометки U+XXXX
    - добавлен условный оператор "^^" - XOR, исключающее ИЛИ

    Что добавилось в Plugins API v2.0 в сравнении c Plugins API v1.0

  • функция WINAPI ProcessSynchroEventW()
  • функция FSF.ConvertPath(CPM_REAL,...)
  • функция FSF.ConvertPath(CPM_FULL,...)
  • функция FSF.ConvertPath(CPM_NATIVE,...)
  • функция FSF.GetCurrentDirectory()
  • команда FSF.MkLink() - FLINK_SYMLINK, автоматически выбрать тип создаваемой символической ссылки
  • команда Info.AdvControl - ACTL_QUIT
  • команда Info.AdvControl - ACTL_SETPROGRESSSTATE
  • команда Info.AdvControl - ACTL_SETPROGRESSVALUE
  • команда Info.AdvControl - ACTL_SYNCHRO
  • команда Info.AdvControl - ACTL_KEYMACRO, добавилась команда MCMD_CHECKMACRO
  • команда Info.AdvControl - ACTL_PROGRESSNOTIFY
  • команда Info.EditorControl - ECTL_GETFILENAME, плагин сам выделяет память под элемент
  • команда Info.EditorControl - ECTL_UNDOREDO
  • команда Info.EditorControl - ESPT_SETBOM
  • команда Info.Control - FCTL_ISACTIVEPANEL
  • команда Info.Control - FCTL_GETPANELITEM, плагин сам выделяет память под элемент
  • команда Info.Control - FCTL_GETSELECTEDPANELITEM, плагин сам выделяет память под элемент
  • команда Info.Control - FCTL_GETCOLUMNTYPES, плагин сам выделяет память под элемент
  • команда Info.Control - FCTL_GETCOLUMNWIDTHS, плагин сам выделяет память под элемент
  • команда Info.Control - FCTL_GETCURRENTDIRECTORY, плагин сам выделяет память под элемент
  • команда Info.Control - FCTL_GETCURRENTITEM, плагин сам выделяет память под элемент
  • команда Info.Control - FCTL_CLEARSELECTION
  • команда Info.Control - FCTL_SETDIRECTORIESFIRST
  • команда Info.Control - FCTL_GETPANELFORMAT
  • команда Info.Control - FCTL_GETPANELHOSTFILE
  • опция в Info.AdvControl - ACTL_GETCONFIRMATIONS - FCS_OVERWRITEDELETEROFILES
  • опция в Info.AdvControl - ACTL_GETINTERFACESETTINGS - FIS_SHOWTOTALDELPROGRESSINDICATOR
  • флаг в EditorInfo.Options - EOPT_SHOWWHITESPACE
  • флаг в EditorInfo.Options - EOPT_BOM
  • флаг в EditorSetParameter.Type - ESPT_SHOWWHITESPACE
  • флаг в DI_BUTTON - DIF_SETSHIELD, аналог BCM_SETSHIELD
  • флаги PFLAGS_USECRC32/OPIF_USECRC32 определяющие, что поле CRC32 элементов панели заполнено
  • система идентификации диалогов:
    - сообщения DN_GETDIALOGINFO/DM_GETDIALOGINFO
    - идентификатор для диалога перезаписи файла - {9FBCB7E1-ACA2-475d-B40D-0F7365B632FF}
    - идентификатор для диалога поиска (AltF7) - {8C9EAD29-910F-4b24-A669-EDAFBA6ED964}
  • Far теперь умеет работать в пределах окна (а не буфера), соответственно введены:
    - команда Info.AdvControl - ACTL_GETFARRECT
    - команда Info.AdvControl - ACTL_GETCURSORPOS
    - команда Info.AdvControl - ACTL_SETCURSORPOS
  • RegExp API
  • FileFilter API
  • PluginsControl API

5 Января 2010 г.

  • Пишем новое писание.
    Все изменения в АПИ (соответственно и в энциклопедии) просим добавлять сюда.


Лицензия

главная | авторы
  1. Все авторские права на Энциклопедию "Programming Far Manager plugins - Encyclopedia for Developers" принадлежат только авторам.

  2. Энциклопедия может распространяться только с разрешения авторов при условии того, что настоящий дистрибутив не изменён и не нарушена коммерческая или иная выгода авторов. Ни одно частное лицо или организация не может брать плату за распространение Энциклопедии без письменного разрешения всех авторов.

  3. Энциклопедия существует только на русском и английском языках в двух вариантах - HTMLHelp (CHM) и OnlineHelp-версия: http://api.farmanager.com/.
    Другие источники считаются нарушением настоящего лицензионного соглашения.

  4. ЭНЦИКЛОПЕДИЯ ПОСТАВЛЯЕТСЯ ПО ПРИНЦИПУ "AS IS". НИКАКИХ ГАРАНТИЙ НЕ ПРИЛАГАЕТСЯ И НЕ ПРЕДУСМАТРИВАЕТСЯ. ВЫ ИСПОЛЬЗУЕТЕ ЭТУ ПРОГРАММНУЮ ДОКУМЕНТАЦИЮ НА СВОЙ РИСК. АВТОРЫ НЕ БУДУТ ОТВЕЧАТЬ НИ ЗА КАКИЕ ПОТЕРИ ИЛИ ИСКАЖЕНИЯ ДАННЫХ, ЛЮБУЮ УПУЩЕННУЮ ВЫГОДУ В ПРОЦЕССЕ ИСПОЛЬЗОВАНИЯ ИЛИ НЕПРАВИЛЬНОГО ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОДУКТА.

  5. Вы не можете использовать, копировать, эмулировать, создавать новые версии, сдавать в наём или аренду, продавать, изменять, декомпилировать, иначе, чем определено настоящим лицензионным соглашением. Любое такое нелегальное использование означает автоматическое и немедленное прекращение действия настоящего соглашения и может преследоваться по закону.

  6. Установка и использование Энциклопедии означает, что вы понимаете положения настоящего лицензионного соглашения и согласны с ними.

  7. Если почему-либо вы не согласны с этим лицензионным соглашением, Вам необходимо удалить файлы дистрибутива Энциклопедии с ваших устройств хранения информации и прекратить использование Энциклопедии.

  8. Все права, не предоставленные здесь, явно сохраняются за авторами. Это также означает, что любые вопросы, связанные с Энциклопедией, решаются большинством голосов авторов.

  9. Авторы оставляет за собой право отменить действие данной лицензии для любой из следующих версий Энциклопедии.

Благодарим за использование Энциклопедии
"Programming Far Manager plugins - Encyclopedia for Developers".

координатор - Валентин Скирдин


Авторы и ссылки

главная

Энциклопедия "Programming Far Manager plugins - Encyclopedia for Developers" является продуктом коллективного творчества группы авторов (и соавторов).

В этом списке представлены авторы и соавторы данного произведения. Все те, кто принимал участие - словом ли, делом,... (за исключением авторов из раздела «Статьи»)

Авторы благодарят Евгения Рошала за поддержку, оказанную при написании этого произведения.

Авторы:

  • Валентин Скирдин
  • Игорь Русских
  • Иван Синтюрин
  • Кирилл Кириченко
  • Артём Назаров
  • Василий Мошнинов
  • Дмитрий Жемеров
  • Алекс Ярославский
  • WARP ItSelf
  • Вадим Егоров
  • Алекс Алабужев
  • Алексей Самлюков
  • Shmuel Zeigerman


 Far Manager в Интернете

Far Manager в Интернете

главная
  • http://www.farmanager.com
    Официальный сайт Far Manager.

  • http://bugs.farmanager.com
    Регистрация и обработка проблем и "хотелок", связанных с Far Manager и стандартным плагинам к нему.

  • http://api.farmanager.com
    Online версия "Programming Far Manager plugins - Encyclopedia for Developers"

  • http://forum.farmanager.com
    Официальный форум для пользователей Far Manager.

  • http://plugring.farmanager.com
    Официальный сайт поддержки пользователей оболочки Far Manager, центральный сайт web-кольца Far PlugRinG - объединённого общества плагинописателей.

  • http://svn.code.sf.net/p/farmanager/code/
    Официальный SVN репозиторий исходных текстов Far Manager и стандартных плагинов.

  • http://sourceforge.net/projects/farmanager/
    Веб-интерфейс к официальному SVN репозиторию.

  • Листы рассылки (с 2007):
    • http://groups.google.com/group/fardev
      Список рассылки "Far Manager Development" предназначен для обсуждения любых вопросов, затрагивающих тему разработки Far Manager и плагинов к нему.

    • http://groups.google.com/group/farcommits
      Список рассылки "SVN Мониторинг официальных патчей" предназначен для получения информации об изменениях в официальном репозитории исходных текстов.

  • news:fido7.far.support
    Конференция USENET FAR.SUPPORT (см. также на Google Groups)

  • news:fido7.far.development
    Конференция USENET FAR.DEVELOPMENT (см. также на Google Groups)

  • Листы рассылки (с 2000 по 2007 годы):
    • http://groups.yahoo.com/group/plugring
      В группе рассылки "PlugRinG Forum" обсуждаются плагины к Far Manager

    • http://groups.yahoo.com/group/farpluginsapi
      Список рассылки "Far Manager Plugins API" предназначен для общения разработчиков плагинов для Far Manager и обсуждения вопросов, возникших в результате написания плагинов Far Manager, а также для любых вопросов, затрагивающих тему "API плагинов для Far Manager" (в т.ч. обсуждение тем и разделов из "Programming Far Manager plugins - Encyclopedia for Developers").

    • http://groups.yahoo.com/group/plugring_announce
      Анонсы новых поступление на сайт PlugRinG


Basic API

главная

Краткое описание Basic API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция | Описание
ExitFARW | перед выходом из Far Manager
GetGlobalInfoW | основная информация о плагине
GetPluginInfoW | дополнительная информация о плагине
OpenW | вызывает плагин
SetStartupInfoW | Far Manager передает плагину необходимую информацию

Сервисные функции, указатели на эти функции плагины получают от Far Manager в функции SetStartupInfoW

Функция | Описание
GetMsg | получить строку сообщения из языкового файла
InputBox | позволяет запросить у пользователя текстовую строку
Menu | показывает меню
Message | показывает сообщение
ShowHelp | показывает нужный раздел из файла помощи

Структуры

Структура | Описание
ExitInfo | при закрытии плагина
FarKey | код клавиши
FarMenuItem | элемент меню
FarStandardFunctions | указатели на стандартные функиции Far Manager
GlobalInfo | основная информация о плагине
OpenInfo | информация о том, откуда вызван плагин
PluginInfo | информация о модуле плагина
PluginMenuItem | информация о добавляемых в меню плагинов элементах
PluginStartupInfo | различная важная информация
VersionInfo | информация о версии плагина
Смотрите также:
Типы и определения


ExitFARW

главная | экспортируемые функции | Basic API
Функция ExitFARW вызывается перед выходом из Far Manager. В этой функции плагин может удалить все используемые ресурсы, например, ранее запрошенную память.
void WINAPI ExitFARW(
  const struct ExitInfo *Info
);

Параметры

Info
Указатель на структуру ExitInfo (в настоящее время не используется).

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

Нет.

Пример

Пример из плагина "TmpPanel".
void WINAPI ExitFARW(const struct ExitInfo *Info)
{
  for (int i=0; i < COMMONPANELSNUMBER; ++i)
    FreePanelItems(CommonPanels[i].Items, CommonPanels[i].ItemsNumber);
}
Смотрите также:
ClosePanelW


GetGlobalInfoW

главная | экспортируемые функции | Basic API
Far Manager вызывает функцию GetGlobalInfoW в первую очередь, для получения основной информации о плагине. Функция вызывается один раз.
void WINAPI GetGlobalInfoW(
  struct GlobalInfo *Info
);

Параметры

Info
Указатель на структуру GlobalInfo. Плагин заполняет структуру в этой функции.

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

Нет.

Замечания

  1. Плагин обязан экспортировать функцию GetGlobalInfoW для загрузки Far Manager'ом.
  2. Все поля структуры GlobalInfo должны быть заполнены.
  3. Если в поле GlobalInfo.MinFarVersion плагин указал версию Far Manager больше, чем текущая версия у пользователя (включая номер билда) - выводится сообщение об ошибке и плагин не загружается.

Пример

// {B076F0B0-90AE-408c-AD09-491606F09435}
DEFINE_GUID(MainGuid, 0xb076f0b0, 0x90ae, 0x408c, 0xad, 0x9, 0x49, 0x16, 0x6, 0xf0, 0x94, 0x35);

void WINAPI GetGlobalInfoW(struct GlobalInfo *Info)
{
  Info->StructSize=sizeof(struct GlobalInfo);
  Info->MinFarVersion=MAKEFARVERSION(3,0,0,2927,VS_RELEASE);   //минимально необходимая версия Far Manager, смотрите изменения в API
  Info->Version=MAKEFARVERSION(3,0,0,21,VS_RC);   //текущая версия плагина 3.0.0.21, релиз-кандидат
  Info->Guid=MainGuid;
  Info->Title=L"Align";
  Info->Description=L"Align block for Far Manager";
  Info->Author=L"Eugene Roshal & Far Group";
}
Смотрите также:
FARMANAGERVERSION, MAKEFARVERSION


GetPluginInfoW

главная | экспортируемые функции | Basic API
Функция GetPluginInfoW вызывается Far Manager для получения дополнительной информации о плагине.
void WINAPI GetPluginInfoW(
  struct PluginInfo *Info
);

Параметры

Info
Указатель на структуру PluginInfo. Плагин заполняет структуру в этой функции.

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

Нет.

Замечания

  1. Функция вызывается для получения информации о плагине перед выполнением следующих действий:
    • перед показом меню конфигурации (Alt+Shift+F9) из функции ConfigureW
    • перед показом меню плагинов (F11)
    • перед показом меню выбора дисков (Alt+F1 / Alt+F2)
    • из командной строки по префиксу (например, net:\\share)
  2. Структура PluginInfo, передаваемая функции GetPluginInfoW, уже заполнена 0. Плагин обязательно должен заполнить поле PluginInfo.StructSize.
  3. Far Manager вызывает функцию GetPluginInfoW достаточно часто, поэтому при проектировании плагина необходимо минимизировать "расчёты", производимые в этой функции.

Пример

// {A540CD77-CAD0-4E96-ADA0-2BAAC8182237}
DEFINE_GUID(MenuGuid, 0xa540cd77, 0xcad0, 0x4e96, 0xad, 0xa0, 0x2b, 0xaa, 0xc8, 0x18, 0x22, 0x37);

void WINAPI GetPluginInfoW(struct PluginInfo *Info)
{
  static const wchar_t *PluginMenuStrings[1];
  PluginMenuStrings[0]=GetMsg(MTitle);

  Info->StructSize=sizeof(struct PluginInfo);
  Info->Flags=PF_EDITOR|PF_DISABLEPANELS;
  Info->PluginMenu.Guids=&MenuGuid;
  Info->PluginMenu.Strings=PluginMenuStrings;
  Info->PluginMenu.Count=sizeof(PluginMenuStrings)/sizeof(PluginMenuStrings[0]);
  Info->PluginConfig.Guids=&MenuGuid;
  Info->PluginConfig.Strings=PluginMenuStrings;
  Info->PluginConfig.Count=sizeof(PluginMenuStrings)/sizeof(PluginMenuStrings[0]);
}
Смотрите также:
PluginInfo


OpenW

главная | экспортируемые функции | Basic API
Функция 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;
}


SetStartupInfoW

главная | экспортируемые функции | Basic API
Функция SetStartupInfoW вызывается один раз, после загрузки DLL-модуля в память. Far Manager передаёт плагину информацию, необходимую для дальнейшей работы.
void WINAPI SetStartupInfoW(
  const struct PluginStartupInfo *Info
);

Параметры

Info
Указатель на структуру PluginStartupInfo. В начале функции проверьте, что поле PluginStartupInfo.StructSize >= sizeof(PluginStartupInfo).

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

Нет.

Замечания

  1. Эта функция вызывается сразу же после вызова функции GetGlobalInfoW.
  2. Указатель Info действителен только в области видимости данной функции (до выхода из функции), так что структура должна копироваться во внутреннюю переменную плагина для дальнейшего использования:
    static struct PluginStartupInfo Info;
...
void WINAPI SetStartupInfoW(const struct PluginStartupInfo *Info)
{
  if (Info->StructSize >= sizeof(PluginStartupInfo))
    ::Info=*Info;
  ...
}
  3. Если в плагине используются стандартные функции из структуры FarStandardFunctions, то член PluginStartupInfo.FSF также должен быть сохранён в локальное пространство плагина:
    static struct PluginStartupInfo Info;
static struct FarStandardFunctions FSF;

void WINAPI SetStartupInfoW(const struct PluginStartupInfo *Info)
{
  if (Info->StructSize >= sizeof(PluginStartupInfo))
  {
    ::Info=*Info;
     FSF=*Info->FSF;
     ::Info.FSF=&FSF; // скорректируем адрес в локальной структуре
  ...
  }
}
Смотрите также:


GetMsg

главная | сервисные функции | Basic API
Функция GetMsg возвращает строку сообщения из языкового файла. Настоятельно рекомендуется использовать эту функцию вместо предопределённого текста в ваших программах, поскольку это позволит локализовать ваш плагин и переключать языки в Far Manager и плагине одновременно.
const wchar_t* WINAPI GetMsg(
  const GUID *PluginId,
  intptr_t MsgId
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
MsgId
Номер строки сообщения в файле сообщений.

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

Эта функция возвращает адрес запрашиваемой строки сообщения.

ВНИМАНИЕ! ВНИМАНИЕ!

  • Не сохраняйте у себя этот адрес, всегда запрашивайте его заново. Если пользователь сменит язык интерфейса, адрес станет недействительным, со всеми вытекающими последствиями.

Примечание

Все *.lng файлы в каталоге с плагином являются языковыми файлами. Far Manager выбирает необходимый *.lng файл в соответствии с установленным языком. При первом использования функции GetMsg все сообщения загружаются в память, поэтому при последующих вызовах этой функции доступ к сообщениям производится быстрее и вам не надо сохранять полученные строки сообщений в промежуточные буферы.

Пример

Во всех примерах, как вы могли заметить, используется следующая функция:
// {B076F0B0-90AE-408c-AD09-491606F09435}
DEFINE_GUID(MainGuid, 0xb076f0b0, 0x90ae, 0x408c, 0xad, 0x9, 0x49, 0x16, 0x6, 0xf0, 0x94, 0x35);

const wchar_t *GetMsg(intptr_t MsgId)
{
  return(Info.GetMsg(&MainGuid,MsgId));
}
Причём, Info определяется как глобальная переменная:
struct PluginStartupInfo Info;
...а инициализируется она в функции SetStartupInfoW:
void WINAPI SetStartupInfoW(struct PluginStartupInfo *Info)
{
  ...
  ::Info=*Info;
  ...
}
Смотрите также:
Языки и файлы помощи


InputBox

главная | сервисные функции | Basic API
Функция InputBox позволяет ввести одну строку текста.
intptr_t WINAPI InputBox(
  const GUID *PluginId,
  const GUID *Id,
  const wchar_t *Title,
  const wchar_t *SubTitle,
  const wchar_t *HistoryName,
  const wchar_t *SrcText,
  wchar_t *DestText,
  size_t DestSize,
  const wchar_t *HelpTopic,
  INPUTBOXFLAGS Flags
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
Id
Указатель на GUID текущего сообщения. GUID должен быть уникальным.
Title
Заголовок окна ввода. Может быть равен NULL или L"".
SubTitle
Приглашение на ввод данных. Может быть равен NULL или L"".
HistoryName
Адрес строки для "истории". Установите в NULL, если "история" ввода не используется.
SrcText
Исходные данные для ввода и редактирования. Может быть равен NULL или L"".
DestText
"Приёмник" введённых данных. Может указать на ту же область памяти, что и SrcText.
DestSize
Размер "приёмника" в символах, с завершающим символом '\0'.
HelpTopic
Адрес строки с названием темы помощи в формате "<FullPath>Topic", например:
L"<D:\\FAR\\Plugins\\Foo\\>FooInfo"

Установите в NULL если подсказка не используется.
Flags
Может быть комбинацией следующих значений (тип INPUTBOXFLAGS):
Константа | Описание
FIB_ENABLEEMPTY | даже если строка ввода пуста функция вернёт значение TRUE
FIB_PASSWORD | используется для ввода пароля - вводимый текст на экране отрисовывается символами '*'
FIB_EXPANDENV | после успешного ввода, в строке DestText идентификаторы переменных окружения заменяются на их значения, например, если пользователь ввёл '%TEMP%', то DestText будет содержать 'C:\TEMP'
FIB_NOUSELASTHISTORY | не использовать предыдущее значение из истории, оставить строку ввода пустой; актуален, если параметр HistoryName не равен NULL
FIB_BUTTONS | показать разделительную линию и кнопки [Ok] и [Cancel]. Диалог увеличится на 2 строки
FIB_NOAMPERSAND | не показывать в приглашении ввода амперсанд, использовать его для определения горячей клавиши
FIB_EDITPATH | говорит, что строка ввода будет содержать имена реальных файловых объектов
FIB_EDITPATHEXEC | ограничивать автодополнение в строке ввода только именами исполнимых файлов (%PATHEXT%), которые находятся в каталогах, перечисленных в %PATH%
FIB_NONE | нулевой флаг

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

Функция возвращает TRUE в случае успешного ввода строки и FALSE, если пользователь прервал ввод.

Замечания

Far Manager использует данную функцию, когда пользователь пытается создать папку:

Пример

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


Menu

главная | сервисные функции | Basic API
Функция Menu показывает меню.
intptr_t WINAPI Menu(
  const GUID *PluginId,
  const GUID *Id,
  intptr_t X,
  intptr_t Y,
  intptr_t MaxHeight,
  FARMENUFLAGS Flags,
  const wchar_t *Title,
  const wchar_t *Bottom,
  const wchar_t *HelpTopic,
  const struct FarKey *BreakKeys,
  intptr_t *BreakCode,
  const struct FarMenuItem *Item,
  size_t ItemsNumber
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
Id
Указатель на GUID текущего меню. GUID должен быть уникальным.
X,Y
Координаты верхнего левого угла меню.
Чтобы назначить их автоматически, приравняйте их -1.
MaxHeight
Максимальное количество видимых на экране пунктов меню. Если высота меню меньше, чем число пунктов, то появится полоса прокрутки.
Чтобы использовать максимально возможное значение, установите этот параметр равным 0.
Flags
Может быть комбинацией из следующих значений (перечисление FARMENUFLAGS):
Константа | Описание
FMENU_AUTOHIGHLIGHT | Если указан, то горячие клавиши будут назначены автоматически, начиная с первого пункта.
FMENU_CHANGECONSOLETITLE | Если указан, то Far Manager изменит заголовок консоли в значение, указанное в параметре Title (если Title не пуст).
FMENU_SHOWAMPERSAND | При показе меню не использовать амперсанды (&) для определения горячих клавиш.
FMENU_REVERSEAUTOHIGHLIGHT | Если указан, то горячие клавиши будут назначены автоматически, начиная с последнего пункта.
FMENU_NONE | Нулевой флаг.
FMENU_WRAPMODE | Если указан, то попытка перемещения курсора выше первого пункта или ниже последнего будет приводить к перемещению соответственно к последнему или к первому пункту. Этот флаг рекомендуется ставить всегда, когда нет специальных причин его не ставить.
Title
Заголовок меню. Укажите NULL, если заголовок меню не нужен.
Bottom
Нижняя строка меню. Укажите NULL, если нижняя строка меню не нужна.
HelpTopic
Тема в файле помощи, ассоциированная с меню. Может быть NULL, если подсказка не требуется.
BreakKeys
Адрес массива с кодами виртуальных клавиш типа FarKey, которые будут закрывать меню. Конец массива определяется дополнительным элементом, у которого значение поля VirtualKeyCode должно быть равно 0. Если вам не нужно определять такие клавиши в дополнение к стандартным (Enter, Esc и F10),установите этот параметр в NULL.

Например, реакция на нажатие клавиши F4 в меню обрабатывается так:

int BreakCode;
struct FarKey BreakKeys[] = {{VK_F4,0},{0,0}};
ExitCode=Info.Menu(&MainGUID,&MenuGUID,-1,-1,0,FMENU_WRAPMODE,GetMsg(MArcCmdTitle),GetMsg(MSelectF4),L"ArcCmd",BreakKeys,&BreakCode,MenuItems,Count);
if(ExitCode>=0)
{
  if(BreakCode == 0)  // F4 pressed
  {
    GetFormatName(MenuItems[0].Text);
    ConfigCommands(MenuItems[0].Text,2+MenuData[ExitCode].Cmd*2);
    continue;
  }
}
else
  return FALSE;
BreakCode
Адрес переменной, в которую будет записан номер элемента массива BreakKeys, использованного для закрытия меню, или -1, если меню было закрыто одной из стандартных клавиш. Этот параметр может быть равным NULL.
Item
Адрес массива структур FarMenuItem. Каждая структура описывает элемент меню.
ItemsNumber
Количество структур FarMenuItem.

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

Функция возвращает или -1, если пользователь отменил меню, или номер выбранного элемента меню.

Пример

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


Message

главная | сервисные функции | Basic API
Функция Message показывает сообщение.
intptr_t WINAPI Message(
  const GUID *PluginId,
  const GUID *Id,
  FARMESSAGEFLAGS Flags,
  const wchar_t *HelpTopic,
  const wchar_t * const *Items,
  size_t ItemsNumber,
  intptr_t ButtonsNumber
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
Id
Указатель на GUID текущего сообщения. GUID должен быть уникальным.
Flags
Может быть комбинацией следующих значений (тип FARMESSAGEFLAGS):
Флаг | Описание
FMSG_WARNING | Используются цвета "Предупреждения" (обычно белые буквы на красном фоне).
FMSG_ERRORTYPE | Если тип ошибки, возвращаемый функцией GetLastError, известен Far Manager'у или Windows, то описание ошибки будет показано в первых строках сообщения. При этом строки, переданные плагином в функцию, сдвинутся вниз.
FMSG_KEEPBACKGROUND | Не перерисовывать фон сообщения.
FMSG_LEFTALIGN | Использовать для строк сообщения выравнивание влево (по умолчанию строки выводятся по центру).
FMSG_ALLINONE | В этом случае аргумент Items не является массивом указателей на строки - это УКАЗАТЕЛЬ на одну строку, в которой разделителем выводимых строк является символ '\n'. Минимальное количество строк - 2 - заголовок и одна строка сообщения. При указании флага FMSG_ALLINONE аргумент ItemsNumber игнорируется и количество выводимых строк вычисляется автоматически (с учётом флагов-кнопок FMSG_MB_*). Для подавления вывода заголовка при использовании флага FMSG_ALLINONE начните строку с символа '\n'.
FMSG_MB_OK | Дополнительно выводится кнопка <Ok>
FMSG_MB_OKCANCEL | Дополнительно выводятся кнопки <Ok> и <Cancel>
FMSG_MB_ABORTRETRYIGNORE | Дополнительно выводятся кнопки <Abort>, <Retry> и <Ignore>
FMSG_MB_YESNO | Дополнительно выводятся кнопки <Yes> и <No>
FMSG_MB_YESNOCANCEL | Дополнительно выводятся кнопки <Yes>, <No> и <Cancel>
FMSG_MB_RETRYCANCEL | Дополнительно выводятся кнопки <Retry> и <Cancel>
FMSG_NONE | Нулевой флаг
HelpTopic
Тема подсказки в файле помощи связанная с сообщением. Установите это значение в NULL если подсказка не требуется.
Items
Адрес массива с указателями на Unicode строки. Первая строка - заголовок сообщения, последние ButtonsNumber строк - кнопки, все остальные строки принадлежат телу сообщения.
Для отрисовки одинарной разделительной линии начните строку с символа с кодом 1 (L"\1").
Для отрисовки двойной разделительной линии начните строку с символа с кодом 2 (L"\2").
Смотрите также описание флага FMSG_ALLINONE.
ItemsNumber
Количество указателей в массиве Items. Минимальное значение - 2 строки.
ButtonsNumber
Количество заключительных строк, которые будут использоваться в качестве кнопок. При указании флагов FMSG_MB_* параметр ButtonsNumber игнорируется.

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

Функция возвращает -1, если пользователь отменил сообщение (или системе не удалось выделить достаточно памяти для внутренних буферов), или выбранный номер кнопки (для первой кнопки - 0, для второй - 1 и так далее).

Замечания

  1. Если ButtonsNumber равен 0 (флаги FMSG_MB_* не используются) и выведенное сообщение больше не нужно, то плагин должен восстановить экран, используя функцию RestoreScreen или любым другим путём.
  2. Если ButtonsNumber не равен 0, то экран восстанавливает сам Far Manager.
  3. Диалог не выводится, если в качестве Items указан NULL или количество элементов меньше двух.
  4. При указании флагов-кнопок FMSG_MB_* параметр ButtonsNumber игнорируется.
  5. Кнопки могут иметь горячие клавиши.
  6. При использовании флага FMSG_ALLINONE для корректной компиляции кода необходимо произвести явное преобразование типов:
      Info.Message(&MainGUID,&MsgGUID,
  FMSG_ALLINONE|FMSG_MB_OKCANCEL,
  L"HelpTopic",
  (const wchar_t * const *)L"Title\nItem1\nItem2\nItem3",
  0,0);
    или
    const wchar_t *Msg=L"Title\nItem1\nItem2\nItem3\nOk\nCancel";
Info.Message(&MainGUID,&MsgGUID,
  FMSG_ALLINONE,
  L"HelpTopic",
  (const wchar_t * const *)Msg,
  0,2);

Пример

Следующая функция выводит на экран диалог-подтверждение на удаление файла:
диалог-подтверждение на удаление файла
BOOL IsDeleted(wchar_t *filename)
{
  const wchar_t *Msg[5];

  Msg[0]=GetMsg(MTitle);       // заголовок сообщения
  Msg[1]=GetMsg(MIsDeleted);   // тело сообщения
  Msg[2]=filename;
  Msg[3]=GetMsg(MDelete);      // последние ButtonsNumber (2) строк - кнопки
  Msg[4]=GetMsg(MCancel);

  return Info.Message(&MainGUID,&MsgGUID,
               0,
               L"DeleteFile",
               Msg,
               sizeof(Msg)/sizeof(Msg[0]),
               2) == 0;
}
Причём, Info определяется как глобальная переменная:
struct PluginStartupInfo Info;
...а инициализируется она в функции SetStartupInfoW:
void WINAPI SetStartupInfoW(struct PluginStartupInfo *Info)
{
  ...
  ::Info=*Info;
  ...
}
Смотрите также:
DialogInit


ShowHelp

главная | сервисные функции | Basic API
Функция ShowHelp показывает заданный топик из hlf-файла.
BOOL WINAPI ShowHelp(
  const wchar_t *ModuleName,
  const wchar_t *HelpTopic,
  FARHELPFLAGS Flags
);

Параметры

ModuleName
Полное имя плагина. Его вы получаете в функции SetStartupInfoW.
HelpTopic
Тема помощи. Если параметр HelpTopic = NULL, то будет показана тема со стандартным именем "Contents".
Flags
Может быть одним из следующий значений (перечисление FARHELPFLAGS):
Константа | Описание
FHELP_SELFHELP | Трактовать параметр ModuleName как Info.ModuleName и показать тему из файла помощи вызвавшего плагина. Если HelpTopic начинается с символа ':', то будет показана тема из основного файла помощи Far Manager (в этом случае параметр ModuleName игнорируется).
FHELP_FARHELP | Параметр ModuleName игнорируется и будет показана тема из основного файла помощи Far Manager. При этом в параметре HelpTopic не надо указывать первым символом ':'.
FHELP_CUSTOMFILE | Трактовать параметр ModuleName как указатель на имя HLF-файла (c:\path\filename).
FHELP_CUSTOMPATH | Трактовать параметр ModuleName как указатель на путь (c:\path), а файл выберется автоматически, исходя из текущих настроек языка.
FHELP_GUID | Трактовать параметр ModuleName как указатель на GUID плагина, "существующий в этой сессии Far Manager". Файл выберется автоматически, исходя из текущих настроек языка. Если параметр ModuleName пустая строка ("") или равен GUID {00000000-0000-0000-0000-000000000000}, то будет показана тема из основного файла помощи Far Manager.
FHELP_USECONTENTS | Если требуемая тема HelpTopic не найдена, то попытаться отобразить тему "Contents". Флаг может комбинироваться с другими флагами.
FHELP_NOSHOWERROR | Не выводить сообщения об ошибках в случае, если требуемая тема или файл помощи не найдены. Флаг может комбинироваться с другими флагами.
FHELP_NONE | Нулевой флаг.

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

TRUE - удалось передать параметры в Менеджер Помощи.
FALSE - ошибка:
  • Flags содержит неверное значение,
  • ModuleName = NULL для случаев, отличных от FHELP_FARHELP
  • Менеджер Помощи не нашёл заданный файл/тему помощи
  • Менеджер Помощи не нашёл файл/тему помощи в процессе навигации по системе помощи.

Пример

Для удобства при частом использовании можно использовать следующую функцию в вашей программе:
void ShowHelp(const wchar_t *HelpTopic)
{
  Info.ShowHelp(Info.ModuleName,HelpTopic,0);
}
Причём, Info определяется как глобальная переменная...
struct PluginStartupInfo Info;
...а инициализируется она в функции SetStartupInfoW:
void WINAPI SetStartupInfoW(const struct PluginStartupInfo *Info)
{
. . .
  ::Info=*Info;
. . .
}

Пример вызова темы создания линков из плагина FarCmds:

bool StrToGuid(const wchar_t *Value,GUID *Guid)
{
  return UuidFromString(reinterpret_cast<unsigned short*>((void*)Value), Guid) == RPC_S_OK;
}

GUID FindGuid;
if (StrToGuid(L"3A2AF458-43E2-4715-AFEA-93D33D56C0C2",&FindGuid))
  Info.ShowHelp((const wchar_t*)&FindGuid,L"Link",FHELP_GUID);
Смотрите также:
Файлы помощи


ExitInfo

главная | структуры | Basic API
Структура ExitInfo используется Far Manager'ом в функции ExitFARW.
struct ExitInfo
{
  size_t StructSize;
};

Элементы

StructSize
Это поле содержит размер структуры ExitInfo.
Смотрите также:
структуры


FarKey

главная | структуры | Basic API
Структура FarKey описывает код клавиши, используется, например, в функции Menu.
struct FarKey
{
  WORD VirtualKeyCode;
  DWORD ControlKeyState;
};

Элементы

VirtualKeyCode
Поле аналогично значению KEY_EVENT_RECORD.wVirtualKeyCode.
ControlKeyState
Поле аналогично значению KEY_EVENT_RECORD.dwControlKeyState.

Замечания

Смотрите также:
структуры


FarMenuItem

главная | структуры | Basic API
Структура FarMenuItem описывает один пункт меню. Массив этих структур передаётся в функцию Menu.
struct FarMenuItem
{
  MENUITEMFLAGS Flags;
  const wchar_t *Text;
  struct FarKey AccelKey;
  intptr_t UserData;
  intptr_t Reserved[2];
};

Элементы

Flags
Комбинация следующих значений (тип MENUITEMFLAGS):
Флаг | Описание
MIF_SELECTED | Признак активности пункта меню. Только один пункт может быть активным.
MIF_CHECKED | Признак отмеченного пункта меню. Перед текстом будет отображаться метка выбора.
MIF_SEPARATOR | Пункт меню отображается как разделитель. Разделитель может содержать текст, выровненный по середине.
MIF_DISABLE | Пункт меню недоступен.
MIF_GRAYED | Если флаг установлен, то пункт меню доступен в навигации, но не доступен для выбора.
MIF_HIDDEN | Если флаг установлен, то пункт меню не выводится на экран.
MIF_NONE | Нулевой флаг.
Text
Указатель на текст пункта меню.
AccelKey
Код клавиши, структура типа FarKey, для активизации пункта меню (HotKey). Пример работы - в меню Far Manager "Commands" нажатие клавиши Ctrl+O аналогично выбору пункта "Panels On/Off".
UserData
Пользовательские данные, ассоциированные с пунктом меню. Far Manager не использует это поле.
Reserved
Зарезервированные поля, должны быть равны 0.

Замечания

  1. В младшем слове Flags можно указывать код символа, который будет использоваться для отображения метки выбора. В этом случае система самостоятельно выставит флаг MIF_CHECKED для данного пункта меню.
  2. Если младшее слово Flags равно 0 и выставлен флаг MIF_CHECKED, или если младшее слово Flags равно 1, то будет отображаться стандартная метка выбора - символ с кодом 0FBh (√)
  3. При использовании флага MIF_SEPARATOR без текста, компонента Text должна быть проинициализирована в 0, например так:
    struct FarMenuItem Item;
Item.Flags=MIF_SEPARATOR;
Item.Text=NULL;
Смотрите также:
структуры


FarStandardFunctions

главная | структуры | Basic API
Структура FarStandardFunctions содержит указатели на стандартные функции, используемые в Far.exe
struct FarStandardFunctions
{
  size_t StructSize;

  FARSTDATOI                 atoi;
  FARSTDATOI64               atoi64;
  FARSTDITOA                 itoa;
  FARSTDITOA64               itoa64;
  FARSTDSPRINTF              sprintf;
  FARSTDSSCANF               sscanf;
  FARSTDQSORT                qsort;
  FARSTDBSEARCH              bsearch;
  FARSTDSNPRINTF             snprintf;

  FARSTDLOCALISLOWER         LIsLower;
  FARSTDLOCALISUPPER         LIsUpper;
  FARSTDLOCALISALPHA         LIsAlpha;
  FARSTDLOCALISALPHANUM      LIsAlphanum;
  FARSTDLOCALUPPER           LUpper;
  FARSTDLOCALLOWER           LLower;
  FARSTDLOCALUPPERBUF        LUpperBuf;
  FARSTDLOCALLOWERBUF        LLowerBuf;
  FARSTDLOCALSTRUPR          LStrupr;
  FARSTDLOCALSTRLWR          LStrlwr;
  FARSTDLOCALSTRICMP         LStricmp;
  FARSTDLOCALSTRNICMP        LStrnicmp;

  FARSTDUNQUOTE              Unquote;
  FARSTDLTRIM                LTrim;
  FARSTDRTRIM                RTrim;
  FARSTDTRIM                 Trim;
  FARSTDTRUNCSTR             TruncStr;
  FARSTDTRUNCPATHSTR         TruncPathStr;
  FARSTDQUOTESPACEONLY       QuoteSpaceOnly;
  FARSTDPOINTTONAME          PointToName;
  FARSTDGETPATHROOT          GetPathRoot;
  FARSTDADDENDSLASH          AddEndSlash;
  FARSTDCOPYTOCLIPBOARD      CopyToClipboard;
  FARSTDPASTEFROMCLIPBOARD   PasteFromClipboard;
  FARSTDINPUTRECORDTOKEYNAME FarInputRecordToName;
  FARSTDKEYNAMETOINPUTRECORD FarNameToInputRecord;
  FARSTDXLAT                 XLat;
  FARSTDGETFILEOWNER         GetFileOwner;
  FARSTDGETNUMBEROFLINKS     GetNumberOfLinks;
  FARSTDRECURSIVESEARCH      FarRecurseSearch;
  FARSTDMKTEMP               MkTemp;
  FARSTDPROCESSNAME          ProcessName;
  FARSTDMKLINK               MkLink;
  FARCONVERTPATH             ConvertPath;
  FARGETREPARSEPOINTINFO     GetReparsePointInfo;
  FARGETCURRENTDIRECTORY     GetCurrentDirectory;
  FARFORMATFILESIZE          FormatFileSize;
  FARSTDFARCLOCK             FarClock;
};

Элементы

StructSize
Это поле содержит размер структуры FarStandardFunctions. Если в будущем будут добавлены новые поля, это поле позволит определить это.

Замечания

Сохраните содержимое структуры в локальное пространство плагина:

static struct PluginStartupInfo Info;
static struct FarStandardFunctions FSF;

void WINAPI SetStartupInfoW(struct PluginStartupInfo *psInfo)
{
    Info=*psInfo;
    FSF=*psInfo->FSF;
    Info.FSF=&FSF; // скорректируем адрес в локальной структуре
    ...
}


GlobalInfo

главная | структуры | Basic API
Структура GlobalInfo возвращает в Far Manager основную информацию об экземпляре плагина.
struct GlobalInfo
{
  size_t StructSize;
  struct VersionInfo MinFarVersion;
  struct VersionInfo Version;
  GUID Guid;
  const wchar_t *Title;
  const wchar_t *Description;
  const wchar_t *Author;
};

Элементы

StructSize
Это поле должно содержать размер структуры GlobalInfo. Перед использованием структуры плагин должен заполнить поле.
MinFarVersion
Минимально необходимая версия Far Manager, структура типа VersionInfo. Используйте макрос MAKEFARVERSION для формирования значения.
Version
Текущая версия плагина, структура типа VersionInfo. Используйте макрос MAKEFARVERSION для формирования значения.
Guid
Уникальный GUID плагина. Используйте генератор GUID'ов для получения значения.
Title
Общее название плагина. Строка должна быть на английском языке. Пустая строка недопустима. Название должно быть лаконичным (не более 10-15 символов), не содержать спецсимволов, пробелов и знаков препинания. Примеры названий: Compare, Arclite, EMenu, TmpPanel.
Description
Дополнительная информация о плагине. Строка должна быть на английском языке. Пустая строка недопустима.
Author
Автор плагина. Строка должна быть на английском языке. Пустая строка недопустима.

Замечания

  1. Все поля структуры GlobalInfo должны быть заполнены, если это не так, то плагин не будет загружен Far Manager'ом.
  2. Все передаваемые в этой структуре данные должны быть правильными после возвращения из GetGlobalInfoW, таким образом вы не должны использовать автоматически создаваемые переменные. Используйте статические или глобальные переменные.

Пример

См. пример в функции GetGlobalInfoW.
Смотрите также:
структуры


OpenInfo

главная | структуры | Basic API
Структура OpenInfo используется для возвращения Far Manager'ом информации о плагине в функцию OpenW.
struct OpenInfo
{
  size_t StructSize;
  enum OPENFROM OpenFrom;
  const GUID *Guid;
  intptr_t Data;
};

Элементы

StructSize
Это поле содержит размер структуры OpenInfo.
OpenFrom
Идентификатор, определяющий, откуда был вызван плагин. Может принимать одно из следующих значений (перечисление OPENFROM):
Константа | Описание
OPEN_LEFTDISKMENU | Открыт из левого меню "Сменить диск" (Alt+F1).
OPEN_PLUGINSMENU | Открыт из меню "Команды внешних модулей" (F11).
OPEN_FINDLIST | Открыт из диалога "Поиск файла". Этот идентификатор плагин получит только в том случае, если он экспортирует функцию SetFindListW. Последующий вызов функции SetFindListW произойдёт только в том случае, если функция OpenW вернёт значение отличное от NULL.
OPEN_SHORTCUT | Открыт через ссылку на папку в меню "Команды" - "Ссылки на папки".
OPEN_COMMANDLINE | Был открыт из командной строки. Этот параметр может использоваться, только если плагин определил вызывающий префикс в функции GetPluginInfoW и этот префикс, с двоеточием после него, был указан в командной строке.
OPEN_EDITOR | Открыт из редактора.
OPEN_VIEWER | Открыт из встроенной программы просмотра.
OPEN_FILEPANEL | Открыт из панелей.
OPEN_DIALOG | Открыт из диалога.
OPEN_ANALYSE | Открыт после анализа содержимого файла (например, архива)
OPEN_RIGHTDISKMENU | Открыт из правого меню "Сменить диск" (Alt+F2).
OPEN_FROMMACRO | Открыт из макрокоманды макрофункцией Plugin.Call.
OPEN_LUAMACRO | Открыт для проверки или исполнения Lua-макроскрипта.
Guid
GUID выбранного элемента в списке пунктов, экспортированном данным плагином в меню "Диск", "Команды внешних модулей".
Data
Интерпретация параметра зависит от OpenFrom:
Константа | Описание
OPEN_LEFTDISKMENU | Этот параметр всегда равен 0.
OPEN_PLUGINSMENU | Этот параметр всегда равен 0.
OPEN_FINDLIST | Этот параметр всегда равен 0.
OPEN_SHORTCUT | Этот параметр равен адресу структуры OpenShortcutInfo, данные в момент сохранения горячей клавиши.
OPEN_COMMANDLINE | Этот параметр равен адресу структуры OpenCommandLineInfo, данные о командной строке.
OPEN_EDITOR | Этот параметр всегда равен 0.
OPEN_VIEWER | Этот параметр всегда равен 0.
OPEN_FILEPANEL | Этот параметр всегда равен 0.
OPEN_DIALOG | Этот параметр равен адресу структуры OpenDlgPluginData, данные о диалоге.
OPEN_ANALYSE | Этот параметр равен адресу структуры OpenAnalyseInfo, данные о файле-контейнере.
OPEN_RIGHTDISKMENU | Этот параметр всегда равен 0.
OPEN_FROMMACRO | Этот параметр равен адресу структуры OpenMacroInfo.
Смотрите также:
структуры


PluginInfo

главная | структуры | Basic API
Структура PluginInfo используется для возвращения Far Manager'у информации о плагине в функции GetPluginInfoW.
struct PluginInfo
{
  size_t StructSize;
  PLUGIN_FLAGS Flags;
  struct PluginMenuItem DiskMenu;
  struct PluginMenuItem PluginMenu;
  struct PluginMenuItem PluginConfig;
  const wchar_t *CommandPrefix;
};

Элементы

StructSize
Это поле должно содержать размер структуры PluginInfo. Перед использованием структуры плагин должен заполнить поле.
Flags
Комбинация следующих значений (тип PLUGIN_FLAGS).
Флаг | Описание
PF_PRELOAD | Отменить кеширование параметров плагина и заставить Far Manager всегда загружать плагин в память при старте. Должно быть указано, если необходимо изменять строки в меню "Диск", "Команды внешних модулей" или "Конфигурация модулей" динамически. Этот флаг уменьшает эффективность использования памяти.
PF_DISABLEPANELS | Не показывать плагин в меню "Команды внешних модулей", вызываемом из панелей.
PF_EDITOR | Показывать плагин в меню "Команды внешних модулей", вызываемом из редактора Far Manager.
PF_VIEWER | Показывать плагин в меню "Команды внешних модулей", вызываемом из вьюера Far Manager.
PF_DIALOG | Показывать плагин в меню "Команды внешних модулей", вызываемом из диалога Far Manager.
PF_FULLCMDLINE | Заставляет Far Manager передавать плагину всю командную строку вместе с префиксом CommandPrefix. Обязательно использовать этот флаг, если плагин умеет обрабатывать несколько префиксов CommandPrefix.
PF_NONE | Нулевой флаг.
DiskMenu
Если плагин добавляет строки в меню "Диск", это поле должно быть равным заполненной структуре PluginMenuItem.
PluginMenu
Если плагин добавляет строки в меню "Команды внешних модулей", это поле должно быть равным заполненной структуре PluginMenuItem.
PluginConfig
Если плагин добавляет строки в меню "Конфигурация модулей", это поле должно быть равным заполненной структуре PluginMenuItem.
CommandPrefix
Плагин может указать в этом поле строку префиксов командной строки, которые будут использоваться для перехвата команд Far Manager. Например, если плагин передал здесь адрес строки ftp и пользователь ввёл в командной строке что-то, начинающееся с ftp:, то функция OpenW будет вызвана с параметром OPEN_COMMANDLINE.
Если предполагается, что плагин будет обрабатывать несколько командных префиксов, то необходимо указать префиксы, разделённые двоеточием. Например, плагин если обрабатывает префиксы edit:, goto: и view:, то строка должна быть такой:
CommandPrefix=L"edit:view:goto";
Если вы не хотите добавлять команды к Far Manager'у, установите этот параметр в NULL.

Замечания

  1. Все передаваемые в этой структуре данные должны быть правильными после возвращения из GetPluginInfoW, таким образом вы не должны использовать автоматически создаваемые переменные. Используйте статические или глобальные переменные.
  2. Структура, передаваемая функции GetPluginInfoW, уже заполнена 0.
Смотрите также:
структуры, PluginMenuItem


PluginMenuItem

главная | структуры | Basic API
Структура PluginMenuItem используется в функции GetPluginInfoW.
struct PluginMenuItem
{
  const GUID *Guids;
  const wchar_t * const *Strings;
  size_t Count;
};

Элементы

Guids
Поле должно содержать адрес массива GUID'ов, добавляемых в меню строк Strings. GUID будет передаваться аргументом, при вызове функции OpenW и ConfigureW.

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

  • Все GUID'ы добавленных строк должны быть уникальны для одного плагина в пределах одного меню.
Strings
Поле должно быть равным адресу массива указателей на строки меню.
Count
Количество добавляемых в меню строк Strings.

Замечания

Все передаваемые в этой структуре данные должны быть правильными после возвращения из GetPluginInfoW, таким образом вы не должны использовать автоматически создаваемые адреса переменных. Используйте статические или глобальные переменные.
Смотрите также:
структуры


PluginStartupInfo

главная | структуры | Basic API
Структура PluginStartupInfo используется в функции SetStartupInfoW для передачи Far Manager'ом плагину различной важной информации.
struct PluginStartupInfo
{
  size_t                   StructSize;
  const wchar_t           *ModuleName;

  FARAPIMENU               Menu;
  FARAPIMESSAGE            Message;
  FARAPIGETMSG             GetMsg;
  FARAPIPANELCONTROL       PanelControl;
  FARAPISAVESCREEN         SaveScreen;
  FARAPIRESTORESCREEN      RestoreScreen;
  FARAPIGETDIRLIST         GetDirList;
  FARAPIGETPLUGINDIRLIST   GetPluginDirList;
  FARAPIFREEDIRLIST        FreeDirList;
  FARAPIFREEPLUGINDIRLIST  FreePluginDirList;
  FARAPIVIEWER             Viewer;
  FARAPIEDITOR             Editor;
  FARAPITEXT               Text;
  FARAPIEDITORCONTROL      EditorControl;

  FARSTANDARDFUNCTIONS    *FSF;

  FARAPISHOWHELP           ShowHelp;
  FARAPIADVCONTROL         AdvControl;
  FARAPIINPUTBOX           InputBox;
  FARAPICOLORDIALOG        ColorDialog;
  FARAPIDIALOGINIT         DialogInit;
  FARAPIDIALOGRUN          DialogRun;
  FARAPIDIALOGFREE         DialogFree;
  FARAPISENDDLGMESSAGE     SendDlgMessage;
  FARAPIDEFDLGPROC         DefDlgProc;
  FARAPIVIEWERCONTROL      ViewerControl;
  FARAPIPLUGINSCONTROL     PluginsControl;
  FARAPIFILEFILTERCONTROL  FileFilterControl;
  FARAPIREGEXPCONTROL      RegExpControl;
  FARAPIMACROCONTROL       MacroControl;
  FARAPISETTINGSCONTROL    SettingsControl;

  void                     *Private;
};

Элементы

StructSize
Это поле содержит размер структуры PluginStartupInfo. Если в будущем будут добавлены новые поля, это поле позволит определить это.
ModuleName
Полное имя плагина с путём.
Private
Поле используется Far Manager'ом для взаимодействия с отдельными стандартными плагинами.

Замечания

Смотрите также:
структуры


VersionInfo

главная | структуры | Basic API
Структура VersionInfo содержит информацию о версии плагина, передается в Far Manager через структуру GlobalInfo.
struct VersionInfo
{
  DWORD Major;
  DWORD Minor;
  DWORD Revision;
  DWORD Build;
  enum VERSION_STAGE Stage;
};

Элементы

Major, Minor, Revision, Build
Версия плагина.
Stage
Тип версии (перечисление VERSION_STAGE):
Тип | Описание
VS_RELEASE | релиз
VS_ALPHA | альфа
VS_BETA | бета
VS_RC | релиз-кандидат
Смотрите также:
структуры


Panel API

главная

Краткое описание Panel API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция | Описание
AnalyseW | проанализировать содержимое файла
CloseAnalyseW | освобождение ресурсов
ClosePanelW | перед закрытием открытой панели плагина
CompareW | перекрывает алгоритм сортировки на панели
DeleteFilesW | удаление файлов
FreeFindDataW | освобождает память, запрошенную функцией GetFindDataW
GetFilesW | получить файлы для обработки (копирование/перемещение/просмотр...)
GetFindDataW | получить список элементов для панели
GetOpenPanelInfoW | информация об открываемой панели плагина
MakeDirectoryW | создать каталог
ProcessPanelEventW | обработка событий панели
ProcessHostFileW | выполнить архивную команду Far Manager'a
ProcessPanelInputW | обработка событий клавиатуры и мыши
PutFilesW | поместить файлы на эмулируемую файловую систему
SetDirectoryW | установить текущий каталог на эмулируемой файловой системе
SetFindListW | перемещает найденные в Диалоге поиска файлов файлы в эмулируемую файловую панель

Сервисные функции, указатели на эти функции плагины получают от Far Manager в функции SetStartupInfoW

Функция | Описание
PanelControl | позволяет запрашивать различную информацию и выполнять управляющие действия
FileFilterControl | управляет созданием и применением файловых фильтров
FreeDirList | освобождает память, выделенную для списка файлов функцией GetDirList
FreePluginDirList | освобождает память, выделенную для списка файлов функцией GetPluginDirList
GetDirList | возвращает список файлов в указанной директории
GetPluginDirList | возвращает список файлов в указанной директории эмулируемой файловой системы

Структуры

Структура | Описание
AnalyseInfo | информация для анализа файла
CloseAnalyseInfo | информация для освобождения ресурсов
ClosePanelInfo | информация о закрываемой панели
CmdLineSelect | выделение или сброс выделения блока в командной строке
CompareInfo | информация о сравниваемых элементах
DeleteFilesInfo | информация об удаляемых элементах
FarGetPluginPanelItem | элемент с панели
FarPanelDirectory | задание каталога панели
FarPanelItemFreeInfo | освобождение ресурсов у элемента панели
FarSetKeyBarTitles | переопределяет названия функциональных клавиш
FreeFindDataInfo | информация об удаляемой памяти
GetFilesInfo | информация о запрашиваемых файлах
GetFindDataInfo | информация о запрашиваемых файлах
InfoPanelLine | одна линия информационной панели
KeyBarLabel | переопределяет названия функциональных клавиш в полоске клавиш
KeyBarTitles | переопределяет названия функциональных клавиш в полоске клавиш
MakeDirectoryInfo | информация о создаваемом каталоге
OpenAnalyseInfo | данные после анализа файла
OpenCommandLineInfo | данные о командной строке
OpenPanelInfo | данные о создаваемой панели
OpenShortcutInfo | данные о шорт-кате
PanelInfo | информация о панели
PanelMode | определяет режим просмотра панели
PanelRedrawInfo | используется при перерисовке панели
PluginPanelItem | информация об одном элементе в эмулируемой файловой системе
ProcessHostFileInfo | информация при обработке архива
ProcessPanelEventInfo | информация о событии в панели
ProcessPanelInputInfo | информация о событии в панели
PutFilesInfo | информация о помещаемых на панель элементах
SetDirectoryInfo | информация о новом каталоге на панели
SetFindListInfo | информация о найденных элементах
Смотрите также:
Типы и определения


AnalyseW

главная | экспортируемые функции | Panel API
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'ом файла
}
Смотрите также:
CloseAnalyseW


CloseAnalyseW

главная | экспортируемые функции | Panel API
Функция CloseAnalyseW вызывается Far Manager для передачи плагину данных, которые плагин может удалить.
void WINAPI CloseAnalyseW(
  const struct CloseAnalyseInfo *Info
);

Параметры

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

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

Нет.

Пример

Пример из плагина "arclite".
void WINAPI CloseAnalyseW(const struct CloseAnalyseInfo *info)
{
  delete static_cast(info->Handle);
}
Смотрите также:
AnalyseW


ClosePanelW

главная | экспортируемые функции | Panel API
Функция ClosePanelW вызывается Far Manager перед закрытием открытой панели плагина.
void WINAPI ClosePanelW(
  const struct ClosePanelInfo *Info
);

Параметры

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

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

Нет.

Пример

Пример из плагина "TmpPanel".
void WINAPI ClosePanelW(const struct ClosePanelInfo *Info)
{
  delete(TmpPanel *)Info->hPanel;
}
Смотрите также:
ExitFARW


CompareW

главная | экспортируемые функции | Panel API
Плагин может экспортировать функцию CompareW, чтобы перекрыть используемый по умолчанию алгоритм сортировки файлов.
intptr_t WINAPI CompareW(
  const struct CompareInfo *Info
);

Параметры

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

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

Эта функция возвращает одно из следующих значений:
  • -1 если CompareInfo.Item1 < CompareInfo.Item2
  •  0 если CompareInfo.Item1 == CompareInfo.Item2
  •  1 если CompareInfo.Item1 > CompareInfo.Item2
  • -2 если используется внутренняя функция Compare для данного метода сортировки.

Замечания

Для сортировки элементов Far Manager использует стандартную RTL-функцию qsort, которая реализует нестабильную сортировку. Иными словами, если элементы массива равны с точки зрения функции сравнения, на панели они будут отображаться в произвольном порядке, меняющемся при каждом перечитывании панели.

Пример

Пример из плагина "ProcList".
intptr_t WINAPI CompareW(const struct CompareInfo *Info)
{
  return ((Plist *)Info->hPanel)->Compare(Info->Item1, Info->Item2, Info->Mode);
}


DeleteFilesW

главная | экспортируемые функции | Panel API
Функция DeleteFilesW вызывается для удаления файлов из эмулируемой файловой системы
(Far Manager плагину: "этот (эти) файлы с твоей панели нужно удалить").
intptr_t WINAPI DeleteFilesW(
  const struct DeleteFilesInfo *Info
);

Параметры

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

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

Если функция выполнила свои действия успешно, то верните 1. В противном случае 0.

Замечания

  1. Плагин должен сам обрабатывать "свои" папки.
  2. Хорошим тоном считается вариант, когда плагин перед удалением "попросит" подтвердить пользователя о своих намерениях (см. также ACTL_GETCONFIRMATIONS, флаги FCS_DELETE и FCS_DELETENONEMPTYFOLDERS)

Пример

intptr_t WINAPI DeleteFilesW(const struct DeleteFilesInfo *Info)
{
  struct PluginPanelItem * curPI=&Info->PanelItem[0];
  for(int CurItem=0; CurItem<Info->ItemsNumber; CurItem++, curPI++)
  {
    wchar_t *File=curPI->FileName;
    if(!RemoveFileFromFS(File))
    {
      wchar_t *MsgItems[]={L"Delete failed",L"",L"OK"};
      MsgItems[1] = GetErrorStringFS();
      Message(&MainGUID,&MsgGUID,0,NULL,MsgItems,sizeof(MsgItems)/sizeof(MsgItems[0]),1);
      return 0;
    }
  }
  return 1;
}


FreeFindDataW

главная | экспортируемые функции | Panel API
Функция FreeFindDataW должна освободить память, выделенную функцией GetFindDataW
(Far Manager плагину: "я тут списочек запрашивал, так вот, он мне более не нужен, освободи память").
void WINAPI FreeFindDataW(
  const struct FreeFindDataInfo *Info
);

Параметры

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

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

Нет.

Пример

Пример из плагина "ProcList".
void WINAPI FreeFindDataW(const struct FreeFindDataInfo *Info)
{
  ((Plist *)Info->hPanel)->FreeFindData(Info->PanelItem,(int)Info->ItemsNumber);
}
Смотрите также:
GetFindDataW


GetFilesW

главная | экспортируемые функции | Panel API
Функция GetFilesW вызывается для получения файлов из эмулируемой файловой системы
(Far Manager плагину: "хочу этот/эти файл(ы) с твоей панели, место назначения указано").
intptr_t WINAPI GetFilesW(
  struct GetFilesInfo *Info
);

Параметры

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

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

  • В случае успеха возвращаемое значение должно быть равно 1.
  • В случае провала возвращаться 0.
  • Если функция была прервана пользователем, то должно возвращаться -1.

Замечания

  1. Плагин должен сам обрабатывать "свои" папки.
  2. Если операция не удалась, но часть файлов была успешно обработана, плагин может снять выделение только с обработанных файлов. Чтобы сделать это, он должен очистить флаг PPIF_SELECTED в обработанных элементах в переданном функции списке структур PluginPanelItem.
  3. Данная функция вызывается только для плагинов, реализующих виртуальные файловые системы. Для этого необходимо при вызове GetOpenPanelInfoW снять флаг OPIF_REALNAMES, иначе данная функция никогда не будет вызвана.

Пример

Пример из плагина "ProcList".
intptr_t WINAPI GetFilesW(struct GetFilesInfo *Info)
{
  return ((Plist *)Info->hPanel)->GetFiles(Info->PanelItem,(int)Info->ItemsNumber,Info->Move,&Info->DestPath,Info->OpMode);
}
Смотрите также:
PutFilesW, GetDirList, GetPluginDirList


GetFindDataW

главная | экспортируемые функции | Panel API
Функция GetFindDataW вызывается для получения списка файлов из текущего каталога эмулируемой файловой системы
(Far Manager плагину: "дай-ка я взгляну на списочек твоих файлов, память сам выдели :-)").
intptr_t WINAPI GetFindDataW(
  struct GetFindDataInfo *Info
);

Параметры

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

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

Если функция выполнила свои действия успешно, то верните 1. В противном случае 0.

Замечания

  1. В этой функции плагин динамически формирует список элементов, если это происходит, то необходимо позаботиться об освобождении памяти, когда список уже не нужен, т.е. не забыть бы про экспортирование функции FreeFindDataW.
  2. Если функция вернёт 0, то плагин будет закрыт.
  3. В некоторых случаях (пример: поиск в архивах по Alt+F7) физически панель плагина не создаётся, поэтому необходимо обязательно проверять код возврата у PanelControl, чтобы не упасть в самый не подходящий момент, выполнив работу для панели, которой нет.
  4. Если вы не хотите, чтобы ваш плагин использовался во время "поиска в архивах" ("[x] Искать в архивах" в диалоге поиска), то возвращайте 0 в случае, если OpMode содержит флаг OPM_FIND.

Пример

Пример из плагина "ProcList".
intptr_t WINAPI GetFindDataW(struct GetFindDataInfo *Info)
{
  return ((Plist *)Info->hPanel)->GetFindData(Info->PanelItem,Info->ItemsNumber,Info->OpMode);
}
Смотрите также:
FreeFindDataW


GetOpenPanelInfoW

главная | экспортируемые функции | Panel API
Функция GetOpenPanelInfoW вызывается Far Manager для получения информации об открываемой панели плагина.
void WINAPI GetOpenPanelInfoW(
  struct OpenPanelInfo *Info
);

Параметры

Info
Указатель на структуру OpenPanelInfo. Плагин заполняет структуру в этой функции.

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

Нет.

Замечания

  1. Структура OpenPanelInfo, передаваемая функции GetOpenPanelInfoW, уже заполнена 0. Плагин обязательно должен заполнить поле OpenPanelInfo.StructSize
  2. Far Manager вызывает функцию GetOpenPanelInfoW достаточно часто, поэтому при проектировании плагина необходимо минимизировать "расчёты", производимые в этой функции.

Пример

Пример из плагина "TmpPanel".
void WINAPI GetOpenPanelInfoW(struct OpenPanelInfo *Info)
{
  TmpPanel *Panel=(TmpPanel *)Info->hPanel;
  Panel->GetOpenPanelInfo(Info);
}
Смотрите также:
OpenPanelInfo


MakeDirectoryW

главная | экспортируемые функции | Panel API
Функция MakeDirectoryW вызывается Far Manager для создания нового каталога в эмулируемой файловой системе.
intptr_t WINAPI MakeDirectoryW(
  struct MakeDirectoryInfo *Info
);

Параметры

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

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

  • В случае успеха возвращаемое значение должно быть равно 1.
  • В случае провала возвращаться 0.
  • Если функция была прервана пользователем, то должно возвращаться -1.
Смотрите также:
OpenW


ProcessPanelEventW

главная | экспортируемые функции | Panel API
Функция ProcessPanelEventW сообщает плагину о разных событиях панели и позволяет обработать некоторые из них.
intptr_t WINAPI ProcessPanelEventW(
  const struct ProcessPanelEventInfo *Info
);

Параметры

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

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

Возвращаемое значение зависит от типа события, смотрите описание событий для уточнения информации.
Для необрабатываемых плагином событий, функция должна возвращать 0.

Пример

Пример из плагина "ProcList".
intptr_t WINAPI ProcessPanelEventW(const struct ProcessPanelEventInfo *Info)
{
  return ((Plist *)Info->hPanel)->ProcessEvent(Info->Event,Info->Param);
}


ProcessHostFileW

главная | экспортируемые функции | Panel API
Функция ProcessHostFileW вызывается, чтобы выполнить архивные команды Far Manager. Рекомендуется поместить сюда дополнительные операции, которые обрабатывают файл, на основании которого плагин эмулирует файловую систему.
intptr_t WINAPI ProcessHostFileW(
  const struct ProcessHostFileInfo *Info
);

Параметры

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

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

Если функция выполнила свои действия успешно, то верните 1. В противном случае 0.

Примечание

Если операция не удалась, но часть файлов была успешно обработана, плагин может удалить выделение только с обработанных файлов. Для этого он должен очистить флаг PPIF_SELECTED у обработанных элементов переданного функции списка PluginPanelItem.


ProcessPanelInputW

главная | экспортируемые функции | Panel API
Функция ProcessPanelInputW позволяет перекрыть стандартную обработку клавиш и мыши (сейчас не задействовано) на панели плагина.
intptr_t WINAPI ProcessPanelInputW(
  const struct ProcessPanelInputInfo *Info
);

Параметры

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

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

  • Если плагин должен передать управление в Far Manager, то верните 0.
  • Если плагин в полной мере отработал событие или вы хотите, чтобы Far Manager игнорировал это событие, то верните 1.

Замечания

  1. Плагин должен корректно обрабатывать входные события путём анализа поля Info->INPUT_RECORD.EventType и, в случае если плагин данное событие не обрабатывает, вернуть управление в Far Manager.
  2. Во время "проигрывания" макроса клавиатурные события (KEY_EVENT) имеют "новый" тип - поле Info->INPUT_RECORD.EventType равно значению 0x8001.

Пример

Пример из плагина "ProcList".
intptr_t WINAPI ProcessPanelInputW(const struct ProcessPanelInputInfo *Info)
{
  return ((Plist *)Info->hPanel)->ProcessKey(&Info->Rec);
}


PutFilesW

главная | экспортируемые функции | Panel API
Функция PutFilesW вызывается Far Manager для перемещения файлов на панель эмулируемой файловой системы.
(Far Manager плагину: "этот/эти файл(ы) для тебя, можешь поместить на свою панель").
intptr_t WINAPI PutFilesW(
  const struct PutFilesInfo *Info
);

Параметры

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

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

  • В случае удачи, функция должна возвращать 1 или 2. Если плагин возвращает 1, то Far Manager пытается установить курсор на последний по дате создания файл текущей панели. Если плагин возвращает 2, то Far Manager никаких перемещений курсора не предпринимает.
  • Если функция завершилась неудачей, должен возвращаться 0.
  • Если же функция была прервана пользователем, то возвращаемое значение должно равняться -1.

Замечания

  1. Если операция была прервана, но часть файлов всё же была скопирована, плагин может убрать выделение только с обработанных файлов. Для этого он должен сбросить флаг PPIF_SELECTED у соответствующих структур файлов, передаваемых в функцию через параметр PutFilesInfo.PanelItem.

Пример

Пример из плагина "TmpPanel".
intptr_t WINAPI PutFilesW(const struct PutFilesInfo *Info)
{
  TmpPanel *Panel=(TmpPanel *)Info->hPanel;
  return Panel->PutFiles(Info->PanelItem,Info->ItemsNumber,Info->Move,Info->SrcPath,Info->OpMode);
}
Смотрите также:
GetFilesW, GetDirList, GetPluginDirList


SetDirectoryW

главная | экспортируемые функции | Panel API
Функция SetDirectoryW вызывается Far Manager'ом для смены каталога в эмулируемой файловой системе.
intptr_t WINAPI SetDirectoryW(
  const struct SetDirectoryInfo *Info
);

Параметры

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

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

Если функция выполнила свои действия успешно, то верните 1. В противном случае 0.

Замечания

Если в SetDirectoryInfo.OpMode выставлен флаг OPM_FIND, то:
  1. это значит, что функция SetDirectoryW вызывается из диалога поиска файлов (Alt+F7) или другой команды, сканирующей каталоги. Поэтому плагин не должен производить никаких действий кроме смены каталога и возвращения 1 в случае удачи или 0 в случае невозможности сменить каталог.
  2. плагин должен аккуратно обрабатывать каталог ".." и при невозможности сменить его - возвращать 0. Иначе поиск может зациклиться на панели этого плагина.

Пример

Пример из плагина "TmpPanel".
intptr_t WINAPI SetDirectoryW(const struct SetDirectoryInfo *Info)
{
  TmpPanel *Panel=(TmpPanel *)Info->hPanel;
  return Panel->SetDirectory(Info->Dir,Info->OpMode);
}


SetFindListW

главная | экспортируемые функции | Panel API
Функция SetFindListW предназначена для переноса найденных объектов из диалога Поиска файлов в эмулируемую файловую систему. Физически файлы не должны копироваться или изменяться.
intptr_t WINAPI SetFindListW(
  const struct SetFindListInfo *Info
);

Параметры

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

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

Если функция выполнила свои действия успешно, то верните 1. В противном случае 0.

Замечания

  • Типичный представитель, использующий данную функцию - плагин Temporary panel (TMPCLASS.CPP, функция TmpPanel::SetFindList)
  • Перед вызовом этой функции Far Manager вызывает функцию OpenW(OPEN_FINDLIST...) и только после успешного её завершения вызовет SetFindListW.

Пример

Пример из плагина "TmpPanel".
intptr_t WINAPI SetFindListW(const struct SetFindListInfo *Info)
{
  TmpPanel *Panel=(TmpPanel *)Info->hPanel;
  return Panel->SetFindList(Info->PanelItem,Info->ItemsNumber);
}


PanelControl

главная | сервисные функции | Panel API
Функция PanelControl позволяет запрашивать различную информацию и выполнять управляющие действия над панелями и командной строкой.
intptr_t WINAPI PanelControl(
  HANDLE hPanel,
  enum FILE_CONTROL_COMMANDS Command,
  intptr_t Param1,
  void *Param2
);

Параметры

hPanel
Текущий описатель панели. При запросе информации относительно активной панели установите этот параметр равным PANEL_ACTIVE, для пассивной - PANEL_PASSIVE. Это позволяет использовать эту функцию в командах плагина без создания новой панели. Также PANEL_ACTIVE(PANEL_PASSIVE) можно использовать для неплагиновой панели.
Command
Тип команды. Может быть следующим FILE_CONTROL_COMMANDS):
Команда Описание
Панель
FCTL_CHECKPANELSEXIST Проверить доступность панелей.
Param1 не используется.
Param2 не используется.
Функция возвращает FALSE, если Far Manager запущен с ключами /e или /v (в качестве внешнего редактора или программы просмотра). В этом режиме панели не создаются.

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

  • В режиме, когда Far Manager запущен с ключами /e или /v, функция обрабатывает только одну эту команду - FCTL_CHECKPANELSEXIST.
FCTL_ISACTIVEPANEL Проверяет, является ли панель активной.
Param1 не используется.
Param2 не используется.
Функция возвращает FALSE, если панель не активна.
FCTL_CLOSEPANEL Закрыть текущую панель плагина.
Param1 не используется.
Param2 указывает на имя каталога, который будет показан в панели после закрытия.
FCTL_GETPANELINFO Получить общую информацию о панели.
Param1 не используется.
Param2 указывает на структуру PanelInfo, которая получит информацию о панели.

В процессе исполнения запроса

Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELINFO,0,&PInfo);
Far Manager вызывает экспортируемую функцию GetOpenPanelInfoW того плагина, которому принадлежит панель. Far Manager содержит защиту от бесконечной рекурсии: в случае, когда плагин из обработчика GetOpenPanelInfoW() тоже вызывает Info.PanelControl(...,FCTL_GETPANELINFO), повторного вложенного вызова GetOpenPanelInfoW() не произойдёт.

В некоторых случаях (пример: поиск в архивах по Alt+F7) физически панель плагина не создаётся, поэтому необходимо обязательно проверять код возврата у PanelControl, чтобы не упасть в самый не подходящий момент, выполнив работу для панели, которой нет.

FCTL_GETCOLUMNTYPES Получить строку, описывающую типы колонок.
Param1 размер буфера. Указывает максимальное количество символов, которые могут быть записаны в Param2, включая завершающий '\0'.
Param2 указывает на буфер, выделяемый плагином, в который будет помещено описание типов колонок (например, такая строка "N,SC,D,T").
Функция возвращает необходимый размер буфера в символах, если Param2 = NULL.
FCTL_GETCOLUMNWIDTHS Получить строку, описывающую ширину колонок.
Param1 размер буфера в символах. Указывает максимальное количество символов, которые могут быть записаны в Param2, включая завершающий '\0'.
Param2 указывает на буфер, выделяемый плагином, в который будет помещено описание ширины колонок (например, такая строка "0,8,0,5").
Функция возвращает необходимый размер буфера в символах, если Param2 = NULL.
FCTL_GETPANELDIRECTORY Получить текущий каталог панели.
Param1 размер буфера. Начало буфера - структура типа FarPanelDirectory, затем следуют компоненты структуры.
Param2 указывает на структуру типа FarPanelDirectory.
Функция возвращает необходимый размер буфера, если Param2 = NULL или Param1 меньше реального размера.
FCTL_GETPANELFORMAT Получить формат панели (см. OpenPanelInfo::Format).
Param1 размер буфера в символах. Указывает максимальное количество символов, которые могут быть записаны в Param2, включая завершающий '\0'.
Param2 указывает на буфер, выделяемый плагином, в который будет помещен формат панели.
Если панель не принадлежит плагину, то функция вернет размер пустой строки.
Функция возвращает необходимый размер буфера в символах, если Param2 = NULL.
FCTL_GETPANELHOSTFILE Получить имя файла, на основе которого эмулирована файловая система на панели (см. OpenPanelInfo::HostFile).
Param1 размер буфера в символах. Указывает максимальное количество символов, которые могут быть записаны в Param2, включая завершающий '\0'.
Param2 указывает на буфер, выделяемый плагином, в который будет помещено имя хост-файла.
Если панель не принадлежит плагину, то функция вернет размер пустой строки.
Функция возвращает необходимый размер буфера в символах, если Param2 = NULL.
FCTL_GETPANELITEM Получить файловый элемент панели.
Param1 порядковый номер элемента на панели (подмножество PanelInfo::ItemsNumber).
Param2 указывает на структуру типа FarGetPluginPanelItem.
Функция возвращает размер запрашиваемого элемента панели PluginPanelItem, если Param2 = NULL.

Замечание для FCTL_GETPANELITEM Внимание! Tак делать нельзя:

PluginPanelItem PPI;
Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELITEM,J,&PPI);

Пример правильного использования:

for(int J=0; J < PInfo.ItemsNumber; J++)
{
  size_t Size=Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELITEM,J,0);
  PluginPanelItem *PPI=(PluginPanelItem*)malloc(Size);
  if (PPI)
  {
    FarGetPluginPanelItem FGPPI={sizeof(FarGetPluginPanelItem),Size,PPI};
    Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELITEM,J,&FGPPI);
    lstrcpy(CurFile[J],PPI->FileName);
    free(PPI);
  }
}
FCTL_GETPANELPREFIX Получить префикс плагиновой панели.
Param1 размер буфера. Указывает максимальное количество символов, которые могут быть записаны в Param2, включая завершающий '\0'.
Param2 указывает на буфер, выделяемый плагином, в который будет помещено значение префикса плагиновой панели (см. PluginInfo::CommandPrefix).
Если панель не принадлежит плагину, то функция вернет размер пустой строки.
Функция возвращает необходимый размер буфера в символах, если Param2 = NULL.
FCTL_GETSELECTEDPANELITEM Получить выделенный файловый элемент панели.
Param1 порядковый номер элемента на панели (подмножество PanelInfo::SelectedItemsNumber).
Param2 указывает на структуру типа FarGetPluginPanelItem.
Функция возвращает размер запрашиваемого элемента панели PluginPanelItem, если Param2 = NULL.

PanelInfo.SelectedItemsNumber равно 1, если не выделено никаких элементов. В этом случае PluginPanelItem содержит данные для элемента под курсором. Если вы хотите узнать, действительно ли выделен этот файл, то проверьте у него состояние флага PPIF_SELECTED.

FCTL_GETCURRENTPANELITEM Получить текущий файловый элемент панели.
Param1 не используется.
Param2 указывает на структуру типа FarGetPluginPanelItem.
Функция возвращает размер запрашиваемого элемента панели PluginPanelItem, если Param2 = NULL.
FCTL_REDRAWPANEL Перерисовать панель.
Param1 не используется.
Param2 указатель на структуру PanelRedrawInfo, которой можно задать новые позиции курсора и верхнего элемента панели. Если Param2 = NULL, то позиции курсора и верхнего элемента панели при прорисовке не изменяются.
Панель прорисуется только в случае, если в данный момент панель видна.
FCTL_SETACTIVEPANEL Сделать панель активной.
Param1 не используется.
Param2 не используется.
Функция возвращает FALSE, если hPanel отлична от PANEL_ACTIVE или PANEL_PASSIVE и не принадлежит плагину, или панель в данный момент не видима.
Для hPanel = PANEL_ACTIVE никаких действий не происходит, функция вернет TRUE.

Например, установить на пассивной панели каталог TempDirectory и сделать эту панель активной:

FarPanelDirectory dirInfo={sizeof(FarPanelDirectory),TempDirectory,nullptr,{0},nullptr};
Info.PanelControl(PANEL_PASSIVE,FCTL_SETPANELDIRECTORY,0,&dirInfo);
Info.PanelControl(PANEL_PASSIVE,FCTL_SETACTIVEPANEL,0,0);
FCTL_SETNUMERICSORT Задаёт числовой порядок сортировки для панели.
Param1 целое число, задающее числовую сортировку:
0 - отключить числовую сортировку или 1 - включить числовую сортировку.
Param2 не используется.
FCTL_SETCASESENSITIVESORT Задаёт сортировку с учётом регистра для панели.
Param1 целое число, задающее сортировку с учётом регистра:
0 - отключить сортировку с учётом регистра или 1 - включить сортировку с учётом регистра.
Param2 не используется.
FCTL_SETPANELDIRECTORY Установить текущий каталог в панели.
Param1 не используется.
Param2 указывает на структуру типа FarPanelDirectory.
Если плагин поддерживает свою собственную панель, он будет закрыт после выполнения этой команды.

После выполнения этой функции пропадёт выделение с элементов каталога и его будет невозможно восстановить (комбинация Ctrl+M) по желанию пользователя, даже если новый каталог равен старому.

FCTL_BEGINSELECTION,
FCTL_ENDSELECTION 		Начать/закончить операцию выделения в панели.
Param1 не используется.
Param2 не используется.

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

  • Порядок использования смотрите в примере к FCTL_SETSELECTION
FCTL_SETSELECTION Установить выделение в панели.
Param1 порядковый номер элемента на панели (подмножество PanelInfo::ItemsNumber).
Param2 указывает на переменную типа BOOL (TRUE - выделить элемент, FALSE - снять выделение).

Нужно вызвать FCTL_REDRAWPANEL для показа изменений.

Пример:

// начинаем операцию по выделению файлов
Info.PanelControl(PANEL_ACTIVE,FCTL_BEGINSELECTION,0,NULL);

// выделяем
for(int i=0; i < PInfo.ItemsNumber; i++)
{
  Info.PanelControl(PANEL_ACTIVE,FCTL_SETSELECTION,i,(void*)TRUE);
}
// завершаем операцию и перерисовываем панель
Info.Control(PANEL_ACTIVE,FCTL_ENDSELECTION,0,NULL);
Info.Control(PANEL_ACTIVE,FCTL_REDRAWPANEL,0,NULL);
FCTL_CLEARSELECTION
Снять выделение с выделенных элементов панели.
Param1 порядковый номер элемента на панели (подмножество PanelInfo::SelectedItemsNumber).
Param2 не используется.

Нужно вызвать FCTL_REDRAWPANEL для показа изменений.

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

  • Порядок использования такой же, что и в примере к FCTL_SETSELECTION
FCTL_SETSORTMODE Установить режим сортировки для панели.
Param1 целое число, содержащее режим сортировки (см. "Режимы сортировки").
Param2 не используется.
FCTL_SETSORTORDER Задаёт порядок сортировки для панели.
Param1 целое число, содержащее порядок сортировки: 0 или 1 (обратная сортировка).
Param2 не используется.
FCTL_SETVIEWMODE Установить режим просмотра панели.
Param1 целое число, которое содержит номер нового режима, от 0 до 9.
Param2 не используется.
FCTL_UPDATEPANEL Обновить содержимое панели.
Если Param1 = 0, текущее выделение файлов будет снято, иначе выделение не изменится.
Param2 не используется.
FCTL_SETDIRECTORIESFIRST Задаёт режим отображения каталогов в начале списка файлов.
Param1 целое число, 1 - каталоги отображаются в начале списка, 0 - нет.
Param2 не используется.
Командная строка
FCTL_GETCMDLINE Получить содержимое командной строки.
Param1 размер буфера в символах. Указывает максимальное количество символов, которые могут быть записаны в Param2, включая '\0'.
Param2 указывает на буфер, выделяемый плагином, который получит данные.
Функция возвращает необходимый размер буфера в символах, если Param2 = NULL.
FCTL_GETCMDLINEPOS Получить позицию курсора в командной строке.
Param1 не используется.
Param2 содержит указатель на переменную типа int, в которую будет помещена позиция курсора.
FCTL_GETCMDLINESELECTION Получить параметры выделенного текста командной строки.
Param1 не используется.
Param2 указывает на структуру CmdLineSelect.
FCTL_INSERTCMDLINE Вставить текст в командную строку, начиная с текущей позиции курсора.
Param1 не используется.
Param2 указывает на строку, оканчивающуюся нулём, которая будет вставлена в командную строку.
FCTL_SETCMDLINE Установить содержимое командной строки.
Param1 не используется.
Param2 указывает на строку, оканчивающуюся нулём, которая будет помещена в командную строку.
FCTL_SETCMDLINEPOS Установить позицию курсора в командной строке.
Param1 содержит переменную с новой позицией курсора.
Param2 не используется.
FCTL_SETCMDLINESELECTION Выделить текст командной строки.
Param1 не используется.
Param2 указывает на структуру CmdLineSelect.
Прочие
FCTL_SETUSERSCREEN Установить обработанную плагином копию Пользовательского экрана под панели Far Manager.
Param1 должен быть 0, Param2 должен быть NULL.
FCTL_GETUSERSCREEN Предоставить для нужд плагина копию Пользовательского экрана Far Manager (он показывается, когда панели убpаны).
Param1 должен быть 0, Param2 должен быть NULL.
Param1
Указывает на параметры1 команды. Смотрите описание Command.
Param2
Указывает на параметры2 команды. Смотрите описание Command.

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

В случае успеха возвращается TRUE, иначе FALSE.

Замечания

Обычно вы не должны обновлять или перерисовывать панель и директивно закрывать плагин. Far Manager делает это сам, при выполнении стандартных операций. Эти функции могут быть необходимыми для реализации некоторых нестандартных функциональных возможностей.
Смотрите также:
AdvControl, EditorControl


FileFilterControl

главная | сервисные функции | Panel API
Функция FileFilterControl позволяет управлять созданием и применением файловых фильтров.
intptr_t WINAPI FileFilterControl(
  HANDLE hHandle,
  enum FAR_FILE_FILTER_CONTROL_COMMANDS Command,
  intptr_t Param1,
  void *Param2
);

Параметры

hHandle
Смотрите описание Command.
Command
Может быть одним из следующих значений (перечисление FAR_FILE_FILTER_CONTROL_COMMANDS):
Команда Описание
FFCTL_CREATEFILEFILTER Создаёт фильтр для заданной области.
hHandle должен быть установлен в значение PANEL_ACTIVE или PANEL_PASSIVE,
для фильтра типа FFT_CUSTOM, описатель должен быть установлен в значение PANEL_NONE.
Param1 в следующее значение (перечисление FAR_FILE_FILTER_TYPE):
Константа | Описание
FFT_PANEL | панель
FFT_FINDFILE | диалог поиска файлов
FFT_COPY | диалог копирования
FFT_SELECT | диалог пометки файлов
FFT_CUSTOM | пользовательская область (для использования плагином)
Созданный фильтр получит настройки заданного типа, настройки глобальны и всегда идентичны в любом фильтре этого типа (но левая и правая панели различаются).
Param2 - указатель типа HANDLE, в который запишется созданный описатель фильтра.
Функция при неудаче вернёт FALSE и Param2 = INVALID_HANDLE_VALUE.
FFCTL_FREEFILEFILTER Освобождает память занятую при создании фильтра.
hHandle - описатель фильтра, созданный по команде FFCTL_CREATEFILEFILTER.
Param1 и Param2 игнорируются.
Функция возвращает TRUE.
FFCTL_OPENFILTERSMENU Открывает меню с параметрами фильтра для заданной области.
hHandle - описатель фильтра, созданный по команде FFCTL_CREATEFILEFILTER.
Param1 и Param2 игнорируются.
Функция возвращает FALSE, если меню отменено пользователем.
FFCTL_STARTINGTOFILTER Обновить параметр "текущее время", который используется для сравнения относительных дат.
hHandle - описатель фильтра, созданный по команде FFCTL_CREATEFILEFILTER.
Param1 и Param2 игнорируются.
Вызов этой команды надо делать до начала операции фильтрования, для того чтобы правильно работали фильтры с относительной датой.
Функция возвращает TRUE.
FFCTL_ISFILEINFILTER Сравнивает файл с параметрами фильтра.
hHandle - описатель фильтра, созданный по команде FFCTL_CREATEFILEFILTER.
Param1 игнорируются. Param2 указатель на файловый объект (структура PluginPanelItem), который нужно проверить на включение в фильтр.
Функция возвращает TRUE, если файл попадает под условия фильтра.
Param1
Указывает на Параметр1 команды. Смотрите описание Command.
Param2
Указывает на Параметр2 команды. Смотрите описание Command.

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

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

Пример

HANDLE AFilter = INVALID_HANDLE_VALUE;

// создаём фильтр для области "активная панель"
Info.FileFilterControl(PANEL_ACTIVE,FFCTL_CREATEFILEFILTER,FFT_PANEL,&AFilter);

// обновляем параметр "текущее время"
Info.FileFilterControl(AFilter,FFCTL_STARTINGTOFILTER,0,0);

if (AFilter != INVALID_HANDLE_VALUE)
{
  // производим манипуляции с элементами панели
  for (int i=0; i < pInfo->ItemsNumber; i++)
  {
    //...применяем фильтр, например, так
    if (Info.FileFilterControl(AFilter,FFCTL_ISFILEINFILTER,0,(void*)&pInfo->PanelItems[i]))
    {
      // элемент попал под условия фильтра
      // обработаем элемент...
    }
  }
}

// освобождаем память
Info.FileFilterControl(AFilter, FFCTL_FREEFILEFILTER,0,0);
Смотрите также:
PanelControl


FreeDirList

главная | сервисные функции | Panel API
Функция FreeDirList освобождает память, выделенную для списка файлов функциями GetDirList.
void WINAPI FreeDirList(
  struct PluginPanelItem *PanelItem,
  size_t nItemsNumber
);

Параметры

PanelItem
Адрес массива структур PluginPanelItem.
nItemsNumber
Количество элементов в массиве.

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

Нет.


FreeDirList

FreePluginDirList

главная | сервисные функции | Panel API
Функция FreePluginDirList освобождает память, выделенную для списка файлов эмулируемой файловой системы функцией GetPluginDirList.
void WINAPI FreePluginDirList(
  HANDLE hPanel,
  struct PluginPanelItem *PanelItem,
  size_t nItemsNumber
);

Параметры

hPanel
Текущий описатель панели.
PanelItem
Адрес массива структур PluginPanelItem.
nItemsNumber
Количество элементов в массиве.

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

Нет.


GetDirList

главная | сервисные функции | Panel API
Функция GetDirList возвращает список файлов в указанной директории (с поддиректориями).
intptr_t WINAPI GetDirList(
  const wchar_t *Dir,
  struct PluginPanelItem **pPanelItem,
  size_t *pItemsNumber
);

Параметры

Dir
Имя обрабатываемого подкаталога текущего каталога. Может быть как именем без пути, так и с полным путём.
pPanelItem
Указывает на переменную, которая получит адрес массива структур PluginPanelItem.
Когда этот массив больше не нужен, он должен быть передан функции FreeDirList.
pItemsNumber
Указывает на переменную, которая получит число структур PluginPanelItem.

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

Если функция завершилась успешно, она вернёт TRUE. Если функция закончилась неудачно или обработка директории была прервана пользователем, то она вернёт FALSE.

Замечания

  1. Функция возвращает полные пути к файлам. Например, если Dir есть D:\DIR1\DIR2, то имена файлов будут в виде D:\DIR1\DIR2\file.ext, D:\DIR1\DIR2\subdir\file.ext и т.п.
  2. Пользователь может прервать выполнение функции, нажав клавишу Esc, при этом функция вернёт значение FALSE.
Смотрите также:
GetPluginDirList


GetPluginDirList

главная | сервисные функции | Panel API
Функция GetPluginDirList возвращает список файлов в указанной директории (с поддиректориями) эмулируемой файловой системы.
intptr_t WINAPI GetPluginDirList(
  const GUID *PluginId,
  HANDLE hPanel,
  const wchar_t *Dir,
  struct PluginPanelItem **pPanelItem,
  size_t *pItemsNumber
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
hPanel
Текущий описатель панели. Если описатель панели равен PANEL_ACTIVE (или PANEL_PASSIVE), то значение параметра PluginId игнорируется и используется GUID плагина, которому принадлежит активная (или пассивная) панель.
Dir
Имя обрабатываемой директории. Должно быть в форме, приемлемой для функции плагина SetDirectoryW. Плагинам обычно не требуется обработка полного пути функцией SetDirectoryW, поэтому чаще всего (нужно в этом убедиться), это просто имя обрабатываемого подкаталога текущего каталога.

Для сохранения текущей директории плагина неизменной после вызова GetPluginDirList, либо Dir должен быть подкаталогом текущего каталога плагина, либо функция SetDirectoryW плагина должна уметь обрабатывать имя каталога, возвращаемое GetOpenPanelInfoW. Иначе текущая директория будет изменена, и вы должны быть готовы восстановить её.

pPanelItem
Указывает на переменную, которая получит адрес массива структур PluginPanelItem.
Когда этот массив больше не нужен, он должен быть передан функции FreePluginDirList.
pItemsNumber
Указывает на переменную, которая получит число структур PluginPanelItem.

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

Если функция завершилась успешно, она вернёт TRUE. Если функция закончилась неудачно или обработка директории была прервана пользователем, то она вернёт FALSE.

Замечания

  1. Возвращаемые имена файлов включают исходный каталог Dir. Например, если Dir есть DIR1\DIR2, то имена файлов будут в виде DIR1\DIR2\file.ext, DIR1\DIR2\subdir\file.ext и т.п.
  2. Пользователь может прервать выполнение функции, нажав клавишу Esc, при этом функция вернёт значение FALSE.
Смотрите также:
GetDirList


AnalyseInfo

главная | структуры | Panel API
Структура AnalyseInfo используется для возвращения Far Manager'ом данных из начала файла в функции AnalyseW.
struct AnalyseInfo
{
  size_t StructSize;
  const wchar_t *FileName;
  void *Buffer;
  size_t BufferSize;
  OPERATION_MODES OpMode;
};

Элементы

StructSize
Это поле содержит размер структуры AnalyseInfo.
FileName
Полное имя обрабатываемого файла.
Buffer
Указывает на данные из начала файла. Они могут использоваться для определения типа файла. Плагин не должен их изменять.
BufferSize
Размер переданных данных из начала файла в байтах. В настоящий момент он может быть от 0 до 128Kb, в зависимости от размера файла, но вы должны быть готовы к любому другому значению.
OpMode
Комбинация флагов OPERATION_MODES.

Замечания

  • Количество читаемых байт можно изменить, команда - "far:config":
    Параметр "System.PluginMaxReadData" с типом DWORD позволяет задавать максимальный размер читаемых данных из файла в который попытались
войти из панелей (Enter или Ctrl+PgDn). Считанные данные будут переданы плагинам для определения плагина поддерживающего файл этого типа.
Диапазон от 0x1000 до 0x80000. По умолчанию 0x20000.
    • Смотрите также:
    структуры


CloseAnalyseInfo

главная | структуры | Panel API
Структура CloseAnalyseInfo используется Far Manager'ом в функции CloseAnalyseW для освобождения ресурсов.
struct CloseAnalyseInfo
{
  size_t StructSize;
  HANDLE Handle;
};

Элементы

StructSize
Это поле содержит размер структуры CloseAnalyseInfo.
Handle
Описатель, созданный в функции AnalyseW.
Смотрите также:
структуры


ClosePanelInfo

главная | структуры | Panel API
Структура ClosePanelInfo используется Far Manager'ом в функции ClosePanelW.
struct ClosePanelInfo
{
  size_t StructSize;
  HANDLE hPanel;
};

Элементы

StructSize
Это поле содержит размер структуры ClosePanelInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
Смотрите также:
структуры


CmdLineSelect

главная | структуры | Panel API
Структура CmdLineSelect используется в функции PanelControl для выделения или снятия выделения с текста в командной строке Far Manager, или для получения информации о выделении.
struct CmdLineSelect
{
  size_t StructSize;
  intptr_t SelStart;
  intptr_t SelEnd;
};

Элементы

StructSize
Это поле должно содержать размер структуры CmdLineSelect. Перед использованием структуры плагин должен заполнить поле.
SelStart
Начальная позиция выделения текста.
SelEnd
Конечная позиция выделения текста.

Замечания

Для снятия выделения установите SelStart и SelEnd в значение -1.
Смотрите также:
структуры | FCTL_GETCMDLINESELECTION | FCTL_SETCMDLINESELECTION.


CompareInfo

главная | структуры | Panel API
Структура CompareInfo передает информацию об элементах в функцию CompareW.
struct CompareInfo
{
  size_t StructSize;
  HANDLE hPanel;
  const struct PluginPanelItem *Item1;
  const struct PluginPanelItem *Item2;
  enum OPENPANELINFO_SORTMODES Mode;
};

Элементы

StructSize
Это поле содержит размер структуры CompareInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
Item1, Item2
Указатели на структуры PluginPanelItem для сравнения.
Mode
См. Методы сортировки.

Замечания

Для сортировки элементов Far Manager использует стандартную RTL-функцию qsort, которая реализует нестабильную сортировку. Иными словами, если элементы массива равны с точки зрения функции сравнения, на панели они будут отображаться в произвольном порядке, меняющемся при каждом перечитывании панели.
Смотрите также:
структуры


DeleteFilesInfo

главная | структуры | Panel API
Структура DeleteFilesInfo передает информацию об удаляемых элементах в функцию DeleteFilesW.
struct DeleteFilesInfo
{
  size_t StructSize;
  HANDLE hPanel;
  struct PluginPanelItem *PanelItem;
  size_t ItemsNumber;
  OPERATION_MODES OpMode;
};

Элементы

StructSize
Это поле содержит размер структуры DeleteFilesInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
PanelItem
Указатель на массив структур типа PluginPanelItem. Каждая структура описывает файл для удаления.
ItemsNumber
Количество элементов в массиве PanelItem.
OpMode
Комбинация флагов OPERATION_MODES. Функция DeleteFilesW обязана обрабатывать флаг OPM_SILENT.
Смотрите также:
структуры


FarGetPluginPanelItem

главная | структуры | Panel API
Структура FarGetPluginPanelItem используется для запроса информации о файловом объекте в функции PanelControl.
struct FarGetPluginPanelItem
{
  size_t StructSize;
  size_t Size;
  struct PluginPanelItem *Item;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarGetPluginPanelItem. Перед использованием структуры плагин должен заполнить поле.
Size
Размер поля Item в байтах.
Item
Буфер, выделенный плагином для размещения запрашиваемого элемента панели PluginPanelItem.

Замечания

Выделенный буфер должен быть освобожден плагином. Смотрите пример в функции PanelControl.
Смотрите также:
структуры


FarPanelDirectory

главная | структуры | Panel API
Структура FarPanelDirectory используется для получения или задания каталога панели.
struct FarPanelDirectory
{
  size_t StructSize;
  const wchar_t* Name;
  const wchar_t* Param;
  GUID PluginId;
  const wchar_t* File;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarPanelDirectory. Перед использованием структуры плагин должен заполнить поле.
Name
Имя каталога. Относительное для, например, архива (L"\\DIR"), и полное, для панели с реальными файловыми объектами (L"D:\\DIR".)
Param
...
PluginId
GUID плагина, которому принадлежит данный каталог.
File
Хост-файл, в котором установлен данный каталог (L"D:\\Test.rar").
Смотрите также:
структуры


FarPanelItemFreeInfo

главная | структуры | Panel API
Структура FarPanelItemFreeInfo используется в функции FARPANELITEMFREECALLBACK для освобождения неиспользуемых ресурсов (PluginPanelItem.UserData.Data).
struct FarPanelItemFreeInfo
{
  size_t StructSize;
  HANDLE hPlugin;
};

Элементы

StructSize
Это поле содержит размер структуры FarPanelItemFreeInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
Смотрите также:
структуры


FarSetKeyBarTitles

главная | структуры | Panel API
Структура FarSetKeyBarTitles позволяет переопределять заголовки функциональных клавиш. Передаётся в Far Manager, например, функцией ECTL_SETKEYBAR.
struct FarSetKeyBarTitles
{
  size_t StructSize;
  struct KeyBarTitles *Titles;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarSetKeyBarTitles. Перед использованием структуры плагин должен заполнить поле.
Titles
Содержит массив структур типа KeyBarTitles, с новыми заголовками функциональных клавиш.
Смотрите также:
ECTL_SETKEYBAR, структуры, KeyBarLabel


FreeFindDataInfo

главная | структуры | Panel API
Структура FreeFindDataInfo передает информацию об освобождаемой памяти в функцию FreeFindDataW.
struct FreeFindDataInfo
{
  size_t StructSize;
  HANDLE hPanel;
  struct PluginPanelItem *PanelItem;
  size_t ItemsNumber;
};

Элементы

StructSize
Это поле содержит размер структуры FreeFindDataInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
PanelItem
Указатель на массив структур типа PluginPanelItem, запрошенных функцией GetFindDataW.
ItemsNumber
Количество элементов в массиве PanelItem.
Смотрите также:
структуры


GetFilesInfo

главная | структуры | Panel API
Структура GetFilesInfo передает информацию Far Manager'у о запрашиваемых файлах из эмулируемой файловой системы в функции GetFilesW.
struct GetFilesInfo
{
  size_t StructSize;
  HANDLE hPanel;
  struct PluginPanelItem *PanelItem;
  size_t ItemsNumber;
  BOOL Move;
  const wchar_t *DestPath;
  OPERATION_MODES OpMode;
};

Элементы

StructSize
Это поле содержит размер структуры GetFilesInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW. Поле заполнено Far Manager'ом.
PanelItem
Указывает на массив структур PluginPanelItem. Каждая структура описывает файл, получаемый из эмулируемой файловой системы.
ItemsNumber
Количество структур PluginPanelItem в массиве PanelItem.
Move
Если 0, файл должен быть скопирован, иначе - перемещён.
DestPath
Указатель на путь назначения (куда получим файлы). Если флаг OPM_SILENT параметра OpMode не установлен, вы можете позволить пользователю изменить его, но в этом случае DestPath должен указывать на буфер плагина, содержащий новый путь. Буфер должны быть валиден после возвращения из функции GetFilesW.
OpMode
Комбинация флагов OPERATION_MODES. Функция GetFilesW должна быть готова обработать флаги OPM_SILENT, OPM_FIND, OPM_VIEW, OPM_QUICKVIEW и OPM_EDIT. Также она может обрабатывать OPM_DESCR и OPM_TOPLEVEL для увеличения скорости, если это необходимо.
Смотрите также:
структуры


GetFindDataInfo

главная | структуры | Panel API
Структура GetFindDataInfo передает информацию Far Manager'у о списке файлов из эмулируемой файловой системы в функции GetFindDataW.
struct GetFindDataInfo
{
  size_t StructSize;
  HANDLE hPanel;
  struct PluginPanelItem *PanelItem;
  size_t ItemsNumber;
  OPERATION_MODES OpMode;
};

Элементы

StructSize
Это поле содержит размер структуры GetFindDataInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW. Поле заполнено Far Manager'ом.
PanelItem
Переменная, которая получит адрес массива структур PluginPanelItem.
ItemsNumber
Переменная, которая получит число структур PluginPanelItem.
OpMode
Комбинация флагов OPERATION_MODES. Функция GetFindDataW должна быть готова обработать флаг OPM_FIND.
Смотрите также:
структуры


InfoPanelLine

главная | структуры | Panel API
Структура InfoPanelLine описывает одну строку информационной панели. Массив этих структур передаётся в Far Manager функцией GetOpenPluginInfoW.
struct InfoPanelLine
{
  const wchar_t *Text;
  const wchar_t *Data;
  INFOPANELLINE_FLAGS Flags;
};

Элементы

Text
Заголовок параметра - текст, выровненный по левому краю панели и отображаемый цветом обычного текста (COL_PANELTEXT).
Data
Данные параметра - текст, выровненный по правому краю панели и отображаемый цветом выделенной информации (COL_PANELINFOTEXT)
Flags
Комбинация флагов (тип INFOPANELLINE_FLAGS):
Флаг | Описание
IPLFLAGS_SEPARATOR | Параметр показывается как разделитель. Text используется как заголовок разделителя, Data игнорируется.
Смотрите также:
структуры


KeyBarLabel

главная | структуры | Panel API
Структура KeyBarLabel содержит новые заголовки функциональных клавиш, передается в Far Manager через структуру FarSetKeyBarTitles.
struct KeyBarLabel
{
  struct FarKey Key;
  const wchar_t *Text;
  const wchar_t *LongText;
};

Элементы

Key
Клавиша, структура типа FarKey.
Text
Новый заголовок функциональной клавиши. Для сохранения стандартного заголовка Far Manager установите значение в NULL.
LongText
Новый длинный заголовок функциональной клавиши. Для сохранения стандартного заголовка Far Manager установите значение в NULL.
Смотрите также:
ECTL_SETKEYBAR, структуры, KeyBarTitles, FarSetKeyBarTitles


KeyBarTitles

главная | структуры | Panel API
Структура KeyBarTitles позволяет переопределять заголовки функциональных клавиш. Массив этих структур передаётся в Far Manager функцией GetOpenPanelInfoW.
struct KeyBarTitles
{
  size_t CountLabels;
  struct KeyBarLabel *Labels;
};

Элементы

CountLabels
Количество элементов в массиве Labels.
Labels
Содержит массив структур типа KeyBarLabel, с новыми заголовками функциональных клавиш.
Смотрите также:
ECTL_SETKEYBAR, структуры, KeyBarLabel


MakeDirectoryInfo

главная | структуры | Panel API
Структура MakeDirectoryInfo передает информацию о создаваемом каталоге в функции MakeDirectoryW.
struct MakeDirectoryInfo
{
  size_t StructSize;
  HANDLE hPanel;
  const wchar_t *Name;
  OPERATION_MODES OpMode;
};

Элементы

StructSize
Это поле содержит размер структуры MakeDirectoryInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW. Поле заполнено Far Manager'ом.
Name
Указатель на буфер, содержащий имя каталога, передаётся плагином Far Manager'у. Если флаг OPM_SILENT параметра OpMode не установлен, вы можете позволить пользователю изменить его, но в этом случае Name должен указывать на буфер плагина, содержащий новый каталог. Буфер должны быть валиден после возвращения из функции MakeDirectoryW.
OpMode
Комбинация флагов OPERATION_MODES. Функция MakeDirectoryW должна быть готова обработать флаг OPM_SILENT.
Смотрите также:
OpenW


OpenAnalyseInfo

главная | структуры | Panel API
Указатель на структуру OpenAnalyseInfo передается в функцию OpenW, когда плагин открывает панель на базе како-либо контейнера (например, архива).
struct OpenAnalyseInfo
{
  size_t StructSize;
  struct AnalyseInfo* Info;
  HANDLE Handle;
};

Элементы

StructSize
Это поле содержит размер структуры OpenAnalyseInfo.
Info
Указатель на структуру типа AnalyseInfo.
Handle
Описатель, возвращаемый функцией AnalyseW.
Смотрите также:
OpenW


OpenCommandLineInfo

главная | структуры
Структура OpenCommandLineInfo используется в функции OpenW для передачи командной строки, которой был открыт плагин.
struct OpenCommandLineInfo
{
  size_t StructSize;
  const wchar_t *CommandLine;
};

Элементы

StructSize
Это поле содержит размер структуры OpenCommandLineInfo.
CommandLine
Содержит адрес, введённого пользователем в командной строке выражения. Если плагин не установил флаг PF_FULLCMDLINE, то командный префикс плагина в командную строку не включается. При установленном флаге PF_FULLCMDLINE плагину передаётся полная строка (с командным префиксом).
К примеру, если плагин устанавливает префикс ftp и пользователь вводит ftp://ftp.abc.com, CommandLine будет указывать на строку: L"//ftp.abc.com" при НЕустановленном флаге PF_FULLCMDLINE и L"ftp://ftp.abc.com", если флаг PF_FULLCMDLINE установили.

Замечания

Смотрите также:
структуры


OpenPanelInfo

главная | структуры | Panel API
Структура OpenPanelInfo возвращает в Far Manager информацию о панели плагина в функции GetOpenPanelInfoW.
struct OpenPanelInfo
{
  size_t StructSize;
  HANDLE hPanel;
  OPENPANELINFO_FLAGS Flags;
  const wchar_t *HostFile;
  const wchar_t *CurDir;
  const wchar_t *Format;
  const wchar_t *PanelTitle;
  const struct InfoPanelLine *InfoLines;
  size_t InfoLinesNumber;
  const wchar_t * const *DescrFiles;
  size_t DescrFilesNumber;
  const struct PanelMode *PanelModesArray;
  size_t PanelModesNumber;
  intptr_t StartPanelMode;
  enum OPENPANELINFO_SORTMODES StartSortMode;
  intptr_t StartSortOrder;
  const struct KeyBarTitles *KeyBar;
  const wchar_t *ShortcutData;
  unsigned __int64 FreeSize;
};

Элементы

StructSize
Это поле должно содержать размер структуры OpenPanelInfo. Перед использованием структуры плагин должен заполнить поле.
hPanel
Описатель панели, возвращаемый функцией OpenW. Поле заполнено Far Manager'ом.
Flags
Комбинация следующих значений (тип OPENPANELINFO_FLAGS):
Флаг | Описание
OPIF_DISABLEFILTER | Отключить фильтр файлов в панели плагина.
OPIF_DISABLESORTGROUPS | Не использовать группы сортировки в панели плагина.
OPIF_DISABLEHIGHLIGHTING | Не использовать раскраску файлов в панели плагина.
OPIF_ADDDOTS | Добавить элемент, равный двум точкам (..), если он отсутствует, автоматически.
OPIF_RAWSELECTION | Выбор папок независимо от настроек Far Manager'а.
OPIF_REALNAMES | Включает использование стандартной обработки файла Far Manager'ом, если запрошенная операция не поддерживается плагином. Если этот флаг указан, элементы на панели плагина должны быть именами реальных файлов.
OPIF_SHOWNAMESONLY | Показывать по умолчанию имена без путей во всех режимах просмотра.
OPIF_SHOWRIGHTALIGNNAMES | Показывать по умолчанию имена, выровненные по правому краю во всех режимах просмотра.
OPIF_SHOWPRESERVECASE | Показывать имена файлов в оригинальном регистре независимо от настроек Far Manager'a.
OPIF_COMPAREFATTIME | Преобразовывать временные метки в формат FAT при выполнении команды Compare folders. Установите этот флаг, если файловая система плагина не обеспечивает требуемую для стандартного стравнения времени точность.
OPIF_EXTERNALGET OPIF_EXTERNALPUT OPIF_EXTERNALDELETE OPIF_EXTERNALMKDIR | Флаги могут быть использованы только с OPIF_REALNAMES. Вынуждает использование соответствующих функций Far Manager, даже если требуемая функция экспортируется плагином.
OPIF_USEATTRHIGHLIGHTING | Использовать раскраску файлов в панели плагина только по атрибутам, а имена объектов в раскраске не учитывать. Выбор цвета происходит только среди тех групп раскраски файлов, у которых маски исключены из анализа, т.е. опция "[ ] Совпадение с маской (масками)" в настройках раскраски файлов отключена.
OPIF_USECRC32 | Флаг указывает, что плагин заполняет поле CRC32 элементов панели PluginPanelItem.
OPIF_USEFREESIZE | Флаг указывает, что плагин заполняет поле FreeSize. Не у всех эмулированных плагинами файловых системах возможно понятие "свободное место" (например, в плагине ImpEx).
OPIF_SHORTCUT | Флаг указывает, что плагин позволяет добавлять смену каталогов в историю Far Manager'a, а также поддерживает установку "быстрых каталогов" на своей панели.
OPIF_NONE | Нулевой флаг.
HostFile
Имя файла-контейнера, на основе которого эмулируется файловая система на панели. Если плагин не эмулирует файловую систему, основанную на файле, установите эту переменную в NULL.
CurDir
Текущая директория панели. Если панельный плагин вернёт здесь пустую строку, то при нажатии ENTER на ".." Far Manager закроет панель плагина автоматически.
Format
Имя формата панели плагина. Оно показывается в диалоге копирования файла.
PanelTitle
Заголовок панели плагина.
InfoLines
Адрес массива структур InfoPanelLine. Каждая структура описывает одну строку в информационной панели. Если вы не нуждаетесь в показе текста, зависимого от плагина в информационной панели, установите InfoLines в NULL.
InfoLinesNumber
Число структур InfoLine.
DescrFiles
Адрес массива указателей на имена файлов описаний. Far Manager попытается прочитать эти файлы (функцией GetFilesW) при показе описаний и обновить их после обработки файлов, если флаг PPIF_PROCESSDESCR в структуре PluginPanelItem был установлен. В зависимости от типа плагина, обработка описаний может занять значительное время. Если Вам это не нужно, установите DescrFiles в NULL.
DescrFilesNumber
Число имён файлов описаний.
PanelModesArray
Адрес массива структур PanelMode. Используя его, вы можете переопределить настройки режимов просмотра. Первая структура описывает режим просмотра номер 0, вторая - 1 и т.д. Если Вам не нужно определение новых режимов просмотра, установите PanelModesArray в NULL.
PanelModesNumber
Число структур PanelMode.
StartPanelMode
Режим просмотра, который будет установлен после создания панели плагина. Он должен быть в формате '0'+<номер режима просмотра>. Например, '1' или 0x31 будут устанавливать Краткий режим просмотра. Если вы не хотите менять режим просмотра панели после запуска плагина, установите StartPanelMode в 0.
StartSortMode
Режим сортировки, который будет установлен после создания панели плагина. Если вы не хотите менять режим сортировки после запуска плагина, установите StartSortMode в SM_DEFAULT или 0.
StartSortOrder
Если вы указали StartSortMode, в поле StartSortOrder вы должны задать направление сортировки, 0 или 1 (обратная сортировка).
KeyBar
Адрес структуры KeyBarTitles. Используя его, вы можете переопределить метки функциональных клавиш в строке функциональных клавиш. Если Вам это не нужно, установите KeyBar в NULL.
ShortcutData
Адрес текстовой строки, оканчивающейся нулём, описывающей текущее состояние панели плагина. Эта строка передаётся в OpenW, когда плагин активирован командой ссылки на папку. Например, FTP клиент может поместить сюда текущий хост, логин и пароль. Нет необходимости сохранять здесь текущий каталог, потому что он будет восстановлен самим Far Manager'ом.
Если вы не нуждаетесь в такой дополнительной информации для обработки ссылки на папку, установите данную строку в NULL.
FreeSize
Количество свободного места в эмулированной плагином файловой системе.

Замечания

  1. Все передаваемые в этой структуре данные должны быть правильными после возвращения из GetOpenPanelInfoW, таким образом, вы не должны использовать адреса стековых переменных. Используйте статические или глобальные переменные.
  2. Структура, передаваемая плагину в функцию GetOpenPanelInfoW, уже заполнена 0.
Смотрите также:
структуры


OpenShortcutInfo

главная | структуры |
Структура OpenShortcutInfo используется в функции OpenW для передачи плагину данных об шорт-кате, которым он был открыт.
struct OpenShortcutInfo
{
  size_t StructSize;
  const wchar_t *HostFile;
  const wchar_t *ShortcutData;
  FAROPENSHORTCUTFLAGS Flags;
};

Элементы

StructSize
Это поле содержит размер структуры OpenShortcutInfo.
HostFile
Если шорт-кат сохранён внутри файла, эмулирующего файловую систему, то это поле содержит адрес имени этого файла.
ShortcutData
Содержит то, что вернул плагин в OpenPanelInfo.ShortcutData в момент сохранения шорт-ката.
Flags
Дополнительные флаги. Могут быть комбинацией следующих значений (тип FAROPENSHORTCUTFLAGS):
Флаг | Описание
FOSF_ACTIVE | Флаг выставляется, если шорт-кат устанавливается для активной панели.
FOSF_NONE | Нулевой флаг.

Замечания

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


PanelInfo

главная | структуры | Panel API
Структура PanelInfo содержит информацию о панели плагина или Far Manager. Используйте функцию PanelControl для её заполнения.
struct PanelInfo
{
  size_t StructSize;
  HANDLE PluginHandle;
  GUID OwnerGuid;
  PANELINFOFLAGS Flags;
  size_t ItemsNumber;
  size_t SelectedItemsNumber;
  RECT PanelRect;
  size_t CurrentItem;
  size_t TopPanelItem;
  intptr_t ViewMode;
  enum PANELINFOTYPE PanelType;
  enum OPENPANELINFO_SORTMODES SortMode;
};

Элементы

StructSize
Это поле должно содержать размер структуры PanelInfo. Перед использованием структуры плагин должен заполнить поле.
PluginHandle
Текущий описатель панели плагина, тот, что возвращается функцией OpenW.
OwnerGuid
GUID плагина, создавшего панель. OwnerGuid = FarGuid - если панель принадлежит Far Manager.
Flags
Дополнительные флаги. Могут быть комбинацией следующих значений (тип PANELINFOFLAGS):
Флаг | Описание
PFLAGS_SHOWHIDDEN | разрешён показ скрытых и системных файлов
PFLAGS_HIGHLIGHT | включена раскраска файлов
PFLAGS_REVERSESORTORDER | включена обратная сортировка
PFLAGS_USESORTGROUPS | используются группы сортировки
PFLAGS_SELECTEDFIRST | показывать помеченные файлы первыми
PFLAGS_REALNAMES | элементы на панели плагина отображаются именами реальных файлов (см. также OPIF_REALNAMES)
PFLAGS_NUMERICSORT | используется числовая сортировка
PFLAGS_CASESENSITIVESORT | используется сортировка с учётом регистра
PFLAGS_PANELLEFT | левая панель
PFLAGS_DIRECTORIESFIRST | каталоги отображаются в начале списка
PFLAGS_USECRC32 | плагин заполнил в элементах панели PluginPanelItem поле CRC32
PFLAGS_PLUGIN | панель поддерживается модулем плагина
PFLAGS_VISIBLE | панель видимая
PFLAGS_FOCUS | панель активна
PFLAGS_ALTERNATIVENAMES | панель в режиме показа коротких имён файлов
PFLAGS_SHORTCUT | разрешено помещение смены каталогов в историю Far Manager, а также назначение "быстрых каталогов".
PFLAGS_NONE | Нулевой флаг.
ItemsNumber
Число элементов на панели.
SelectedItemsNumber
Число выделенных элементов на панели. Равно 1, даже если нет выделения. Исключение составляет случай, когда нет выделения и курсор стоит на ".." - тогда SelectedItemsNumber = 0.
PanelRect
Геометрия панели - структура типа RECT.
CurrentItem
Индекс текущего элемента на панели. Перед использованием убедитесь, что ItemsNumber больше 0.
TopPanelItem
Элемент, находящийся в первой видимой позиции панели.
ViewMode
Номер режима просмотра панели.
PanelType
Может быть (перечисление PANELINFOTYPE):
Тип | Описание
PTYPE_FILEPANEL | обычная файловая панель
PTYPE_TREEPANEL | панель, отображающая дерево (Tree)
PTYPE_QVIEWPANEL | панель быстрого просмотра (Quick View)
PTYPE_INFOPANEL | панель информации (Information)
SortMode
Режим сортировки панели.

Замечания

Смотрите также:
структуры


PanelMode

главная | структуры | Panel API
Структура PanelMode описывает один режим панели (view mode). Массив таких структур может быть передан Far Manager`у в функции GetOpenPanelInfoW.
struct PanelMode
{
  const wchar_t *ColumnTypes;
  const wchar_t *ColumnWidths;
  const wchar_t * const *ColumnTitles;
  const wchar_t *StatusColumnTypes;
  const wchar_t *StatusColumnWidths;
  PANELMODE_FLAGS Flags;
};

Элементы

ColumnTypes
Текстовая строка, описывающая типы колонок. Кодируются с помощью одной или нескольких букв, разделённых запятыми, например, так L"N,SC,D,T". Если вы используете стандартные режимы, настроенные в Far Manager`е, то установите значение в NULL.
ColumnWidths
Текстовая строка, описывающая ширину колонок.
ColumnTitles
Указатель на массив строк, описывающих заголовки (название) колонок. Если вы будете использовать стандартные названия для колонок, то установите это значение в NULL.
StatusColumnTypes
Подобно ColumnTypes, но применительно для строки статуса. Если вы хотите использовать стандартную строку статуса, установите значение в NULL.
StatusColumnWidths
Подобно ColumnWidths, но применительно для строки статуса.
Flags
Комбинация следующих значений (тип PANELMODE_FLAGS):
Флаг | Описание
PMFLAGS_FULLSCREEN | показывать панель во весь экран вместо половины экрана
PMFLAGS_DETAILEDSTATUS | в статусной строке будут отображены Имя, Размер, Дата и Время файла, для случая StatusColumnTypes = NULL и StatusColumnWidths = NULL. В противном случае в строке статуса будет отображаться только имя файла.
PMFLAGS_ALIGNEXTENSIONS | выравнивать расширения файлов
PMFLAGS_CASECONVERSION | преобразовывать регистр имен файлов
Смотрите также:
структуры


PanelRedrawInfo

главная | структуры | Panel API
Структура PanelRedrawInfo может быть использована для определения новой позиции при перерисовке панели с помощи функции PanelControl.
struct PanelRedrawInfo
{
  size_t StructSize;
  size_t CurrentItem;
  size_t TopPanelItem;
};

Элементы

StructSize
Это поле должно содержать размер структуры PanelRedrawInfo. Перед использованием структуры плагин должен заполнить поле.
CurrentItem
Текущая позиция на панели (начиная с 0).
TopPanelItem
Позиция верхнего пункта панели (начиная с 0).
Смотрите также:
структуры


PluginPanelItem

главная | структуры | Panel API
Структура PluginPanelItem описывает элемент файловой системы плагина. Она используется для возвращения информации о файловой системе плагина и для передачи плагину списка файлов для обработки.
struct PluginPanelItem
{
  FILETIME CreationTime;
  FILETIME LastAccessTime;
  FILETIME LastWriteTime;
  FILETIME ChangeTime;
  unsigned __int64 FileSize;
  unsigned __int64 AllocationSize;
  const wchar_t *FileName;
  const wchar_t *AlternateFileName;
  const wchar_t *Description;
  const wchar_t *Owner;
  const wchar_t * const *CustomColumnData;
  size_t CustomColumnNumber;
  PLUGINPANELITEMFLAGS Flags;
  struct
  {
    void *Data;
    FARPANELITEMFREECALLBACK FreeData;
  } UserData;
  uintptr_t FileAttributes;
  uintptr_t NumberOfLinks;
  uintptr_t CRC32;
  intptr_t Reserved[2];
};

Элементы

CreationTime
Время создания - структура FILETIME содержащая время создания файла. FindFirstFile и FindNextFile возвращают время файла в UTC-формате. Эти функции устанавливают элементы FILETIME в ноль, если файловая система, содержащая файл не поддерживает этот временной атрибут. Вы можете использовать функцию FileTimeToLocalFileTime для преобразования из UTC в локальное время и тогда использовать функцию FileTimeToSystemTime для преобразования локального времени в структуру SYSTEMTIME содержащую отдельные элементы для месяца, дня, года и так далее...
LastAccessTime
Структура FILETIME с временем последнего доступа к файлу. Время хранится в UTC формате; элементы структуры установлены в ноль, если файловая система не поддерживает этого свойства.
LastWriteTime
Структура FILETIME с временем последней записи в файл. Время хранится в UTC формате; элементы структуры установлены в ноль, если файловая система не поддерживает этого свойства.
ChangeTime
Структура FILETIME с временем последнего изменения файла. Время хранится в UTC формате; элементы структуры установлены в ноль, если файловая система не поддерживает этого свойства.
FileSize
Размер файла в байтах.
AllocationSize
Выделенный размер файла в байтах.
FileName
Указатель на строку с именем файла.
AlternateFileName
Указатель на строку с альтернативным именем файла.
Description
Указывает на описание файла. Плагин может использовать это поле для передачи описания файла Far Manager'у. Если вы не хотите указывать описания, установите Description в NULL. Если плагин использует стандартную обработку описаний Far Manager'а, и передал имена описаний Far Manager'у в функции GetOpenPanelInfoW, это поле также должно быть NULL.
Owner
Указывает на имя владельца файла. Плагин может использовать это поле для передачи имён владельцев файлов Far Manager'у. Если Вам это не нужно, установите это поле в NULL.
CustomColumnData
Указывает на массив адресов строк для определённых плагином типов колонок. Первая строка содержит данные для типа колонки C0, вторая - для C1 и т.д. Может быть задано до 100 дополнительных типов колонок от C0 до C99. Если вы не нуждаетесь в дополнительных типах колонок, установите это поле в NULL.
CustomColumnNumber
Число строк с данными о дополнительных типах колонок.
Flags
Может быть комбинацией следующих значений (тип PLUGINPANELITEMFLAGS):
Флаг | Описание
PPIF_PROCESSDESCR | Использовать внутреннюю обработку описаний Far Manager'а. Этот флаг может быть установлен для обрабатываемых файлов в функциях DeleteFilesW, GetFilesW и PutFilesW. В этом случае Far Manager будет обновлять файлы описаний с именами, возвращёнными в функции GetOpenPanelInfoW.
PPIF_SELECTED | Этот флаг отвечает за выделение элемента. В функциях PutFilesW, GetFilesW и ProcessHostFileW, если операция не удалась, но часть файлов была успешно обработана, плагин может убрать выделение только с обработанных файлов. Для этого плагин должен очистить флаг PPIF_SELECTED у обрабатываемых элементов в переданном функции списке PluginPanelItem.
PPIF_NONE | Нулевой флаг.
UserData
Это поле может быть использовано плагином для хранения целого значения или указателя на структуру данных.
В последнем случае, когда UserData.Data указывает на структуру данных и требуется её освобождение, то плагин должен определить функцию UserData.FreeData, используемую Far Manager'ом для освобождения занятых ресурсов.
FileAttributes
Указывает атрибуты найденного файла. Этот элемент может быть комбинацией следующих значений:
Атрибут | Описание
FILE_ATTRIBUTE_ARCHIVE | Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления.
FILE_ATTRIBUTE_COMPRESSED | Файл или каталог сжат. Для файла это означает, что все данные его сжаты, для каталога - что компрессия по умолчанию применяется ко всем его файлам и подкаталогам.
FILE_ATTRIBUTE_DIRECTORY | Это каталог.
FILE_ATTRIBUTE_ENCRYPTED | Файл или каталог зашифрован. Для файла, это означает, что все данные в файле зашифрованы. Для директория, это означает, что шифрование является умолчанием для вновь созданных файлов и подкаталогов.
FILE_ATTRIBUTE_HIDDEN | Файл скрыт. Такой файл не включается в обычный листинг каталога.
FILE_ATTRIBUTE_NORMAL | У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов.
FILE_ATTRIBUTE_OFFLINE | Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения.
FILE_ATTRIBUTE_READONLY | Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его.
FILE_ATTRIBUTE_REPARSE_POINT | Каталог является точкой повторной обработки.
FILE_ATTRIBUTE_SPARSE_FILE | Файл является т.н. "Sparse file".
FILE_ATTRIBUTE_SYSTEM | Этот файл - часть операционной системы.
FILE_ATTRIBUTE_TEMPORARY | Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удален.
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | Этот файл или каталог не будут индексироваться службой индексирования.
FILE_ATTRIBUTE_VIRTUAL | Этот файл - виртуальный файл.
NumberOfLinks
Количество жёстких ссылок.
CRC32
Контрольная сумма. Far Manager не использует это поле. Если плагин использует это поле, необходимо выставить флаг OPIF_USECRC32.
Reserved
Поля зарезервированы для будущего использования. Установите в 0.

Замечания

  1. Все данные, выделенные плагином для членов FileName, AlternateFileName, Description, Owner и CustomColumnData, должны быть освобождены им. Far Manager создаёт копии этих данных в своих внутренних структурах. Таким образом они могут быть освобождены в любой момент после передачи Far Manager'у в функции GetFindDataW.
  2. При запросе файлового объекта с панели Far Manager'а - если файл имеет длинное имя, то полное имя возвращается в элементе FileName, а усеченная версия формата 8.3 сохраняется в AlternateFileName. Иначе AlternateFileName пусто.
  3. При запросе файлового объекта с панели плагина - AlternateFileName может содержать любую строку сформированную плагином, т.е. за содержимое отвечает опрашиваемый плагин.
  4. Не все файловые системы позволяют хранить время создания файла и последнего доступа к нему, и не все системы хранят их одинаково. Например, в файловой системе FAT под Windows NT время создания файла записывается с разрешением 10 миллисекунд, время последней модификации - 2 секунды, а время доступа - 1 день (то есть, фактически, записывается только дата доступа). На файловой системе NTFS время доступа имеет разрешение 1 час.
Смотрите также:
структуры, WIN32_FIND_DATA, FILETIME


ProcessHostFileInfo

главная | структуры | Panel API
Структура ProcessHostFileInfo передает информацию об обрабатываемых элементах в функции ProcessHostFileW.
struct ProcessHostFileInfo
{
  size_t StructSize;
  HANDLE hPanel;
  struct PluginPanelItem *PanelItem;
  size_t ItemsNumber;
  OPERATION_MODES OpMode;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessHostFileInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
PanelItem
Указывает на массив структур PluginPanelItem. Каждая структура соответствует файлу, выбранному в панели плагина.
ItemsNumber
Количество структур PluginPanelItem в массиве PanelItem.
OpMode
Комбинация флагов OPERATION_MODES. Для функции ProcessHostFileW равна 0 или OPM_TOPLEVEL.
Смотрите также:
структуры


ProcessPanelEventInfo

главная | структуры | Panel API
Структура ProcessPanelEventInfo содержит информацию о событии, поступающем в функцию ProcessPanelEventW.
struct ProcessPanelEventInfo
{
  size_t StructSize;
  intptr_t Event;
  void *Param;
  HANDLE hPanel;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessPanelEventInfo.
Event
Тип события. Одно из следующих значений (перечисление FAR_EVENTS):
Событие | Описание
FE_CHANGEVIEWMODE | Сменился режим просмотра панели. Param указывает на строку типов колонок, оканчивающуюся нулём, например L"N,S,D,T". Функция ProcessPanelEventW должна вернуть FALSE.
FE_REDRAW | Панель должна перерисоваться. Param равен NULL. Верните в ProcessPanelEventW FALSE, чтобы использовать функцию перерисовки Far Manager'a, или TRUE, чтобы отключить её. В последнем случае плагин должен перерисовать панель сам.
FE_IDLE | Посылается с интервалом в несколько секунд. Плагин может использовать это событие, чтобы вызвать обновление панели и её перерисовку, если это необходимо. Param равен NULL. Функция ProcessPanelEventW должна вернуть FALSE.
FE_CLOSE | Панель закрывается. Param равен NULL. Верните в ProcessPanelEventW FALSE для закрытия панели или TRUE для отмены этого.
FE_BREAK | Нажатие Ctrl+Break. Param может быть только (int)CTRL_BREAK_EVENT Функция ProcessPanelEventW должна вернуть FALSE. Обработка этого события выполнена в отдельном потоке, поэтому плагин должен быть осторожным при выполнении операций ввода-вывода и не должен использовать сервисные функции Far Manager'a.
FE_COMMAND | Перед запуском команды в командной строке Far Manager'a. Param указывает на текст команды. Для разрешения стандартной обработки команды плагин должен вернуть в ProcessPanelEventW FALSE. Если плагин собирается обработать команду сам, то он должен вернуть TRUE.
FE_KILLFOCUS | Панель потеряла фокус ввода. Param равен NULL. Функция ProcessPanelEventW должна вернуть FALSE.
FE_GOTFOCUS | Панель получила фокус ввода. Активная панель получает событие FE_GOTFOCUS сразу после создания. Param равен NULL. Функция ProcessPanelEventW должна вернуть FALSE.
FE_CHANGESORTPARAMS | Сменились параметры сортировки панели. Панель плагина получает событие FE_CHANGESORTPARAMS после любого изменения в параметрах сортировки. Param равен NULL. Функция ProcessPanelEventW должна вернуть FALSE.
Param
Значение указателя зависит от типа события. Смотрите описание событий для уточнения информации.
hPanel
Описатель панели, возвращаемый функцией OpenW.

Замечания

Смотрите также:
Структуры, ProcessPanelEventW


ProcessPanelInputInfo

главная | структуры | Panel API
Структура ProcessPanelInputInfo содержит информацию о последнем событии от клавиатуры и мыши, поступающем в функцию ProcessPanelInputW.
struct ProcessPanelInputInfo
{
  size_t StructSize;
  HANDLE hPanel;
  INPUT_RECORD Rec;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessPanelInputInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
Rec
Структура INPUT_RECORD. Эта структура определена в Windows API и содержит информацию о последнем событии от клавиатуры и мыши.

Замечания

Смотрите также:
Структуры, ProcessPanelEventW, ProcessPanelInputW


PutFilesInfo

главная | структуры | Panel API
Структура PutFilesInfo передает информацию об обрабатываемых элементах в функции PutFilesW.
struct PutFilesInfo
{
  size_t StructSize;
  HANDLE hPanel;
  struct PluginPanelItem *PanelItem;
  size_t ItemsNumber;
  BOOL Move;
  const wchar_t *SrcPath;
  OPERATION_MODES OpMode;
};

Элементы

StructSize
Это поле содержит размер структуры PutFilesInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
PanelItem
Указатель на массив из структур PluginPanelItem. Каждая структура описывает файл для передачи.
ItemsNumber
Число элементов в массиве PanelItem.
Move
Ноль, если файл должен быть скопирован, иначе перемещён.
SrcPath
Путь источника (откуда получим файлы для передачи).
OpMode
Комбинация флагов OPERATION_MODES. Функция PutFilesW должна воспринимать флаг OPM_SILENT. Также она может использовать флаг OPM_DESCR.

Если флаг OPM_SILENT не установлен, то возможна выдача диалога подтверждения и редактирование пути назначения.

Смотрите также:
структуры


SetDirectoryInfo

главная | структуры | Panel API
Структура SetDirectoryInfo передает информацию о новом каталоге в функцию SetDirectoryW.
struct SetDirectoryInfo
{
  size_t StructSize;
  HANDLE hPanel;
  const wchar_t *Dir;
  intptr_t UserData;
  OPERATION_MODES OpMode;
};

Элементы

StructSize
Это поле содержит размер структуры SetDirectoryInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
Dir
Имя каталога. Обычно только имя без полного пути. Для предоставления базовых возможностей плагин обязан воспринимать имена '..' и '\'.
Для корректного восстановления каталога после использования "Искать по всему диску" в Диалоге поиска файлов, плагин должен воспринимать полное имя каталога, которое возвращается в функции GetOpenPanelInfoW. Это не обязательно для выставленного режима "Искать, начиная с текущей папки" в диалоге поиска файлов .
UserData
Это поле аналогично значению PluginPanelItem.UserData.Data и может быть использовано плагином для хранения целого значения или указателя на структуру данных. Плагин должен освободить память, занятую такими дополнительными структурами.
OpMode
Комбинация флагов OPERATION_MODES. Функция SetDirectoryW должна быть готова принимать флаг OPM_FIND. Если этот флаг установлен, плагин не должен совершать других действий, кроме смены каталога (так, при установленном OPM_FIND, плагин не должен пытаться обновить или закрыть панели, спрашивать подтверждения у пользователя, выводить сообщения и т.д.).
Смотрите также:
структуры


SetFindListInfo

главная | структуры | Panel API
Структура SetFindListInfo передает информацию о найденных объектах в функцию SetFindListW.
struct SetFindListInfo
{
  size_t StructSize;
  HANDLE hPanel;
  const struct PluginPanelItem *PanelItem;
  size_t ItemsNumber;
};

Элементы

StructSize
Это поле содержит размер структуры SetFindListInfo.
hPanel
Описатель панели, возвращаемый функцией OpenW.
PanelItem
Указатель на массив структур PluginPanelItem. Каждая структура описывает файл для помещения в панель.
ItemsNumber
Число элементов в массиве PanelItem.
Смотрите также:
структуры


Editor API

главная

Краткое описание Editor API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция | Описание
ProcessEditorInputW | обработка событий клавиатуры и мыши
ProcessEditorEventW | обработка событий редактора

Сервисные функции, указатели на эти функции плагины получают от Far Manager в функции SetStartupInfoW

Функция | Описание
Editor | обеспечивает доступ к внутреннему редактору Far Manager
EditorControl | позволяет запрашивать различную информацию о внутреннем редакторе Far Manager и управлять его состоянием

Структуры

Структура | Описание
EditorBookmarks | информация о закладках текущего редактируемого файла
EditorChange | информирует о том, как изменился текст в редакторе
EditorColor | установить или получить информацию о цветовых областях строк
EditorConvertPos | преобразование между реальным и экранным положением курсора в редакторе
EditorDeleteColor | удалить цветовую область в редакторе
EditorGetString | запрос строки из редактора
EditorInfo | текущее состояние редактора
EditorSaveFile | сохранение редактируемого файла
EditorSelect | выделение или сброс выделения блока в редакторе
EditorSetParameter | установка параметров редактора
EditorSetPosition | установка позиции в редакторе
EditorSetString | установка или вставка строки в редакторе
EditorUndoRedo | управление поведением операции Отмена-Возврат действия, т.н. Undo-Redo
EditorSubscribeChangeEvent | подписка на EE_CHANGE события
ProcessEditorEventInfo | информация о событии в редакторе
ProcessEditorInputInfo | информация о событии в редакторе
Смотрите также:
Типы и определения


ProcessEditorInputW

главная | экспортируемые функции | Editor API
Функция ProcessEditorInputW вызывается всякий раз, когда внутренний редактор Far Manager обрабатывает событие от клавиатуры или мыши.
intptr_t WINAPI ProcessEditorInputW(
  const struct ProcessEditorInputInfo *Info
);

Параметры

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

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

  • Если плагин должен передать управление в редактор Far Manager`а, то верните 0.
  • Если плагин в полной мере отработал событие или вы хотите, чтобы Far Manager игнорировал это событие, то верните 1.

Замечания

  1. Плагин должен корректно обрабатывать входные события путём анализа поля Info->INPUT_RECORD.EventType и, в случае если плагин данное событие не обрабатывает, вернуть управление в Far Manager.
  2. Во время "проигрывания" макроса клавиатурные события (KEY_EVENT) имеют "новый" тип - поле Info->INPUT_RECORD.EventType равно значению 0x8001.
  3. Плагин может вызвать команду EditorControl из этой функции, но будьте осторожны, когда вызываете здесь ECTL_PROCESSINPUT, потому что эта команда вызывает функцию ProcessEditorInputW снова. Таким образом, плагин должен сам предотвратить такой самовызов, или он впадёт в бесконечный цикл.
  4. Плагину не приходят клавиши: Ctrl+W, F11, Alt+F9, F12, Ctrl+Tab, Ctrl+Shift+Tab, Alt+Ins и Ctrl+Alt+Shift.
  5. Плагину приходят клавиши (с ограничениями):
    • Alt+F5 - если плагин PrintMan не установлен
    • Alt+F11 - если редактор модальный
    • F6 - если есть запрет на переключение в программу просмотра (при вызове функции Editor не указан флаг EF_ENABLE_F6).
Смотрите также:
INPUT_RECORD


ProcessEditorEventW

главная | экспортируемые функции | Editor API
Функция ProcessEditorEventW сообщает плагину о событиях, происходящих в редакторе Far Manager.
intptr_t WINAPI ProcessEditorEventW(
  const struct ProcessEditorEventInfo *Info
);

Параметры

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

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

Возвращаемое значение зависит от типа события, смотрите описание событий для уточнения информации.
Для необрабатываемых плагином событий, функция должна возвращать 0.
Смотрите также:
EditorControl


Editor

главная | сервисные функции | Editor API
Функция Editor позволяет открыть внутренний редактор Far Manager.
intptr_t WINAPI Editor(
  const wchar_t *FileName,
  const wchar_t *Title,
  intptr_t X1,
  intptr_t Y1,
  intptr_t X2,
  intptr_t Y2,
  EDITOR_FLAGS Flags,
  intptr_t StartLine,
  intptr_t StartChar,
  uintptr_t CodePage
);

Параметры

FileName
Файл для редактирования. Если не указан флаг EF_CREATENEW, то FileName должен содержать имя существующего файла.
Title
Текстовая строка, которая будет показана вверху окна редактора. Если этот параметр равен NULL, то используется имя файла.
X1, Y1, X2, Y2
Координаты окна редактора. Если координата X2 или Y2 равна -1, то она будет замещена соответственно шириной или высотой экрана. Если координата X1 или Y1 меньше нуля, то считается, что она равна нулю.
Flags
Флаги редактора. Может быть комбинацией следующих значений (тип EDITOR_FLAGS):
Флаг | Описание
EF_NONMODAL Создать немодальное окно редактора. Если этот флаг присутствует, пользователь сможет переключаться между редактором и другими окнами Far Manager.

Плагин получит управление только после закрытия или ухода из открытого редактора (например, пользователь нажал Ctrl+Tab). Если вам нужно, чтобы плагин получал управление сразу же после открытия редактора, то используйте флаг EF_IMMEDIATERETURN.

EF_IMMEDIATERETURN | Позволяет плагину получать управление сразу же после открытия редактора. Открываемый редактор становится активным. Выставлять этот флаг имеет смысл только в паре с флагом EF_NONMODAL.
EF_DELETEONCLOSE Поручает Far Manager'у удалить редактируемый файл после закрытия редактора. Если в директории, содержащей редактируемый файл, нет других файлов, она также будет удалена. Если требуется удаление только файла, то используйте EF_DELETEONLYFILEONCLOSE.
Файл не удаляется:
  1. если было произведено переключение по F6 и если существуют другие открытые вьюеры/редакторы с этим же файлом.
  2. если файл был сохранён из редактора.
EF_DELETEONLYFILEONCLOSE | Аналог EF_DELETEONCLOSE, но удаляется только файл. Этот флаг имеет более низкий приоритет при обработке, чем EF_DELETEONCLOSE.
EF_CREATENEW | Создать новый файл на диске. Вызов редактора с этим флагом аналогичен вызову редактора по Shift+F4 в панелях.
EF_ENABLE_F6 | Разрешает переключение по F6 из редактора во вьюер.
EF_DISABLEHISTORY | Запретить добавление имени файла в историю редактирования (Alt+F11). По умолчанию имя в историю добавляется.
EF_LOCKED | При открытии файла запретить редактирование. Пользователь сможет снять блокировку с помощью клавиш Ctrl+L.
EF_DISABLESAVEPOS | Не сохранять позицию в редактируемом файле.
EN_NONE | Нулевой флаг.
EF_OPENMODE_MASK | Маска для EF_OPENMODE_*
EF_OPENMODE_QUERY | Режим открытия. Если файл открыт в редакторе, пользователю будет показан диалог дальнейших действий (GUID: {AFDAD388-494C-41E8-BAC6-BBE9115E1CC0})
EF_OPENMODE_NEWIFOPEN | Режим открытия. Открыть файл в новом редакторе, если файл уже открыт в редакторе
EF_OPENMODE_USEEXISTING | Режим открытия. Переключиться на открытый в редакторе файл.
EF_OPENMODE_BREAKIFOPEN | Режим открытия. Прервать выполнение функции, если файл открыт в редакторе
EF_OPENMODE_RELOADIFOPEN | Режим открытия. Переоткрыть, если файл открыт в редакторе.
StartLine
Начальная строка, в которую помещаем курсор. Нумерация строк начинается с 1.
StartChar
Позиция курсора в строке. Нумерация позиции начинается с 1.
CodePage
Номер кодовой страницы, в которой будет открыт редактор. Можете установить значение в CP_DEFAULT. Помимо этого можно использовать следующие определения.
Определение | Описание
CP_UNICODE | кодовая страница 1200
CP_REVERSEBOM | кодовая страница 1201
CP_DEFAULT | автоматически определить номер кодовой страницы
CP_REDETECT | переопределить номер кодовой страницы

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

Эта функция возвращает следующие значения (перечисление EDITOR_EXITCODE):
Возвращаемое значение | Описание
EEC_OPEN_ERROR Ошибка открытия файла. Ошибка возникает в случаях, если:
  • Far Manager не смог выделить достаточно памяти при создании редактора (как объекта);
  • в качестве параметра FileName передали пустую строку;
  • в качестве параметра FileName было передано имя каталога;
  • редактируемый файл имеет RO-атрибут и пользователь в диалоге подтверждения открытия такого файла отказался от дальнейшего редактирования.
EEC_MODIFIED | Успешное завершение. Файл был изменён. Функция Editor также возвращает этот код возврата при использовании флага EF_NONMODAL.
EEC_NOT_MODIFIED | Успешное завершение. Файл не был изменён.
EEC_LOADING_INTERRUPTED | Загрузка файла прервана пользователем.

Замечания

Если StartLine и StartChar равны -1, то при открытии редактора будет восстановлена предварительно сохранённая позиция в файле (если это включено в настройках).
Смотрите также:
Viewer


EditorControl

главная | сервисные функции | Editor API
Функция EditorControl позволяет запрашивать различную информацию о встроенном редакторе Far Manager и управлять его состоянием.
intptr_t WINAPI EditorControl(
  intptr_t EditorID,
  enum EDITOR_CONTROL_COMMANDS Command,
  intptr_t Param1,
  void *Param2
);

Параметры

EditorID
Идентификатор экземпляра редактора (текущий редактор: -1). Каждый экземпляр редактора имеет уникальный идентификатор, который не повторяется в текущей сессии Far Manager.
Command
Тип команды. Может быть одним из следующих (перечисление EDITOR_CONTROL_COMMANDS):
Команда Описание
ECTL_ADDCOLOR Задать цвет части строки. Эта команда может быть вызвана несколько раз для одной и той же строки для задания нескольких цветных областей.
Param1 не используется.
Param2 указывает на структуру EditorColor.
Если указанная строка отсутствует, то возвращается FALSE, иначе TRUE.
ECTL_ADDSESSIONBOOKMARK Добавить позицию навигации (это особый вид закладок, отличающийся от обычных тем, что действуют в пределах сеанса редактора) в стек, при этом, если добавление идет между элементами стека, то все закладки, с индексом больше текущего, будут удалены.
Param1 и Param2 должны быть NULL.
Функция возвращает TRUE в случае успешного выполнения.
ECTL_CLEARSESSIONBOOKMARKS Удалить все позиции навигации.
Param1 и Param2 должны быть NULL.
ECTL_DELETEBLOCK Удалить блок в редакторе.
Param1 и Param2 должны быть NULL.
Функция вернёт TRUE в случае удачного удаления блока и FALSE, если редактор заблокирован (пользователь нажал Ctrl+L) или нет выделенного блока.
ECTL_DELCOLOR Удалить цветовую область в строке. Эта команда может быть вызвана несколько раз для одной и той же строки.
Param1 не используется.
Param2 указывает на структуру EditorDeleteColor.
Если указанная строка отсутствует, то возвращается FALSE, иначе TRUE.
ECTL_DELETECHAR Удалить символ под курсором.
Param1 и Param2 должны быть NULL.
Функция вернёт TRUE в случае удачного удаления и FALSE, если редактор заблокирован (пользователь нажал Ctrl+L).
ECTL_DELETESESSIONBOOKMARK Удалить указанную позицию навигации.
Param1 не используется.
Param2 должен быть равен индексу удаляемой позиции навигации (0 и более) или -1 для удаления текущей позиции навигации. Количество позиций навигации можно получить, вызвав ECTL_GETSESSIONBOOKMARKS.
Функция возвращает TRUE в случае успешного выполнения.
ECTL_DELETESTRING Удалить текущую строку.
Param1 и Param2 должны быть NULL.
Функция вернёт TRUE в случае удачного удаления и FALSE, если редактор заблокирован (пользователь нажал Ctrl+L).
ECTL_EXPANDTABS Заменить все символы табуляции в строке пробелами.
Param1 не используется.
Param2 указывает на целочисленную переменную которая содержит номер обрабатываемой строки или -1 для обработки текущей строки.
Функция вернёт TRUE в случае удачной замены и FALSE, если редактор заблокирован (пользователь нажал Ctrl+L) или нет такой строки.
ECTL_GETBOOKMARKS Получить информацию о закладках для текущего редактируемого файла.
Param1 не используется.
Param2 указывает на структуру EditorBookmarks - выделенный плагином блок памяти, или равен NULL (если необходимо узнать размер буфера).
Команда возвращает 0, если файл ещё не открыт, в противном случае, возвращается необходимый размер буфера памяти.
ECTL_GETSESSIONBOOKMARKS Получить информацию о позициях навигации для текущего редактируемого файла.
Param1 не используется.
Param2 указывает на структуру EditorBookmarks - выделенный плагином блок памяти, или равен NULL (если необходимо узнать размер буфера).
Команда возвращает 0 в случае ошибки, в противном случае, возвращается необходимый размер буфера памяти.
ECTL_GETCOLOR Получить цвет части строки.
Param1 не используется.
Param2 указывает на структуру EditorColor.
Если указанная строка или часть строки отсутствует, то возвращается FALSE, иначе TRUE.
ECTL_GETFILENAME Получить имя открытого в редакторе файла.
Param1 - размер буфера в символах, который выделил плагин для данных.
Param2 указывает на буфер, выделенный плагином, куда будет помещено имя файла.
Функция возвращает требуемый размер буфера в символах, с учетом завершающего нуля.
Если Param2 = NULL или Param1 меньше требуемого размера, функция просто вернет необходимый размер буфера.
ECTL_GETINFO Получить информацию о редакторе.
Param1 не используется.
Param2 указывает на структуру EditorInfo.
Функция возвращает TRUE в случае успешного выполнения.
ECTL_GETSTRING Получить информацию о строке.
Param1 не используется.
Param2 указывает на структуру EditorGetString.
// получить первую строку редактируемого файла
struct EditorGetString egs={sizeof(EditorGetString)};
egs.StringNumber=0;
Info.EditorControl(-1,ECTL_GETSTRING,0,&egs);
Если указанная строка отсутствует, то возвращается FALSE, иначе TRUE.
ECTL_GETTITLE Получить заголовок редактора.
Param1 - размер буфера в символах, который выделил плагин для данных.
Param2 указывает на буфер, выделенный плагином, куда будет помещен заголовок редактора.
Функция возвращает требуемый размер буфера в символах, с учетом завершающего нуля.
Если Param2 = NULL или Param1 меньше требуемого размера, функция просто вернет необходимый размер буфера.
ECTL_INSERTSTRING Вставить новую строку (разорвать строку) с текущей позиции курсора и переместить курсор либо на первую позицию новой строки, либо на позицию с учётом отступа.
Param1 не используется.
Если Param2 указывает на целочисленную переменную, равную 1, то при выполнении данной команды будет использоваться отступ. Для его отключения установите Param2 в NULL или установите целую переменную в 0. Поведение при отступе из плагина точно такое же, как и при нажатии Enter пользователем в редакторе, например, в новую строку пробелы (или табуляция) не вставляются, если после нового положения курсора строка не содержит никаких символов.
// вставить пустую строку без отступа
Info.EditorControl(-1,ECTL_INSERTSTRING,0,0);
Функция вернёт TRUE в случае удачного выполнения операции и FALSE, если редактор заблокирован (пользователь нажал Ctrl+L).
ECTL_INSERTTEXT Вставить текст, начиная с позиции курсора.
Param1 не используется.
Param2 указывает на строку, оканчивающуюся нулём. Команда корректно обрабатывает символ(ы) перевода строки (CR). Команда ECTL_INSERTTEXT работает так, как будто текст вводится с клавиатуры.
// вставить строку "Text" в текущую позицию курсора
Info.EditorControl(-1,ECTL_INSERTTEXT,0,(void*)L"Text");
Функция вернёт TRUE в случае удачного выполнения операции и FALSE, если редактор заблокирован (пользователь нажал Ctrl+L) или строка равна NULL.
ECTL_NEXTSESSIONBOOKMARK Перейти на следующую позицию навигации.
Param1 и Param2 должны быть NULL.
Команда возвращает TRUE в случае успешного выполнения.
ECTL_PREVSESSIONBOOKMARK Перейти на предыдущую позицию навигации.
Если после предыдущего вызова команды ECTL_ADDSESSIONBOOKMARK не выполнялось операций с позициями навигации, то перед переходом запоминается текущая позиция редактора в качестве новой позиции навигации. Param1 и Param2 должны быть NULL.
Команда возвращает TRUE в случае успешного выполнения.
ECTL_PROCESSINPUT Передаёт структуру INPUT_RECORD, указатель на которую передаётся в Param2, внутреннему редактору Far Manager для обработки.
Учтите, что если ваш плагин экспортирует функцию ProcessEditorInputW, то данные из Param2 сразу же будут переданы в ProcessEditorInputW. Param1 не используется.
Схема проста:
case ECTL_PROCESSINPUT:
if (ProcessEditorInput(Param))
  return(TRUE);
  ...
Поэтому используя EditorControl(ECTL_PROCESSINPUT) в функции ProcessEditorInputW следите за тем, чтобы не впасть в бесконечную рекурсию.
ECTL_QUIT Закрыть редактор. Любая не сохраненная информация будет потеряна.
Param1 и Param2 должны быть NULL.
Эта команда всегда возвращает TRUE.
ECTL_READINPUT Заполняет структуру INPUT_RECORD, читая данные со стандартного устройства ввода.
Param1 не используется.
Param2 указывает на структуру INPUT_RECORD (она определена в Windows API и используется в функции ReadConsoleInput).
ECTL_REALTOTAB Конвертировать реальную строковую позицию курсора в экранную позицию. Если строка не содержит символов табуляции, входная и получаемая позиция будут равными.
Param1 не используется.
Param2 указывает на структуру EditorConvertPos.
Если указанная строка отсутствует, то возвращается FALSE, иначе TRUE.
ECTL_REDRAW Перерисовать окно редактора.
Param1 и Param2 должны быть NULL.
Эта команда всегда возвращает TRUE.
ECTL_SAVEFILE Позволяет плагину сохранить редактируемый файл.
Param1 не используется.
Param2 указывает на структуру EditorSaveFile. Если Param2 равен NULL, то будут использованы имя редактируемого файла и текущий формат сохранения (DOS-формат - перевод строки заменяется на "\r\n", Unix-формат - "\n"). При успешном сохранении файла функция вернёт TRUE.
ECTL_SELECT Выделить или снять выделение с блока.
Param1 не используется.
Param2 указывает на структуру EditorSelect.
При успешной операции функция вернёт TRUE.
ECTL_SETKEYBAR Функция, позволяющая управлять поведением строки функциональных клавиш в редакторе.
Param1 не используется.
Param2 = NULL - восстановить предыдущее значение
Param2 = -1 - обновить полосу (перерисовать)
Param2 равен указателю на структуру FarSetKeyBarTitles, новое значение.
Вызывать данную команду в событии EE_READ не имеет смысла, т.к. строки функциональных клавиш, как объекта, в момент загрузки файла в редактор ещё не существует.
Функция возвращает TRUE в случае успешного выполнения или FALSE (когда строка, как объект, не создана).
ECTL_SETPARAM Изменение настроек текущего редактора.
Param1 не используется.
Param2 указывает на структуру EditorSetParameter.
Функция возвращает TRUE в случае успешного изменения параметров.
ECTL_SETPOSITION Установить позицию курсора.
Param1 не используется.
Param2 указывает на структуру EditorSetPosition.
При успешной операции функция вернёт TRUE.
ECTL_SETSTRING Поместить текст в строку.
Param1 не используется.
Param2 указывает на структуру EditorSetString. Помещаемая строка должна быть в кодировке редактора.
При успешной операции функция вернёт TRUE.
ECTL_SETTITLE Установить заголовок редактора (верхняя статусная панель).
Param1 не используется.
Param2 указывает на строку, оканчивающуюся нулём, которая содержит текст заголовка.
Для восстановления статусной строки укажите параметр Param2 = NULL или пустой строке.
Заголовок не будет выведен, если статусная строка погашена.
При показе заголовок будет усечён до размера, не затрагивающего служебную информацию (кодировка, позиция, etc.)
// DrawLine\DrawLine.cpp: функция SetTitle
Info.EditorControl(-1,ECTL_SETTITLE,0,GetMsg(IDTitle));
Эта команда всегда возвращает TRUE.
ECTL_TABTOREAL Конвертировать экранную позицию курсора в реальную строковую позицию. Если строка не содержит символов табуляции, входная и получаемая позиция будут равными.
Param1 не используется.
Param2 указывает на структуру EditorConvertPos.
Если указанная строка отсутствует, то возвращается FALSE, иначе TRUE.
ECTL_UNDOREDO Функция, позволяющая управлять поведением операции Отмена-Возврат действия, т.н. Undo-Redo.
Param1 не используется.
Param2 указывает на структуру EditorUndoRedo.
Команда возвращает TRUE в случае успешного выполнения операции.
ECTL_SUBSCRIBECHANGEEVENT Подписаться на получение EE_CHANGE событий для заданной сессии редактора.
Param1 не используется.
Param2 указывает на структуру EditorSubscribeChangeEvent.
Команда возвращает TRUE в случае успешного выполнения операции.
ECTL_UNSUBSCRIBECHANGEEVENT Отписаться от получения EE_CHANGE событий для заданной сессии редактора.
Param1 не используется.
Param2 указывает на структуру EditorSubscribeChangeEvent.
Команда возвращает TRUE в случае успешного выполнения операции.
Param1
Указывает на параметры1 команды. Смотрите описание Command.
Param2
Указывает на параметры2 команды. Смотрите описание Command.

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

Смотрите описание конкретной команды.

Замечания

Far Manager обновляет содержимое окна редактора при активных действиях пользователя. Вызовите ECTL_REDRAW, чтобы принудительно обновить окно после любых активных изменений содержимого редактора.
Смотрите также:
AdvControl, PanelControl


EditorBookmarks

главная | структуры | Editor API
Структура EditorBookmarks используется в функции EditorControl для получения информации о закладках текущего редактируемого файла (команда ECTL_GETBOOKMARKS или ECTL_GETSESSIONBOOKMARKS).
struct EditorBookmarks
{
  size_t StructSize;
  size_t Size;
  size_t Count;
  intptr_t *Line;
  intptr_t *Cursor;
  intptr_t *ScreenLine;
  intptr_t *LeftPos;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorBookmarks. Перед использованием структуры плагин должен заполнить поле.
Size
Размер буфера в памяти, который выделил плагин для размещения запрашиваемой информации.
Count
Количество закладок.
Line
Указатель на массив номеров строк для каждой закладки.
Cursor
Указатель на массив позиций курсоров в строках Line.
ScreenLine
Указатель на массив номеров строк, соответствующих первой видимой строке текста на экране.
LeftPos
Указатель на массив позиций, соответствующих первому видимому символу текста на экране слева.

Замечания

Перед получением информации о закладках, плагину необходимо выяснить размер запрашиваемых данных, для этого передайте NULL вместо ссылки на структуру EditorBookmarks в команде ECTL_GETBOOKMARKS или ECTL_GETSESSIONBOOKMARKS, например:
// узнаем размер
intptr_t size = Info.EditorControl(-1,ECTL_GETBOOKMARKS,0,NULL);
if (!size)
  return FALSE;

// выделим соответствующий объем памяти
EditorBookmarks *newbm = (EditorBookmarks *)malloc(size);
if (!newbm)
  return FALSE;

// только теперь запрашиваем закладки
newbm->StructSize = sizeof(EditorBookmarks);
newbm->Size = size;
if (!Info.EditorControl(-1,ECTL_GETBOOKMARKS,0,newbm))
{
  free(newbm);
  return FALSE;
}
Смотрите также:
структуры


EditorChange

главная | структуры | Editor API
Структура EditorChange информирует о том, как изменился текст в редакторе, используется в функции ProcessEditorEventW.
struct EditorChange
{
  size_t StructSize;
  enum EDITOR_CHANGETYPE Type;
  intptr_t StringNumber;
};

Элементы

StructSize
Это поле содержит размер структуры EditorChange.
Type
Тип изменения (перечисление EDITOR_CHANGETYPE):
Тип | Описание
ECTYPE_CHANGED | Строка изменена.
ECTYPE_ADDED | Строка добавлена.
ECTYPE_DELETED | Строка удалена.
StringNumber
Номер строки, в которой произошли изменения.

Замечания

Смотрите также:
структуры


EditorColor

главная | структуры | Editor API
Структура EditorColor используется в функции EditorControl для того, чтобы установить или получить информацию о цветовых областях строк во внутреннем редакторе.
struct EditorColor
{
  size_t StructSize;
  intptr_t StringNumber;
  intptr_t ColorItem;
  intptr_t StartPos;
  intptr_t EndPos;
  uintptr_t Priority;
  EDITORCOLORFLAGS Flags;
  struct FarColor Color;
  GUID Owner;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorColor. Перед использованием структуры плагин должен заполнить поле.
StringNumber
Номер строки для обработки или -1 для текущей строки.
ColorItem
Номер цветовой области, о которой вы хотите получить информацию. Строка может содержать несколько цветовых областей. Установите ColorItem = 0 для получения информации о первой цветовой области, 1 - о второй и т.д.
Это поле не используется в ECTL_ADDCOLOR. Новый цвет всегда применяется ко всей области от StartPos до EndPos, независимо от существовавших там ранее различных цветовых областей.
StartPos, EndPos
Область строки для установки цвета.
Входной параметр для ECTL_ADDCOLOR и выходной для ECTL_GETCOLOR.
Priority
Приоритет наложения цветовых областей.
Параметр указывает Far Manager'у, в какой последовательности накладывать цвета от разных плагинов. Например, для плагина Colorer значение должно быть установлено в 0, т.к. он обеспечивает "базовую" раскраску. Для ANSI-плагинов значение установлено в EDITOR_COLOR_NORMAL_PRIORITY.
Flags
Флаги (тип EDITORCOLORFLAGS):
Флаг | Описание
ECF_TABMARKFIRST | если в диапазоне цветовой области встречается символ табуляции, то раскрасить его как один символ
ECF_TABMARKCURRENT | если в диапазоне цветовой области встречается символ табуляции, то раскрасить не первый символ табуляции, а тот, который совпадает с текущей горизонтальной позицией курсора
ECF_AUTODELETE | Far Manager автоматически удалит данную цветовую область непосредственно перед очередной посылкой плагинам события EE_REDRAW
Color
Установленный или устанавливаемый цвет, структура типа FarColor.
Входной параметр для ECTL_ADDCOLOR и выходной для ECTL_GETCOLOR.

Far Manager раскрашивает символ табуляции на всю длину, на которую расширяется табуляция. Если необходимо, чтобы символ табуляции для цветовой области занимал одно знакоместо, то в дополнении к цвету, необходимо выставить флаг ECF_TABMARKFIRST или ECF_TABMARKCURRENT.

Owner
GUID плагина-владельца цветовой области.

Замечания

Через параметр Color вы можете задать и цвет фона. Более того, вне зависимости от длины строки вы можете установить область начиная с первой видимой позиции и кончая самой правой - при этом вы как бы замените цвет фона в редакторе. Хотя этот метод не сработает на файлах, у которых число строк меньше размера экрана :(

Смотрите также:
структуры, EditorDeleteColor


EditorConvertPos

главная | структуры | Editor API
Структура EditorConvertPos используется в функции EditorControl для преобразования реальной строковой позиции курсора в экранную позицию (и наоборот). Это может быть полезно для строк, которые содержат символы табуляции.
struct EditorConvertPos
{
  size_t StructSize;
  intptr_t StringNumber;
  intptr_t SrcPos;
  intptr_t DestPos;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorConvertPos. Перед использованием структуры плагин должен заполнить поле.
StringNumber
Номер строки для обработки, или -1 для преобразования позиции в текущей строке.
SrcPos
Позиция для конвертирования.
DestPos
Преобразованная позиция.
Смотрите также:
структуры


EditorDeleteColor

главная | структуры | Editor API
Структура EditorDeleteColor используется в функции EditorControl для того, чтобы удалить цветовую область строки во внутреннем редакторе.
struct EditorDeleteColor
{
  size_t StructSize;
  GUID Owner;
  intptr_t StringNumber;
  intptr_t StartPos;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorDeleteColor. Перед использованием структуры плагин должен заполнить поле.
Owner
GUID плагина-владельца удаляемой цветовой области.
StringNumber
Номер строки для обработки или -1 для текущей строки.
StartPos
Начало области цвета в строке для удаления. Если значение равно -1, то все цветовые области данной строки будут удалены.

Замечания

На самом деле удаление только части цветовых областей имеет очень мало смысла и практически не используется. Но зачищать всю строку необходимо, так как иначе цветовые области будут всё накапливаться, а память всё увеличиваться.
Смотрите также:
структуры


EditorGetString

главная | структуры | Editor API
Структура EditorGetString используется в функции EditorControl для получения строки из редактора Far Manager.
struct EditorGetString
{
  size_t StructSize;
  intptr_t StringNumber;
  intptr_t StringLength;
  const wchar_t *StringText;
  const wchar_t *StringEOL;
  intptr_t SelStart;
  intptr_t SelEnd;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorGetString. Перед использованием структуры плагин должен заполнить поле.
StringNumber
Номер получаемой строки (первая строка имеет индекс 0). Можно установить это поле в -1 для получения текущей строки.
StringLength
Размер данных, на которые указывает StringText.
StringText
Указывает на данные строки. Вы не должны их изменять. Помните, что среди этих данных могут быть нулевые символы.
StringEOL
Последовательность, обозначающая конец строки. Может быть пустой строкой, \r\n или \n.
SelStart
Стартовая позиция выделения в строке. Если строка не содержит выделения, то это поле равно -1.
SelEnd
Конечная позиция выделения в строке. Если область выделения включает в себя последовательность, равную StringEOL, то это поле равно -1.
Смотрите также:
структуры


EditorInfo

главная | структуры | Editor API
Структура EditorInfo используется в функции EditorControl для получения информации о текущем состоянии редактора Far Manager.
struct EditorInfo
{
  size_t StructSize;
  intptr_t EditorID;
  intptr_t WindowSizeX;
  intptr_t WindowSizeY;
  intptr_t TotalLines;
  intptr_t CurLine;
  intptr_t CurPos;
  intptr_t CurTabPos;
  intptr_t TopScreenLine;
  intptr_t LeftPos;
  intptr_t Overtype;
  intptr_t BlockType;
  intptr_t BlockStartLine;
  uintptr_t Options;
  intptr_t TabSize;
  size_t BookmarkCount;
  size_t SessionBookmarkCount;
  uintptr_t CurState;
  uintptr_t CodePage;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorInfo. Перед использованием структуры плагин должен заполнить поле.
EditorID
Идентификатор экземпляра редактора. Каждый экземпляр редактора имеет уникальный идентификатор, который не повторяется в текущей сессии Far Manager.
WindowSizeX, WindowSizeY
Ширина и высота окна редактора.
TotalLines
Количество строк в редактируемом тексте.
CurLine
Номер текущей строки. Нумерация начинается с 0.
CurPos
Позиция курсора в текущей строке. Нумерация начинается с 0.
CurTabPos
Экранная позиция курсора в текущей строке. Нумерация начинается с 0. Если строка не содержит символов табуляции, CurTabPos эквивалентна CurPos.
TopScreenLine
Номер строки вверху экрана. Нумерация начинается с 0.
LeftPos
Позиция левой границы окна редактора в редактируемом тексте. Нумерация начинается с 0.
Overtype
0 - режим вставки, 1 - замены.
BlockType
Тип выбранного блока. Одно из следующих значений (перечисление EDITOR_BLOCK_TYPES):
Тип блока | Описание
BTYPE_NONE | снять выделение с блока
BTYPE_STREAM | выделить строковой блок
BTYPE_COLUMN | выделить вертикальный блок
BlockStartLine
Номер первой строки блока. Нумерация начинается с 0.
Options
Описывает состояние настроек редактора. Может быть комбинацией следующих флагов (перечисление EDITOR_OPTIONS):
Флаг | Описание
EOPT_EXPANDALLTABS | Включена опция "Преобразовывать все символы табуляции в пробелы". При открытии документа в редакторе все символы Tab заменить на соответствующее количество пробелов. Этот параметр можно изменить используя команду ECTL_SETPARAM (ESPT_EXPANDTABS).
EOPT_EXPANDONLYNEWTABS | Включена опция "Преобразовывать новые символы табуляции в пробелы". При редактировании документа введённый символ Tab заменять на соответствующее количество пробелов. Остальные символы Tab не преобразовывать. Этот параметр можно изменить используя команду ECTL_SETPARAM (ESPT_EXPANDTABS).
EOPT_PERSISTENTBLOCKS | Включена опция "Постоянные блоки".
EOPT_DELREMOVESBLOCKS | Включена опция "Del удаляет блоки".
EOPT_AUTOINDENT | Включена опция "Автоотступ". Этот параметр можно изменить используя команду ECTL_SETPARAM (ESPT_AUTOINDENT).
EOPT_AUTODETECTCODEPAGE | Включена опция "Автоопределение кодовой страницы".
EOPT_CURSORBEYONDEOL | Включена опция "Курсор за пределами строки". Этот параметр можно изменить используя команду ECTL_SETPARAM (ESPT_CURSORBEYONDEOL).
EOPT_SAVEFILEPOSITION | Включена опция "Сохранять позицию файла". Этот параметр можно изменить используя команду ECTL_SETPARAM (ESPT_SAVEFILEPOSITION).
EOPT_SHOWWHITESPACE | Включена опция "Пробельные символы". Этот параметр можно изменить используя команду ECTL_SETPARAM (ESPT_SHOWWHITESPACE).
EOPT_BOM | Установлена опция "Добавить сигнатуру (BOM)" для файлов в кодировке Unicode/UTF8. Этот параметр можно изменить используя команду ECTL_SETPARAM (ESPT_SETBOM).
EOPT_SHOWLINEBREAK | Включена опция "Пробельные символы" в третьем режиме [?]. Этот параметр можно изменить используя команду ECTL_SETPARAM (ESPT_SHOWWHITESPACE).
EOPT_SHOWTITLEBAR | Показана статусная строка.
EOPT_SHOWKEYBAR | Показана линейка функциональных клавиш.
EOPT_SHOWSCROLLBAR | Показана полоса прокрутки.
TabSize
Размер табуляции. Этот параметр можно изменить используя команду ECTL_SETPARAM.
BookmarkCount
Количество закладок в редакторе. Для получения информации о закладках используйте команду ECTL_GETBOOKMARKS.
SessionBookmarkCount
Количество временных (в рамках текущей сессии редактора) закладок в редакторе. Для получения информации о закладках используйте команду ECTL_GETSESSIONBOOKMARKS.
CurState
Текущее состояние редактируемого текста. Может быть набором из следующих значений (перечисление EDITOR_CURRENTSTATE):
Флаг | Описание
ECSTATE_MODIFIED | модифицирован
ECSTATE_SAVED | сохранён
ECSTATE_LOCKED | заблокирован (Ctrl+L)
CodePage
Номер текущей используемой кодовой страницы символов в редакторе.

Замечания

Смотрите также:
структуры


EditorSaveFile

главная | структуры | Editor API
Структура EditorSaveFile используется в функции EditorControl для сохранения редактируемого файла (команда ECTL_SAVEFILE).
struct EditorSaveFile
{
  size_t StructSize;
  const wchar_t *FileName;
  const wchar_t *FileEOL;
  uintptr_t CodePage;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorSaveFile. Перед использованием структуры плагин должен заполнить поле.
FileName
Здесь вы можете определить новое имя для сохраняемого файла. Имейте в виду, что имя файла должно быть полным, включая директорию. Если вы не желаете изменять имя редактируемого файла, то установите значение в NULL.
FileEOL
Последовательность, обозначающая конец строки. Может быть NULL (оставить исходную EOL-последовательность), \r\n или \n.
CodePage
Кодовая страница в которой будет сохранён файл или CP_DEFAULT для сохранения в текущей кодовой странице.
Смотрите также:
структуры


EditorSelect

главная | структуры | Editor API
Структура EditorSelect используется в функции EditorControl для выделения или снятия выделения с текста в редакторе Far Manager.
struct EditorSelect
{
  size_t StructSize;
  intptr_t BlockType;
  intptr_t BlockStartLine;
  intptr_t BlockStartPos;
  intptr_t BlockWidth;
  intptr_t BlockHeight;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorSelect. Перед использованием структуры плагин должен заполнить поле.
BlockType
Одно из следующих значений (перечисление EDITOR_BLOCK_TYPES):
Тип блока | Описание
BTYPE_NONE | снять выделение с блока
BTYPE_STREAM | выделить строковой блок
BTYPE_COLUMN | выделить вертикальный блок
Если BlockType = BTYPE_NONE, другие поля этой структуры не важны.
BlockStartLine
Первая строка блока. Можно установить это поле в -1 - началом блока будет текущая строка.
BlockStartPos
Начальная позиция блока. Если BlockStartPos = -1, то выделение блока снимается.
BlockWidth
Ширина блока. Может быть отрицательной величиной.
BlockHeight
Высота блока. Должна быть >= 1.

Замечания

  1. Функция EditorControl вернёт FALSE, если:
    • размер передаваемой переменной меньше размера структуры EditorSelect;
    • BlockHeight меньше 1;
    • BlockStartLine больше количества строк в редакторе.

Пример

Программно строковый блок от (X1,Y1) до (X2,Y2) можно выделить так:
es.BlockType=BTYPE_STREAM;
es.BlockStartLine=min(Y2,Y1);
es.BlockStartPos=(Y1 < Y2?X1:X2);

// небольшая коррекция, если позиции равны
if(X1 == X2)
  es.BlockStartPos+=(Y1 < Y2?1:-1);

es.BlockHeight=max(Y1,Y2)-min(Y1,Y2)+1;

if(Y1 < Y2)
  es.BlockWidth=X2-X1+1;
else
  es.BlockWidth=X1-X2+1;

if(X1 == X2)
{
  if(Y1 < Y2)
    es.BlockStartPos--;
  else
    es.BlockStartPos++;
}

Info.EditorControl(-1,ECTL_SELECT,0,(void*)&es);
Смотрите также:
структуры


EditorSetParameter

главная | структуры | Editor API
Структура EditorSetParameter используется в функции EditorControl для изменения настроек текущего редактора Far Manager.
struct EditorSetParameter
{
  size_t StructSize;
  enum EDITOR_SETPARAMETER_TYPES Type;
  union
  {
    intptr_t iParam;
    wchar_t *wszParam;
    intptr_t Reserved;
  }
#ifndef __cplusplus
  Param
#endif
  ;
  unsigned __int64 Flags;
  size_t Size;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorSetParameter. Перед использованием структуры плагин должен заполнить поле.
Type
Тип настройки. Может быть одним из следующих (перечисление EDITOR_SETPARAMETER_TYPES):
Настройка Описание
ESPT_AUTOINDENT Включение/выключение режима "Автоотступ".
iParam соответственно должен быть равен TRUE или FALSE.
ESPT_CHARCODEBASE Указать формат показа кода текущего символа в статусной строке редактора.
iParam может принимать следующие значения:
  • 0 - восьмеричное значение (3 символа с ведущим нулями)
  • 1 - десятеричное значение (3 символа с ведущими пробелами)
  • 2 - шестнадцатеричное значение (2 символа под цифру + символ 'h')
ESPT_CODEPAGE Изменить текущую кодировку в редакторе.
iParam - номер устанавливаемой кодовой страницы. В случае неудачи EditorControl возвращает FALSE, кодировка не изменяется. Можно использовать значения CP_REDETECT и CP_DEFAULT, для автоматического определения кодировки и установки последней сохранённой кодировки из истории.
ESPT_CURSORBEYONDEOL Включение/выключение режима "Курсор за пределами строки".
iParam соответственно должен быть равен TRUE или FALSE.
ESPT_EXPANDTABS Управление поведением замены пробелов вместо табуляции.
iParam может быть одним из следующих режимов (перечисление EXPAND_TABS):
Флаг | Описание
EXPAND_NOTABS |
EXPAND_ALLTABS |
EXPAND_NEWTABS |

ВНИМАНИЕ! ВНИМАНИЕ!

  • Данная операция необратима, т.е. если в файле были использованы пробелы вместо табуляции, то при переходе к обычным символам табуляции присутствующие в файле идущие подряд пробелы в символы табуляции преобразованы не будут.
ESPT_LOCKMODE Включение/выключение запрета модификации текста (аналог Ctrl+L).
Если iParam равен TRUE, то включается запрет модификации текста, если FALSE - запрет отменяется.
ESPT_SAVEFILEPOSITION Включение/выключение опции "Сохранять позицию файла".
iParam соответственно должен быть равен TRUE или FALSE.
ESPT_SHOWWHITESPACE Включение/выключение опции "Пробельные символы".
iParam может принимать следующие значения:
  • 0 - не показывать пробельные символы, знаки табуляции и окончания строк
  • 1 - показывать пробельные символы и знаки табуляции
  • 2 - показывать пробельные символы, знаки табуляции и окончания строк
ESPT_SETBOM Включение/выключение опции "Добавить сигнатуру (BOM)" при сохранении файла в кодировке Unicode/UTF8.
iParam соответственно должен быть равен TRUE или FALSE.
ESPT_SETWORDDIV Позволяет изменить строку символов-разделителей слов (параметр wszParam) для текущей копии редактора.
Если wszParam равен NULL или пустой строке, то в качестве строки разделителей принимается установленное по умолчанию значение - "~!%^&*()+|{}:"<>?`-=\[];',./" Эта строка может содержать не более 255 символов.
ESPT_GETWORDDIV Позволяет получить (в поле wszParam) строку символов-разделителей слов длиною Size для текущей копии редактора.
wszParam должен указывать на буфер выделенный плагином. Если wszParam = NULL, то EditorControl возвращает необходимый размер буфера в символах.
ESPT_TABSIZE Изменение размера табуляции.
iParam содержит новое значение - от 1 до 512. Значение размера табуляции, выходящее за указанные границы, выставляется равным 8.
iParam
Содержит число, см. описание по конкретному типу настройки.
wszParam
Указатель на строку, оканчивающуюся нулём, см. описание по конкретному типу настройки.
Reserved
Размер этого параметра всегда равен размеру объединения Param, что позволяет использовать этот параметр для платформенно-независимой инициализации..
Flags
Содержит дополнительные условия/данные, см. описание по конкретному типу настройки.
Size
Содержит число, см. описание по конкретному типу настройки.

Замечания

Если плагин меняет одновременно размер табуляции и состояние режима "Пробелы вместо табуляции", то имеет смысл применять команды в такой последовательности: сначала ESPT_TABSIZE, потом ESPT_EXPANDTABS.
Смотрите также:
структуры


EditorSetPosition

главная | структуры | Editor API
Структура EditorSetPosition используется в функции EditorControl для установки позиции и состояния курсора в редакторе Far Manager.
struct EditorSetPosition
{
  size_t StructSize;
  intptr_t CurLine;
  intptr_t CurPos;
  intptr_t CurTabPos;
  intptr_t TopScreenLine;
  intptr_t LeftPos;
  intptr_t Overtype;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorSetPosition. Перед использованием структуры плагин должен заполнить поле.
CurLine
Новая текущая строка или -1 для сохранения прежнего значения.
CurPos
Новая позиция курсора в текущей строке или -1 для сохранения прежнего значения.
CurTabPos
Новая экранная позиция курсора или -1 для сохранения прежнего значения. Если текущая строка не содержит символы табуляции, CurTabPos даёт такой же эффект, как и CurPos. Вы не должны одновременно использовать CurPos и CurTabPos, установите хотя бы одно из этих полей в -1.
TopScreenLine
Новая строка вверху экрана или -1 для сохранения прежнего значения.
LeftPos
Новая позиция левой границы окна редактора в редактируемом тексте или -1 для сохранения прежнего значения.
Overtype
Поместите сюда 0 для установления режима вставки, 1 для установления режима замены или -1 для сохранения прежнего состояния.
Смотрите также:
структуры


EditorSetString

главная | структуры | Editor API
Структура EditorSetString используется в функции EditorControl для изменения значения строки во внутреннем редакторе Far Manager.
struct EditorSetString
{
  size_t StructSize;
  intptr_t StringNumber;
  intptr_t StringLength;
  const wchar_t *StringText;
  const wchar_t *StringEOL;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorSetString. Перед использованием структуры плагин должен заполнить поле.
StringNumber
Номер изменяемой строки. Можно установить это поле в -1 для обработки текущей строки.
StringLength
Размер данных, на которые указывает StringText.
StringText
Указывает на добавляемую строку.
StringEOL
Последовательность, обозначающая конец строки. Может быть пустой строкой, \r\n или \n. Вы можете поместить эту последовательность или в поле StringEOL, или непосредственно в StringText. Также можно установить это поле в NULL для использования значения по умолчанию.
Смотрите также:
структуры


EditorUndoRedo

главная | структуры | Editor API
Структура EditorUndoRedo используется в функции EditorControl для управления поведением операции Отмена-Возврат действия, т.н. Undo-Redo в редакторе Far Manager.
struct EditorUndoRedo
{
  size_t StructSize;
  enum EDITOR_UNDOREDO_COMMANDS Command;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorUndoRedo. Перед использованием структуры плагин должен заполнить поле.
Command
Одно из следующих значений (перечисление EDITOR_UNDOREDO_COMMANDS):
Команда | Описание
EUR_BEGIN | начало блочной операции
EUR_END | конец блочной операции
EUR_UNDO | сделать отмену действия (Undo) от EUR_END до EUR_BEGIN
EUR_REDO | вернуть действие назад (Redo) от EUR_BEGIN до EUR_END

Замечания

Пример

Смотрите также:
структуры


EditorSubscribeChangeEvent

главная | структуры | Editor API
Структура EditorSubscribeChangeEvent используется в функции EditorControl для подписки (или отписки) на EE_CHANGE события редактора.
struct EditorSubscribeChangeEvent
{
  size_t StructSize;
  GUID PluginId;
};

Элементы

StructSize
Это поле должно содержать размер структуры EditorSubscribeChangeEvent. Перед использованием структуры плагин должен заполнить поле.
PluginId
GUID плагина подписчика.

Замечания

Пример

Смотрите также:
структуры


ProcessEditorEventInfo

главная | структуры | Editor API
Структура ProcessEditorEventInfo содержит информацию о событии, поступающем в функцию ProcessEditorEventW.
struct ProcessEditorEventInfo
{
  size_t StructSize;
  intptr_t Event;
  void *Param;
  intptr_t EditorID;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessEditorEventInfo.
Event
Тип события.
Может быть одной из следующих величин (перечисление EDITOR_EVENTS):
Событие Описание
EE_CLOSE Одно из окон редактора закрывается.
Плагин может использовать это сообщение для освобождения внутренних структур данных. Заметьте, что несколько окон редактора могут работать одновременно.
EditorID может быть получен ранее с использованием ECTL_GETINFO команды EditorControl. Но плагин не должен вызывать EditorControl при обработке этого сообщения потому что редактор уже закрыт.
Param = NULL.
Функция ProcessEditorEventW должна вернуть 0.

Замечание для EE_CLOSE Замечание.

  • В EE_CLOSE допускается использовать только ECTL_GETINFO и ECTL_GETBOOKMARKS.
EE_READ Новый файл загружен в редактор. Плагин может использовать команды функции EditorControl для модификации считанных данных.
Param = NULL.
Функция ProcessEditorEventW должна вернуть 0.
EE_SAVE Отредактированный файл собираются сохранять. Плагин может использовать команды функции EditorControl для модификации данных перед сохранением.
Param указывает на структуру EditorSaveFile.
Функция ProcessEditorEventW должна вернуть 0.
EE_REDRAW Редактор собирается перерисовать экран.
Param указывает на константу EEREDRAW_ALL.
Функция ProcessEditorEventW должна вернуть 0.

EE_KILLFOCUS Редактор потерял фокус ввода.
Param указывает на переменную, содержащую значение EditorID редактора, теряющего фокус.
Функция ProcessEditorEventW должна вернуть 0.
EE_GOTFOCUS Редактор получил фокус ввода.
Param указывает на переменную, содержащую значение EditorID редактора, получающего фокус.
Функция ProcessEditorEventW должна вернуть 0.
EE_CHANGE В редакторе изменился текст.
Param указывает на переменную, типа EditorChange.
Функция ProcessEditorEventW должна вернуть 0.
Плагин должен подписаться на это событие, чтоб получать его.

Замечание для EE_CHANGE Замечание.

  • EditorControl вызванная из EE_CHANGE вернет FALSE.

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

  • При обработке EE_REDRAW и EE_GOTFOCUS НЕЖЕЛАТЕЛЬНО ИСПОЛЬЗОВАТЬ Info.Message, Info.Menu, Info.DialogRun, Info.ShowHelp. Вызов этих функций приводит к рекурсивному вызову EE_REDRAW и EE_GOTFOCUS соответственно.
Param
Значение указателя зависит от типа события. Смотрите описание событий для уточнения информации.
EditorID
Идентификатор редактора, вызвавшей функцию ProcessEditorEventW.

Замечания

  • EE_READ вызывается только один раз для файла.
  • EE_SAVE вызывается при каждом нажатии F2 или Shift+F2.
  • EE_REDRAW вызывается при любой перерисовке экрана (в частности, при движении курсора)
    • Смотрите также:
    Структуры, ProcessEditorEventW


ProcessEditorInputInfo

главная | структуры | Editor API
Структура ProcessEditorInputInfo содержит информацию о последнем событии от клавиатуры и мыши, поступающем в функцию ProcessEditorInputW.
struct ProcessEditorInputInfo
{
  size_t StructSize;
  INPUT_RECORD Rec;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessEditorInputInfo.
Rec
Структура INPUT_RECORD. Эта структура определена в Windows API и содержит информацию о последнем событии от клавиатуры и мыши.

Замечания

Смотрите также:
Структуры, ProcessEditorEventW, ProcessEditorInputW


Viewer API

главная

Краткое описание Viewer API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция | Описание
ProcessViewerEventW | обработка событий программы просмотра

Сервисные функции, указатели на эти функции плагины получают от Far Manager в функции SetStartupInfoW

Функция | Описание
Viewer | обеспечивает доступ к внутренней программе просмотра Far Manager
ViewerControl | позволяет запрашивать различную информацию о встроенной программе просмотра Far Manager и управлять её состоянием

Структуры

Структура | Описание
ViewerInfo | информации о текущем состоянии программы просмотра
ViewerMode | информация о режимах программы просмотра
ViewerSelect | выделение области в программе просмотра
ViewerSetMode | изменение режима программы просмотра
ViewerSetPosition | изменение текущей позиции в файле
ProcessViewerEventInfo | информация о событии в программе просмотра
Смотрите также:
Типы и определения


ProcessViewerEventW

главная | экспортируемые функции | Viewer API
Функция ProcessViewerEventW сообщает плагину о событиях, происходящих во внутренней программе просмотра Far Manager.
intptr_t WINAPI ProcessViewerEventW(
  const struct ProcessViewerEventInfo *Info
);

Параметры

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

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

Возвращаемое значение зависит от типа события, смотрите описание событий для уточнения информации.
Для необрабатываемых плагином событий, функция должна возвращать 0.
Смотрите также:
ViewerControl


Viewer

главная | сервисные функции | Viewer API
Функция Viewer позволяет открыть внутреннюю программу просмотра Far Manager.
intptr_t WINAPI Viewer (
  const wchar_t *FileName,
  const wchar_t *Title,
  intptr_t X1,
  intptr_t Y1,
  intptr_t X2,
  intptr_t Y2,
  VIEWER_FLAGS Flags,
  uintptr_t CodePage
);

Параметры

FileName
Файл для просмотра.
Title
Текстовая строка, которая будет показана вверху окна вьюера. Если этот параметр равен NULL, то используется имя файла.
X1, Y1, X2, Y2
Координаты окна вьюера. Если координата X2 или Y2 равна -1, то она будет замещена соответственно шириной или высотой экрана. Если координата X1 или Y1 меньше нуля, то считается, что она равна нулю.
Flags
Может быть комбинацией следующих значений (тип VIEWER_FLAGS):
Флаг | Описание
VF_DELETEONCLOSE | Far Manager удалит просматриваемый файл после закрытия вьюера. Если в директории, содержащей просматриваемый файл, нет других файлов, она также будет удалена. Если требуется удаление только файла, то используйте VF_DELETEONLYFILEONCLOSE. Файл не удаляется, если было произведено переключение по F6 и если существуют другие открытые вьюеры/редакторы с этим же файлом.
VF_DELETEONLYFILEONCLOSE | Аналог VF_DELETEONCLOSE, но удаляется только файл. Этот флаг имеет более низкий приоритет при обработке, чем VF_DELETEONCLOSE.
VF_DISABLEHISTORY | Запретить добавление имени файла в историю просмотра (Alt+F11). По умолчанию имя в историю добавляется.
VF_ENABLE_F6 | Разрешает переключение по F6 из вьюера в редактор.
VF_IMMEDIATERETURN | Позволяет плагину получать управление сразу же после открытия программы просмотра. Открываемая программа просмотра становится активной. Выставлять этот флаг имеет смысл только в паре с флагом VF_NONMODAL.
VF_NONMODAL | Создать немодальное окно вьюера. Если этот флаг присутствует, пользователь сможет переключаться между программой просмотра и другими окнами Far Manager. Плагин получит управление только после закрытия или ухода из открытой программы просмотра (например, пользователь нажал Ctrl+Tab). Если вам нужно, чтобы плагин получал управление сразу же после открытия программы просмотра, то используйте флаг VF_IMMEDIATERETURN.
VF_NONE | Нулевой флаг.
CodePage
Номер кодовой страницы, в которой будет открыт вьюер. Можете установить значение в CP_DEFAULT. Помимо этого можно использовать следующие определения.
Определение | Описание
CP_UNICODE | кодовая страница 1200
CP_REVERSEBOM | кодовая страница 1201
CP_DEFAULT | автоматически определить номер кодовой страницы
CP_REDETECT | переопределить номер кодовой страницы
.

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

Если флаг VF_NONMODAL отсутствует, эта функция возвращает TRUE в случае успеха или FALSE, если файл не удалось открыть. Если этот флаг присутствует, то всегда возвращается TRUE.
Смотрите также:
Editor


ViewerControl

главная | сервисные функции | Viewer API
Функция ViewerControl позволяет запрашивать различную информацию о встроенной программе просмотра Far Manager и управлять её состоянием.
intptr_t WINAPI ViewerControl(
  intptr_t ViewerID,
  enum VIEWER_CONTROL_COMMANDS Command,
  intptr_t Param1,
  void *Param2
);

Параметры

ViewerID
Идентификатор экземпляра вьюера (текущий вьюер: -1). Каждый экземпляр встроенной программы просмотра имеет уникальный идентификатор, который не повторяется в текущей сессии Far Manager.
Command
Тип команды. Может быть одним из следующих (перечисление VIEWER_CONTROL_COMMANDS):
Команда | Описание
VCTL_GETINFO | Получить информацию о программе просмотра. Param1 не используется. Param2 указывает на структуру ViewerInfo. Всегда возвращается TRUE.
VCTL_QUIT | Закрыть программу просмотра. Param1 и Param2 должны быть NULL. Всегда возвращается TRUE.
VCTL_REDRAW | Перерисовать окно программы просмотра. Param1 и Param2 должны быть NULL. В случае успеха возвращается TRUE.
VCTL_SETKEYBAR | Функция, позволяющая управлять поведением строки функциональных клавиш в программе просмотра. Param1 не используется. Param2 = NULL - восстановить предыдущее значение Param2 = -1 - обновить полосу (перерисовать) Param2 равен указателю на структуру FarSetKeyBarTitles, новое значение. В случае успеха возвращается TRUE.
VCTL_SELECT | Управление выделением. Param1 не используется. Param2 указывает на структуру ViewerSelect. Если Param2 = NULL, произойдёт сброс выделения. В случае успеха возвращается TRUE.
VCTL_SETMODE | Изменить режим работы программы просмотра. Param1 не используется. Param2 указывает на структуру ViewerSetMode. В случае успеха возвращается TRUE.
VCTL_SETPOSITION | Установить позицию в файле. Param1 не используется. Param2 указывает на структуру ViewerSetPosition. В случае успеха возвращается TRUE.
VCTL_GETFILENAME | Получить имя открытого во вьюере файла. Param1 - размер буфера в символах, который выделил плагин для данных. Param2 указывает на буфер, выделенный плагином, куда будет помещено имя файла. Функция возвращает требуемый размер буфера в символах, с учетом завершающего нуля. Если Param2 = NULL или Param1 меньше требуемого размера, функция просто вернет необходимый размер буфера.
Param1
Указывает на параметры1 команды. Смотрите описание Command.
Param2
Указывает на параметры2 команды. Смотрите описание Command.

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

Смотрите описание конкретной команды.

Примечание

VCTL_QUIT в информационной панели и панели быстрого просмотра не приводит к закрытию программы просмотра.
Смотрите также:
Сервисные функции, ViewerInfo, ViewerSetPosition, ViewerSelect


ViewerInfo

главная | структуры | Viewer API
Структура ViewerInfo используется для получения информации о текущем состоянии программы просмотра Far Manager.
struct ViewerInfo
{
  size_t StructSize;
  intptr_t ViewerID;
  intptr_t TabSize;
  struct ViewerMode CurMode;
  __int64 FileSize;
  __int64 FilePos;
  __int64 LeftPos;
  VIEWER_OPTIONS Options;
  intptr_t WindowSizeX;
  intptr_t WindowSizeY;
};

Элементы

StructSize
Это поле должно содержать размер структуры ViewerInfo. Перед использованием структуры плагин должен заполнить поле.
ViewerID
Идентификатор экземпляра программы просмотра. Каждый экземпляр программы просмотра имеет уникальный идентификатор, который не повторяется в текущей сессии Far Manager.
TabSize
Размер табуляции.
CurMode
Переменная типа ViewerMode - дополнительная информация о режиме программы просмотра.
FileSize
Размер файла.
FilePos
Текущая позиция в файле (абсолютное смещение в байтах).
LeftPos
Позиция левой границы просматриваемого текста в окне программы просмотра.
Options
Состояние настроек программы просмотра. Может быть комбинацией из следующих флагов (перечисление VIEWER_OPTIONS):
Флаг | Описание
VOPT_SAVEFILEPOSITION | "Сохранять позицию файла" ("Save file position")
VOPT_AUTODETECTCODEPAGE | "Автоопределение кодовой страницы" ("Autodetect code page")
VOPT_NONE | Нулевой флаг.
VOPT_SHOWTITLEBAR | Показана статусная строка.
VOPT_SHOWKEYBAR | Показана линейка функциональных клавиш.
VOPT_SHOWSCROLLBAR | Показана полоса прокрутки.
VOPT_QUICKVIEW | Просмотрщик работает в режиме быстрого просмотра (Quick View).
WindowSizeX, WindowSizeY
Ширина и высота окна программы просмотра.
Смотрите также:
Структуры, ViewerControl, ViewerMode


ViewerMode

главная | структуры | Viewer API
Структура ViewerMode используется для получения дополнительной информации о текущем состоянии программы просмотра Far Manager.
struct ViewerMode
{
  uintptr_t CodePage;
  VIEWER_MODE_FLAGS Flags;
  enum VIEWER_MODE_TYPE ViewMode;
};

Элементы

CodePage
Кодовая страница символов.
Flags
Комбинация следующих значений (тип VIEWER_MODE_FLAGS).
Флаг | Описание
VMF_WRAP | Включена свёртка строк.
VMF_WORDWRAP | При свертке используется перенос строк по словам, а не буквам.
ViewMode
Режим программы просмотра, комбинация следующих значений (перечисление VIEWER_MODE_TYPE).
Тип | Описание
VMT_TEXT | Текстовый.
VMT_HEX | Hex-режим.
VMT_DUMP | Dump-режим.
Смотрите также:
Структуры, ViewerControl, ViewerInfo


ViewerSelect

главная | структуры | Viewer API
Структура ViewerSelect используется для выделения области в программе просмотра Far Manager.
struct ViewerSelect
{
  size_t StructSize;
  __int64 BlockStartPos;
  __int64 BlockLen;
};

Элементы

StructSize
Это поле должно содержать размер структуры ViewerSelect. Перед использованием структуры плагин должен заполнить поле.
BlockStartPos
Начало выделения - в символах, а не в байтах. Это означает, что если программа просмотра находится в режиме Unicode, то BlockStartPos будет равно (позиция в файле в байтах / 2).
BlockLen
Длина выделения в символах.
Смотрите также:
Структуры, ViewerControl


ViewerSetMode

главная | структуры | Viewer API
Структура ViewerSetMode используется для изменения режимов работы программы просмотра Far Manager.
struct ViewerSetMode
{
  size_t StructSize;
  enum VIEWER_SETMODE_TYPES Type;
  union
  {
    intptr_t iParam;
    wchar_t *wszParam;
  }
#ifndef __cplusplus
  Param
#endif
  ;
  VIEWER_SETMODEFLAGS_TYPES Flags;
};

Элементы

StructSize
Это поле должно содержать размер структуры ViewerSetMode. Перед использованием структуры плагин должен заполнить поле.
Type
Тип режима. Может быть одним из следующих (перечисление VIEWER_SETMODE_TYPES):
Тип | Описание
VSMT_VIEWMODE Режим представления текста: iParam равен значению перечисления VIEWER_MODE_TYPE:
Режим | Описание
VMT_TEXT | установить текстовый режим
VMT_HEX | установить hex-режим
VMT_DUMP | установить dump-режим
VSMT_WRAP | Перенос строк: iParam = 1 - включить перенос, iParam = 0 - выключить.
VSMT_WORDWRAP | Тип свёртки: iParam = 1 - использовать перенос строк по словам, iParam = 0 - по буквам.
iParam
Содержит число, см. описание по конкретному типу режима.
wszParam
Указатель на строку, оканчивающуюся нулём, см. описание по конкретному типу режима.
Flags
Дополнительные флаги (тип VIEWER_SETMODEFLAGS_TYPES):
Режим | Описание
VSMFL_REDRAW | После применения "режима" перерисовать экран. В противном случае после установки режимов воспользоваться командой VCTL_REDRAW.
Reserved
Не используется, зарезервировано для будущего использования. Должно быть установлено в 0.

Замечания

Смотрите также:
структуры


ViewerSetPosition

главная | структуры | Viewer API
Структура ViewerSetPosition используется для изменения текущей позиции в файле, открытом в программе просмотра Far Manager.
struct ViewerSetPosition
{
  size_t StructSize;
  VIEWER_SETPOS_FLAGS Flags;
  __int64 StartPos;
  __int64 LeftPos;
};

Элементы

StructSize
Это поле должно содержать размер структуры ViewerSetPosition. Перед использованием структуры плагин должен заполнить поле.
Flags
Флаги, уточняющие процесс изменения позиции. Может быть комбинация из (тип VIEWER_SETPOS_FLAGS):
Флаг | Описание
VSP_NOREDRAW | не перерисовывать экран
VSP_PERCENT | смещение указано не в байтах, а в процентах
VSP_RELATIVE | смещение относительное, а не абсолютное
VSP_NORETNEWPOS | не возвращать реальную позицию (см. StartPos)
StartPos
Новая позиция в файле (или в байтах, или в процентах - зависит от VSP_PERCENT, может быть отрицательной - если указан флаг VSP_RELATIVE). В программе просмотра в общем случае невозможно установить точную позицию в файле, поэтому новая реальная позиция может и не совпадать со StartPos. Для того, чтобы узнать, чему же равна новая позиция в файле, её значение записывается в StartPos (если не указан флаг VSP_NORETNEWPOS). Используйте это свойство для контроля, если хотите.
LeftPos
Позиция левой границы просматриваемого текста в окне программы просмотра.
Смотрите также:
Структуры, ViewerControl,


ProcessViewerEventInfo

главная | структуры | Viewer API
Структура ProcessViewerEventInfo содержит информацию о событии, поступающем в функцию ProcessViewerEventW.
struct ProcessViewerEventInfo
{
  size_t StructSize;
  intptr_t Event;
  void *Param;
  intptr_t ViewerID;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessViewerEventInfo.
Event
Тип события.
Может быть одной из следующих величин (перечисление VIEWER_EVENTS):
Событие | Описание
VE_CLOSE | Одно из окон программы просмотра закрывается. Плагин может использовать это сообщение для освобождения внутренних структур данных. Заметьте, что несколько окон программы просмотра могут работать одновременно. Параметр Param указывает на переменную, содержащую значение ViewerID закрываемой программы просмотра. ViewerID может быть получен ранее с использованием VCTL_GETINFO команды ViewerControl. Но плагин не должен вызывать ViewerControl при обработке этого сообщения, потому что программа просмотра уже закрыта. Функция ProcessViewerEventW должна вернуть 0.
VE_READ | Новый файл загружен в программу просмотра. Param = NULL. Функция ProcessViewerEventW должна вернуть 0.
VE_KILLFOCUS | Программа просмотра потеряла фокус ввода. Param указывает на переменную, содержащую значение ViewerID вьюера, теряющего фокус. Функция ProcessViewerEventW должна вернуть 0.
VE_GOTFOCUS | Программа просмотра получила фокус ввода. Param указывает на переменную, содержащую значение ViewerID вьюера, получающего фокус. Функция ProcessViewerEventW должна вернуть 0.

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

  • При обработке VE_GOTFOCUS НЕЖЕЛАТЕЛЬНО ИСПОЛЬЗОВАТЬ Info.Message, Info.Menu, Info.DialogRun, Info.ShowHelp. Вызов этих функций приводит к рекурсивному вызову VE_GOTFOCUS.
Param
Значение указателя зависит от типа события. Смотрите описание событий для уточнения информации.
ViewerID
Идентификатор внутренней программы просмотра, вызвавшей функцию ProcessViewerEventW.

Замечания

  • VE_READ вызывается только один раз для файла.
    • Смотрите также:
    Структуры, ProcessViewerEventW


Dialog API

главная

Краткое описание Dialog API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция | Описание
ProcessDialogEventW | обработка событий диалога

Сервисные функции, указатели на эти функции плагины получают от Far Manager в функции SetStartupInfoW

Функция | Описание
DefDlgProc | вызов стандартной функции обработки диалога
DialogFree | освобождает память, выделенную под внутренние структуры диалога функцией DialogInit
DialogInit | создаёт (инициализирует) диалог
DialogRun | показывает диалог созданный функцией DialogInit
SendDlgMessage | посылка сообщения функции обработки диалога

Пользовательская функция обработки диалога

Функция | Описание
DlgProc | шаблон функции обработки диалога, используется в DialogInit

Структуры

Структура | Описание
DialogInfo | информация о диалоге
FarDialogEvent | информация о событии диалога
FarDialogItem | элемент диалога
FarDialogItemColors | изменение цветовых атрибутов элементов диалога
FarDialogItemData | передача данных элементу диалога
FarGetDialogItem | запрос элемента диалога
FarList | список DI_LISTBOX
FarListDelete | параметры удаления элементов из DI_COMBOBOX и DI_LISTBOX
FarListFind | поиск элемента из DI_COMBOBOX и DI_LISTBOX
FarListGetItem | получение одного элемента списка из DI_COMBOBOX и DI_LISTBOX
FarListInfo | получить информацию о списках DI_COMBOBOX и DI_LISTBOX
FarListInsert | вставка элемента в DI_COMBOBOX и DI_LISTBOX
FarListItem | элемент списка
FarListItemData | ассоциация данных с элементом списка
FarListPos | позиционирование в списке
FarListTitles | установка/получение заголовков для списка
FarListUpdate | данные для обновления элемента списка
OpenDlgPluginData | информация о вызванном плагине из диалога
ProcessDialogEventInfo | информацию о событии диалога

Элементы диалога

Элемент | Описание
DI_BUTTON | кнопка (Push Button)
DI_CHECKBOX | контрольный переключатель (Check Box)
DI_COMBOBOX | комбинированный список
DI_DOUBLEBOX | двойная рамка
DI_EDIT | поле ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_LISTBOX | окно списка
DI_PSWEDIT | поле ввода пароля
DI_RADIOBUTTON | селекторная кнопка (Radio Button)
DI_SINGLEBOX | одиночная рамка
DI_TEXT | текстовая строка
DI_USERCONTROL | элемент управления, определяемый программистом
DI_VTEXT | вертикальная текстовая строка

Флаги элементов диалога

Флаг | Описание
DIF_3STATE | элемент DI_CHECKBOX будет иметь 3 состояния
DIF_BOXCOLOR | текст элемента будет иметь цвет рамок
DIF_BTNNOCLOSE | для кнопки - не завершать диалог
DIF_CENTERGROUP | центрирование группы элементов
DIF_CENTERTEXT | центрирование текста в статических элементах
DIF_DEFAULTBUTTON | элемент является "элементом по умолчанию"
DIF_DISABLE | элемент является недоступным
DIF_DROPDOWNLIST | задаёт стиль не редактируемого списка
DIF_EDITEXPAND | "расширение" переменных среды в строках ввода
DIF_EDITOR | последовательно определённые поля ввода
DIF_EDITPATH | строка ввода будет содержать имена реальных файловых объектов
DIF_EDITPATHEXEC | ограничивает автодополнение только исполнимыми файлами
DIF_FOCUS | элемент получает клавиатурный фокус ввода
DIF_GROUP | группировка RadioButtons
DIF_HIDDEN | элемент диалога не виден
DIF_HISTORY | позволяет вести историю редактирования для поля ввода
DIF_LEFTTEXT | выравнивать заголовки рамок по левому краю
DIF_LISTAUTOHIGHLIGHT | автоматическое назначение горячих клавиш в списке
DIF_LISTNOAMPERSAND | позволяет показывать горячие клавиши в списке
DIF_LISTNOBOX | показывать список без рамки
DIF_LISTNOCLOSE | не закрывать диалог при выборе элемента из списка
DIF_LISTTRACKMOUSE | реагировать на движение мыши в списке
DIF_LISTTRACKMOUSEINFOCUS | реагировать на движение мыши в списке только если элемент находится в фокусе
DIF_LISTWRAPMODE | "заворачивает" список при навигации по списку
DIF_MANUALADDHISTORY | обработчик диалога сам будет добавлять строки в историю
DIF_MASKEDIT | задаёт маску в строках ввода
DIF_MOVESELECT | изменить выбор внутри группы radio-кнопок при изменении фокуса ввода
DIF_NOAUTOCOMPLETE | отключить автодополнение для строк редактирования
DIF_NOBRACKETS | показывает заголовок кнопки без скобок
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_NONE | нулевой флаг
DIF_READONLY | переводит строки редактирования в состояние "только для чтения"
DIF_RIGHTTEXT | выравнивать текст по правому краю
DIF_SELECTONENTRY | при получении фокуса ввода содержимое строки редактирования будет выделяться
DIF_SEPARATOR | текстовая строка отображается как разделитель диалога (одинарная горизонтальная линия)
DIF_SEPARATOR2 | текстовая строка отображается как разделитель диалога (двойная горизонтальная линия)
DIF_SEPARATORUSER | текстовая строка отображается как разделитель диалога (формат линии задается плагином)
DIF_SETSHIELD | размещает на кнопке аналог "иконки со щитом" Microsoft UAC
DIF_SHOWAMPERSAND | показывать в текстовой строке амперсанд не используя его для определения горячей клавиши
DIF_USELASTHISTORY | начальное значение берётся из истории
DIF_WORDWRAP | усекает очередное слово, если оно не вмещается по ширине элемента

События

Событие | Описание
DN_BTNCLICK | изменилось состояние кнопок
DN_CLOSE | сигнал о закрытии диалога
DN_CONTROLINPUT | пользователь нажал клавишу или кликнул клавишей мыши
DN_CTLCOLORDIALOG | запрос цвета на прорисовку подложки окна диалога
DN_CTLCOLORDLGITEM | запрос цвета для конкретного элемента диалога
DN_CTLCOLORDLGLIST | запрос цвета на отрисовку списка
DN_DRAGGED | информация о перемещениях диалога
DN_DRAWDIALOG | перед прорисовкой всего диалога
DN_DRAWDIALOGDONE | прорисовка диалога закончена
DN_DRAWDLGITEM | перед отрисовкой элемента диалога
DN_DRAWDLGITEMDONE | после отрисовки элемента диалога
DN_DROPDOWNOPENED | изменение состояние combobox и history (открыт/закрыт)
DN_EDITCHANGE | изменение состояния элемента редактирования
DN_ENTERIDLE | холостое состояние
DN_GETVALUE | запрос на изменение информации для макросов
DN_GOTFOCUS | элемент диалога получил клавиатурный фокус ввода
DN_HELP | вывод темы помощи
DN_HOTKEY | пользователь нажал Alt-буква
DN_INITDIALOG | инициализация диалога
DN_INPUT | возможность перехватить сообщение мыши до его обработки ядром
DN_KILLFOCUS | перед потерей клавиатурного фокуса элементом диалога
DN_LISTCHANGE | изменение состояния элемента списка
DN_LISTHOTKEY | выбор элемента списка с помощью горячей клавиши
DN_RESIZECONSOLE | нотификационное сообщение "Изменились размеры консоли"

Сообщения

Сообщение | Описание
DM_ADDHISTORY | добавить строку в историю
DM_CLOSE | сигнал на закрытие диалога
DM_EDITUNCHANGEDFLAG | управление состоянием "неизмененный текст" строки редактирования
DM_ENABLE | переключение/получение состояния Enable/Disable элемента
DM_ENABLEREDRAW | отключение/включение перерисовки всего диалога
DM_GETCHECK | получить состояние элементов DI_CHECKBOX и DI_RADIOBUTTON
DM_GETCOMBOBOXEVENT | получить состояние посылки событий для открытого combo box
DM_GETCONSTTEXTPTR | получить указатель на внутренний буфер Far Manager, содержащий строку ввода
DM_GETCURSORPOS | получить позицию курсора
DM_GETCURSORSIZE | получить размеры курсора
DM_GETDIALOGINFO | получить информацию о диалоге Far Manager или другого плагина
DM_GETDIALOGTITLE | получить заголовок диалога
DM_GETDLGDATA | получить данные, ассоциированные с диалогом
DM_GETDLGITEM | получение полной информации о элементе
DM_GETDLGITEMSHORT | получение информации о элементе
DM_GETDLGRECT | получить координаты диалогового окна
DM_GETDROPDOWNOPENED | определить - есть ли в диалоге раскрытый комбобокс или история
DM_GETEDITPOSITION | получить позицию курсора в строках ввода
DM_GETFOCUS | получить индекс элемента, имеющего фокус ввода
DM_GETITEMDATA | получить данные, ассоциированные с элементом диалога
DM_GETITEMPOSITION | получить позицию и размер элемента
DM_GETSELECTION | получить параметры выделения в строках редактирования диалога
DM_GETTEXT | получение строки ввода или заголовка элементов
DM_KEY | передать массив клавиш обработчику диалога
DM_LISTADD | добавить в список новый элемент
DM_LISTADDSTR | добавить в список строку
DM_LISTDELETE | удалить элементы списка
DM_LISTFINDSTRING | найти элемент списка
DM_LISTGETCURPOS | получить текущую позицию в списке
DM_LISTGETDATA | получить данные, ассоциированные с элементом списка
DM_LISTGETDATASIZE | получить размер данных, ассоциированных с элементом списка
DM_LISTGETITEM | получить один элемент списка
DM_LISTGETTITLES | получить заголовки списка
DM_LISTINFO | получить информацию о списке
DM_LISTINSERT | вставить элемент в список
DM_LISTSET | добавление элементов в список с удалением предыдущих элементов
DM_LISTSETCURPOS | установить позицию в списке
DM_LISTSETDATA | установить данные, ассоциированные с элементом списка
DM_LISTSETTITLES | установить заголовки списка
DM_LISTSORT | сортировать элементы списка
DM_LISTUPDATE | обновить элемент в списке
DM_MOVEDIALOG | переместить диалог
DM_REDRAW | перерисовать весь диалог
DM_RESIZEDIALOG | изменить размеры диалога
DM_SET3STATE | изменить стиль DI_CHECKBOX
DM_SETCHECK | установить состояние элементов DI_CHECKBOX и DI_RADIOBUTTON
DM_SETCOMBOBOXEVENT | включить или отключить посылку сообщений DN_INPUT или DN_CONTROLINPUT для открытого combo box
DM_SETCURSORPOS | позиционировать курсор
DM_SETCURSORSIZE | установить размер курсора
DM_SETDLGDATA | ассоциировать данные с диалогом
DM_SETDLGITEM | для изменения информации о заданном элементе
DM_SETDLGITEMSHORT | для изменения информации о заданном элементе
DM_SETDROPDOWNOPENED | программное раскрытие/закрытие комбобокса или истории
DM_SETEDITPOSITION | управление позицией курсора в строках ввода
DM_SETFOCUS | устанавливает клавиатурный фокус на заданный элемент диалога
DM_SETHISTORY | управление наличием истории.
DM_SETINPUTNOTIFY | управление первичным событием мыши
DM_SETITEMDATA | ассоциировать данные с элементом диалога
DM_SETITEMPOSITION | изменить позицию элемента
DM_SETMAXTEXTLENGTH | задать максимальный размер редактируемой строки или заголовка элемента
DM_SETSELECTION | выделить блок в строках редактирования диалога
DM_SETTEXT | установить строку ввода или заголовок элемента
DM_SETTEXTPTR | установить строку ввода или заголовок элемента
DM_SHOWDIALOG | показать/спрятать диалоговое окно
DM_SHOWITEM | показать/спрятать элемент диалога
DM_USER | отправная точка для пользовательских сообщений
Смотрите также:
Типы и определения


ProcessDialogEventW

главная | экспортируемые функции | Dialog API
Функция ProcessDialogEventW сообщает плагину о событиях, происходящих в диалоге Far Manager.
intptr_t WINAPI ProcessDialogEventW(
  const struct ProcessDialogEventInfo *Info
);

Параметры

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

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

  • 1 - плагин самостоятельно обработал событие. Переменная ProcessDialogEventInfo.FarDialogEvent.Result будет использована в качестве возвращаемого значения обработчика диалога.
  • 0 - продолжить обработку события.

Замечания

Смотрите также:
FarDialogEvent, события, Dialog API


DefDlgProc

главная | сервисные функции | Dialog API
Функция DefDlgProc позволяет вызвать стандартную (внутреннюю) функцию обработки диалога.
intptr_t WINAPI DefDlgProc(
  HANDLE hDlg,
  intptr_t Msg,
  intptr_t Param1,
  void *Param2
);

Параметры

hDlg
Указатель на диалог.
Msg
Одно из сообщений или событий.
Param1
Параметр 1.
Param2
Параметр 2.

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

Значение, возвращаемое функцией DefDlgProc зависит от параметра Msg.

Замечания

Пример

Фрагмент обработчика диалога игры Reversi:
intptr_t ReversiDialogProc(HANDLE hDlg,intptr_t Msg,intptr_t Param1,void *Param2)
{
  ...
  return Info.DefDlgProc(hDlg,Msg,Param1,Param2);
}


DialogFree

главная | сервисные функции | Dialog API
Функция DialogFree освобождает память занятую при создании диалога функцией DialogInit.
void WINAPI DialogFree(
  HANDLE hDlg
);

Параметры

hDlg
Описатель диалога созданный функцией DialogInit.

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

Функция не возвращает значение.

Замечания

Пример

См. пример в функции DialogInit.
Смотрите также:
DialogInit, DefDlgProc, SendDlgMessage, сервисные функции, Message


DialogInit

главная | сервисные функции | Dialog API
Функция DialogInit инициализирует диалог, для последующего показа на экране функцией DialogRun.
HANDLE WINAPI DialogInit(
  const GUID* PluginId,
  const GUID* Id,
  intptr_t X1,
  intptr_t Y1,
  intptr_t X2,
  intptr_t Y2,
  const wchar_t *HelpTopic,
  const struct FarDialogItem *Item,
  size_t ItemsNumber,
  intptr_t Reserved,
  FARDIALOGFLAGS Flags,
  FARWINDOWPROC DlgProc,
  void *Param
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
Id
Указатель на GUID диалога. GUID должен быть уникальным.
X1, Y1, X2, Y2
Геометрия диалога. Задайте эти координаты непосредственно или воспользуйтесь формулой "Width x Height" - для этого установите X1 и Y1 в -1, при этом X2 - ширина и Y2 - высота диалога. В последнем случае при выводе на экран диалог будет автоматически центрироваться. Параметры X2 и Y2 не могут быть меньше нуля.
HelpTopic
Тема подсказки связанная с данным диалогом. Если подсказка не используется, то установите этот параметр в NULL.
Item
Указатель на массив структур FarDialogItem. Каждая структура описывает пункт диалога.
ItemsNumber
Количество элементов массива FarDialogItem.
Reserved
Зарезервировано. Должно быть рано 0.
Flags
Набор флагов, уточняющих некоторые параметры диалога. Может быть комбинацией следующих значений (тип FARDIALOGFLAGS):
Флаг | Описание
FDLG_WARNING | Задаёт для диалога цветовую схему "Предупреждение".
FDLG_SMALLDIALOG | Позволяет создавать диалоги с уменьшенным размером рамки. Для таких диалогов при отрисовке разделительных линий (DIF_SEPARATOR) предполагается нулевой отступ между границей диалога и окружающей его двойной рамкой.
FDLG_NODRAWSHADOW | Не рисовать тень диалога.
FDLG_NODRAWPANEL | Не рисовать поле диалога.
FDLG_KEEPCONSOLETITLE | Отключить установку заголовка консоли Far Manager по заголовку диалога.
FDLG_NONE | Нулевой флаг.
DlgProc
Указатель на функцию-обработчик диалогового окна типа FARWINDOWPROC.
Param
Данные, которые обработчик диалога получит в сообщении DN_INITDIALOG

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

Функция возвращает созданный описатель диалога, либо INVALID_HANDLE_VALUE в случае ошибки.
После закрытия диалога и получения нужных данных, созданный описатель диалога необходимо освободить в функции DialogFree.

Замечания

  1. Массив элементов Item не корректируется в процессе работы пользователя с этим диалогом, он необходим только для построения самого диалога. Far Manager перед созданием диалога преобразует элементы Item во внутреннее представление.

Пример

// {B66C436D-E657-419C-86D3-6834B9ACF3D2}
DEFINE_GUID(MainGuid, 0xb66c436d, 0xe657, 0x419c, 0x86, 0xd3, 0x68, 0x34, 0xb9, 0xac, 0xf3, 0xd2);

// {F6BFA9FC-B2B9-4354-AE47-8FECF59FE65F}
DEFINE_GUID(DialogGuid, 0xf6bfa9fc, 0xb2b9, 0x4354, 0xae, 0x47, 0x8f, 0xec, 0xf5, 0x9f, 0xe6, 0x5f);

HANDLE hDlg = Info.DialogInit(&MainGuid,&DialogGuid, -1,-1,76,10, L"TempCfg",DialogItems,sizeof(DialogItems)/sizeof(DialogItems[0]), 0,0,DlgProc,0);
if (hDlg != INVALID_HANDLE_VALUE)
{
  int ExitCode=Info.DialogRun(hDlg);
  if (ExitCode == 1) // вышли по Ок
  {
    // различные вызовы Info.SendDlgMessage() для получения нужных выходных данных из диалога
  }
  Info.DialogFree(hDlg);
  if (ExitCode == 1)
    return(TRUE);
}
return(FALSE);
Смотрите также:
DialogRun, DefDlgProc, SendDlgMessage, сервисные функции, Message


DialogRun

главная | сервисные функции | Dialog API
Функция DialogRun выводит на экран диалог созданный функцией DialogInit.
intptr_t WINAPI DialogRun(
  HANDLE hDlg
);

Параметры

hDlg
Описатель диалога созданный функцией DialogInit.

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

Эта функция возвращает -1, если пользователь прервал диалог, или номер выбранного диалогового пункта (номер элемента массива Item).

Замечания

Эту функцию плагин может вызывать неограниченное количество раз, разумеется между DialogInit и DialogFree.

Пример

См. пример в функции DialogInit.
Смотрите также:
DialogInit, DefDlgProc, SendDlgMessage, Message


SendDlgMessage

главная | сервисные функции | Dialog API
Функция SendDlgMessage позволяет послать сообщение функции-обработчику диалога.
intptr_t WINAPI SendDlgMessage(
  HANDLE hDlg,
  intptr_t Msg,
  intptr_t Param1,
  void *Param2
);

Параметры

hDlg
Указатель на диалог.
Msg
Одно из сообщений или событий.
Param1
Параметр 1.
Param2
Параметр 2.

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

Значение, возвращаемое функцией SendDlgMessage зависит от параметра Msg.

Замечания

Пример

Фрагмент обработчика диалога игры Reversi:
intptr_t WINAPI ReversiDialogProc(HANDLE hDlg,intptr_t Msg,intptr_t Param1,void *Param2)
{
...
    case DN_INITDIALOG:
      // получим информацию об элементе
      Info.SendDlgMessage(hDlg,DM_GETDLGITEM,75,(void*)&DialogItem);
      ListItems=DialogItem.ListItems->Items;
      ...
      NewGame(hDlg);
      return FALSE;
...
}
Смотрите также:
DialogInit, DefDlgProc


DlgProc

главная | типы и определения
В плагине обработку событий и посылку сообщений для диалога должна выполнять Функция-Обработчик диалога. Эта функция имеет четыре параметра: дескриптор диалога, описывающий сам диалог, собственно сообщение или событие и пара параметров.

Здесь представлен синтаксис функции обработки диалога, каким он должен быть в плагине.

intptr_t WINAPI DlgProc(
  HANDLE hDlg,
  intptr_t Msg,
  intptr_t Param1,
  void *Param2
);

Параметры

hDlg
Дескриптор диалога
Msg
Одно из сообщений или событий.
Param1
Параметр 1
Param2
Параметр 2

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

Значение, возвращаемое функцией DlgProc зависит от параметра Msg.

Замечания

Смотрите также:
DefDlgProc, DialogInit, SendDlgMessage, Сообщения Dialog API, События Dialog API


DialogInfo

главная | структуры | Dialog API
Структура DialogInfo позволяет узнать информацию о диалоге, является параметром в DM_GETDIALOGINFO.
struct DialogInfo
{
  size_t StructSize;
  GUID Id;
  GUID Owner;
};

Элементы

StructSize
Это поле должно содержать размер структуры DialogInfo. Перед использованием структуры плагин должен заполнить поле.
Id
Уникальный идентификатор диалога.
Owner
Поле содержит GUID плагина, создавшего диалог или GUID Far Manager, для созданного им диалога.

Замечания

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


FarDialogEvent

главная | структуры | Dialog API
Структура FarDialogEvent содержит информацию о событии, поступающем в функцию ProcessDialogEventW.
struct FarDialogEvent
{
  size_t StructSize;
  HANDLE hDlg;
  intptr_t Msg;
  intptr_t Param1;
  void *Param2;
  intptr_t Result;
};

Элементы

StructSize
Это поле содержит размер структуры FarDialogEvent.
hDlg
Указатель на диалог.
Msg
Одно из сообщений или событий.
Param1
Параметр 1.
Param2
Параметр 2.
Result
Значение, возвращаемое обработчиком диалога.

Замечания

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


FarDialogItem

главная | структуры | Dialog API
Структура FarDialogItem описывает один элемент диалога. Массив этих структур передаётся в функции DialogInit.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type;
  intptr_t X1,Y1,X2,Y2;
  union
  {
    intptr_t Selected;
    struct FarList *ListItems;
    struct FAR_CHAR_INFO *VBuf;
    intptr_t Reserved0;
  }
#ifndef __cplusplus
  Param
#endif
  ;
  const wchar_t *History;
  const wchar_t *Mask;
  FARDIALOGITEMFLAGS Flags;
  const wchar_t *Data;
  size_t MaxLength;
  intptr_t UserData;
  intptr_t Reserved[2];
};

Элементы

Type
Тип элемента диалога. Может принимать одно значений (перечисление FARDIALOGITEMTYPES) указанных в "Элементы диалога"
X1,Y1,X2,Y2
Координаты, определяющие позицию элемента, относительно диалогового окна (начало отсчёта - левый верхний угол диалогового окна, (0,0)). Более подробно о координатах см. описание каждого элемента диалога.
Selected
Определяет состояние элементов DI_CHECKBOX и DI_RADIOBUTTON диалога - включён/выключен.
ListItems
Указатель на структуру FarList, описывающую список для элементов DI_COMBOBOX и DI_LISTBOX.
VBuf
Массив структур FAR_CHAR_INFO, описывающую виртуальный буфер для элемента DI_USERCONTROL.
Reserved0
Размер этого параметра всегда равен размеру объединения Param, что позволяет использовать этот параметр для платформенно-независимой инициализации.
History
Адрес текстовой строки, которая будет использоваться как внутреннее название истории редактирования (см. также флаг DIF_HISTORY).
Mask
Адрес текстовой строки, с маской ввода для элемента DI_FIXEDIT или маска, описывающая разделительную линию для элемента DI_TEXT или DI_VTEXT.
Flags
Комбинация значений (тип FARDIALOGITEMFLAGS), перечисленных в разделе "Флаги элементов диалога".
Data
Строка, используемая для инициализации элемента диалога. Подробности использования в описаниях типов элементов диалога.
MaxLength
Устанавливает максимальный размер строки Data, без завершающего '\0'. Плагин не сможет работать с данными в строке Data за пределами MaxLength.
Если MaxLength = 0, то такого ограничения нет.
UserData
Значение, связанное с элементом диалога. Данные можно получить с помощью DM_GETITEMDATA.
Reserved
Два поля зарезервированы для будущего использования, должны быть установлены в 0.

Замечания

Смотрите также:
Флаги элементов диалога, Элементы диалога


FarDialogItemColors

главная | структуры | Dialog API
Структура FarDialogItemColors используется в Диалог АПИ для изменения цветовых атрибутов элементов.
struct FarDialogItemColors
{
  size_t StructSize;
  unsigned __int64 Flags;
  size_t ColorsCount;
  struct FarColor *Colors;
};

Элементы

StructSize
Это поле содержит размер структуры FarDialogItemColors.
Flags
Флаги, поле используется плагином.
ColorsCount
Количество элементов в массиве Colors.
Colors
Установленный или устанавливаемый цвет, массив структур типа FarColor.

Замечания

Пример

Пример из плагина "PicViewAdv".
case DN_CTLCOLORDLGITEM:
  if(Param1==0)
  {
    FarColor Color;
    struct FarDialogItemColors *Colors=(FarDialogItemColors*)Param2;
    if(DlgParams->ShowingIn==VIEWER)
    {
      Info.AdvControl(&MainGuid,ACTL_GETCOLOR,COL_VIEWERSTATUS,&Color);
      Colors->Colors[0] = Colors->Colors[2] = Colors->Colors[3] = Color;
      Info.AdvControl(&MainGuid,ACTL_GETCOLOR,COL_VIEWERTEXT,&Color);
      Colors->Colors[1] = Color;
    }
  }
  break;
Смотрите также:
DN_CTLCOLORDLGITEM, DN_CTLCOLORDLGLIST


FarDialogItemData

главная | структуры | Dialog API
Структура FarDialogItemData описывает данные, передаваемые (получаемые) элементу(ом) диалога сообщением DM_SETTEXT (DM_GETTEXT) в качестве параметра Param2.
struct FarDialogItemData
{
  size_t StructSize;
  size_t PtrLength;
  wchar_t *PtrData;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarDialogItemData. Перед использованием структуры плагин должен заполнить поле.
PtrLength
Размер данных PtrData в символах, без завершающего символа конца строки - '\0'.
PtrData
Указатель на передаваемые данные.

Замечания

Смотрите также:
DM_GETTEXT, DM_SETTEXT


FarGetDialogItem

главная | структуры | Dialog API
Структура FarGetDialogItem используется для запроса информации об элементе диалога в сообщении DM_GETDLGITEM.
struct FarGetDialogItem
{
  size_t StructSize;
  size_t Size;
  struct FarDialogItem *Item;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarGetDialogItem. Перед использованием структуры плагин должен заполнить поле.
Size
Размер поля Item в байтах.
Items
Буфер, выделенный плагином для размещения запрашиваемого элемента диалога FarDialogItem.

Замечания

Выделенный буфер должен быть освобожден плагином.


FarList

главная | структуры | Dialog API
Структура FarList описывает список для элементов диалога DI_LISTBOX и DI_COMBOBOX.
struct FarList
{
  size_t StructSize;
  size_t ItemsNumber;
  struct FarListItem *Items;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarList. Перед использованием структуры плагин должен заполнить поле.
ItemsNumber
Количество элементов списка Items.
Items
Указатель на массив элементов списка FarListItem.

Замечания

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


FarListDelete

главная | структуры | Dialog API
Структура FarListDelete задаёт параметры для удаления элементов из DI_LISTBOX и DI_COMBOBOX.
struct FarListDelete
{
  size_t StructSize;
  intptr_t StartIndex;
  intptr_t Count;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListDelete. Перед использованием структуры плагин должен заполнить поле.
StartIndex
Индекс первого удаляемого элемента списка.
Count
Количество удаляемых элементов списка.

Замечания

Если значение Count меньше или равно 0, то будет удалён весь список.
Смотрите также:
DM_LISTDELETE


FarListFind

главная | структуры | Dialog API
Структура FarListFind задаёт параметры для поиска элемента в DI_LISTBOX и DI_COMBOBOX.
struct FarListFind
{
  size_t StructSize;
  intptr_t StartIndex;
  const wchar_t *Pattern;
  FARLISTFINDFLAGS Flags;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListFind. Перед использованием структуры плагин должен заполнить поле.
StartIndex
Индекс элемента, с которого начинается поиск.
Pattern
Шаблон для поиска по правилам функции FSF.ProcessName.
Flags
Дополнительные флаги. Одно из следующих значений (тип FARLISTFINDFLAGS):
Флаг | Описание
LIFIND_EXACTMATCH | Поле Pattern не является шаблоном - рассматривать как обычную подстроку поиска.
LIFIND_NONE | Нулевой флаг.

Замечания

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


FarListGetItem

главная | структуры | Dialog API
Структура FarListGetItem описывает запрашиваемый элемент из списков диалога (DI_LISTBOX или DI_COMBOBOX).
struct FarListGetItem
{
  size_t StructSize;
  intptr_t ItemIndex;
  struct FarListItem Item;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListGetItem. Перед использованием структуры плагин должен заполнить поле.
ItemIndex
Индекс элемента из списка.
Item
Элемент списка типа FarListItem.

Замечания

Смотрите также:
FarListItem, DM_LISTGETITEM


FarListInfo

главная | структуры | Dialog API
Структура FarListInfo описывает состояние элементов DI_LISTBOX и DI_COMBOBOX.
struct FarListInfo
{
  size_t StructSize;
  FARLISTINFOFLAGS Flags;
  size_t ItemsNumber;
  intptr_t SelectPos;
  intptr_t TopPos;
  intptr_t MaxHeight;
  intptr_t MaxLength;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListInfo. Перед использованием структуры плагин должен заполнить поле.
Flags
Набор флагов (тип FARLISTINFOFLAGS):
Флаг | Описание
LINFO_SHOWNOBOX | Управляющий элемент DI_LISTBOX с выставленным флагом DIF_LISTNOBOX рисуется без рамки.
LINFO_AUTOHIGHLIGHT | Горячие клавиши будут назначены автоматически, начиная с первого пункта.
LINFO_REVERSEHIGHLIGHT | Горячие клавиши будут назначены автоматически, начиная с последнего пункта.
LINFO_WRAPMODE | Попытка перемещения курсора выше первого пункта или ниже последнего будет приводить к перемещению соответственно к последнему или к первому пункту списка.
LINFO_SHOWAMPERSAND | Показать амперсанды (&), без этого флага амперсанды используются для определения горячей клавиши пункта.
LINFO_NONE | Нулевой флаг.
ItemsNumber
Количество пунктов в списке.
SelectPos
Индекс текущего пункта.
TopPos
Индекс верхнего видимого пункта списка.
MaxHeight
Максимальная видимая высота списка.
MaxLength
Максимальный видимый размер строки.

Замечания

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


FarListInsert

главная | структуры | Dialog API
Структура FarListInsert задаёт параметры для вставки требуемого элемента в списки DI_LISTBOX и DI_COMBOBOX.
struct FarListInsert
{
  size_t StructSize;
  intptr_t Index;
  struct FarListItem Item;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListInsert. Перед использованием структуры плагин должен заполнить поле.
Index
Требуемая позиция элемента в списке. Если Index больше текущего количества элементов списка, то вставляемый пункт будет добавлен в конец списка. Если Index меньше нуля, то вставляемый пункт будет добавлен в начало списка.
Item
Элемент FarListItem, вставляемый в список.

Замечания

Смотрите также:
FarListItem, DM_LISTINSERT


FarListItem

главная | структуры | Dialog API
Структура FarListItem описывает один элемент списка DI_LISTBOX или DI_COMBOBOX.
struct FarListItem
{
  LISTITEMFLAGS Flags;
  const wchar_t *Text;
  intptr_t Reserved[2];
};

Элементы

Flags
Комбинация следующих значений (тип LISTITEMFLAGS):
Флаг | Описание
LIF_SELECTED | Флаг активности пункта списка. Только один пункт может быть активным.
LIF_CHECKED | Если флаг установлен, то перед текстом пункта отображается символ пометки (например, символ с кодом 0xFB - √).
LIF_SEPARATOR | Если флаг установлен, то пункт отображается как разделитель. Разделитель может иметь непустой текст, который будет отображаться поверх разделительной линии.
LIF_DISABLE | Если флаг установлен, то пункт недоступен.
LIF_GRAYED | Если флаг установлен, то пункт доступен в навигации, но не доступен для выбора.
LIF_HIDDEN | Если флаг установлен, то пункт не выводится на экран.
LIF_DELETEUSERDATA | Этот флаг устанавливается в параметре Item сообщения DM_LISTUPDATE, если при обновлении элемента списка необходимо удалить связанные с этим элементом данные.
LIF_NONE | Нулевой флаг.
Text
Текст элемента списка.
Reserved
Зарезервировано, должно быть равно 0.

Замечания

  1. В младшем слове Flags можно указывать код символа, который будет использоваться для отображения метки выбора. В этом случае система самостоятельно выставит флаг LIF_CHECKED для данного пункта меню.
  2. Если младшее слово Flags равно 0 и выставлен флаг LIF_CHECKED, или если младшее слово Flags равно 1, то будет отображаться стандартная метка выбора - символ с кодом 0FBh (√)
  3. При использовании флага LIF_SEPARATOR без текста, компонента Text должна быть проинициализирована в 0, например так:
    struct FarListItem Item;
Item.Flags=LIF_SEPARATOR;
Item.Text=NULL;
Смотрите также:
FarList, DM_LISTGETITEM, FarListInsert, FarListUpdate


FarListItemData

главная | структуры | Dialog API
Структура FarListItemData описывает данные, которые будут ассоциированы с элементом списка DI_LISTBOX или DI_COMBOBOX.
struct FarListItemData
{
  size_t StructSize;
  intptr_t Index;
  size_t DataSize;
  void *Data;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListItemData. Перед использованием структуры плагин должен заполнить поле.
Index
Индекс элемента списка.
DataSize
Размер данных Data или 0, если предполагается ассоциировать с пунктом списка Unicode-строку.
Data
Указатель на данные.

Замечания

Менеджер диалогов размещает данные, ассоциируемые с пунктом списка, по следующим правилам:
DataSize | Data
0 | Указатель на Unicode-строку. Выделяется память размером wcslen(Data)+1 символов. Передаваемые данные копируются в выделенную область памяти.
!=0 | Произвольные данные. Выделяется память размером DataSize. Передаваемые данные копируются в выделенную область памяти.
Смотрите также:
FarList, DM_LISTGETDATA, DM_LISTSETDATA


FarListPos

главная | структуры | Dialog API
Структура FarListPos задаёт параметры для позиционирования курсора в DI_LISTBOX и DI_COMBOBOX.
struct FarListPos
{
  size_t StructSize;
  intptr_t SelectPos;
  intptr_t TopPos;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListPos. Перед использованием структуры плагин должен заполнить поле.
SelectPos
Позиция текущего элемента.
TopPos
Позиция первого видимого элемента, -1 для автоматической подстройки под значение SelectPos.

Замечания

Нумерация элементов начинается с 0.
Смотрите также:
DM_LISTGETCURPOS, DM_LISTSETCURPOS


FarListTitles

главная | структуры | Dialog API
Структура FarListTitles описывает заголовки (верхний и нижний) для элемента диалога DI_LISTBOX.
struct FarListTitles
{
  size_t StructSize;
  size_t TitleSize;
  const wchar_t *Title;
  size_t BottomSize;
  const wchar_t *Bottom;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListTitles. Перед использованием структуры плагин должен заполнить поле.
TitleSize
Длина строки верхнего заголовка с завершающим нулем.
Title
Строка, содержащая текст для верхнего заголовка списка. Может быть равна NULL (в этом случае верхний заголовок не выводится).
BottomSize
Длина строки нижнего заголовка с завершающим нулем.
Bottom
Строка, содержащая текст для нижнего заголовка списка. Может быть равна NULL (в этом случае нижний заголовок не выводится).

Замечания

Члены структуры TitleSize и BottomSize обязательны только при получении заголовков списка (см. DM_LISTGETTITLES).
Смотрите также:
DM_LISTGETTITLES, DM_LISTSETTITLES


FarListUpdate

главная | структуры | Dialog API
Структура FarListUpdate задаёт параметры операции обновления элемента в списке DI_LISTBOX или DI_COMBOBOX: индекс обновляемого элемента и новые данные элемента.
struct FarListUpdate
{
  size_t StructSize;
  intptr_t Index;
  struct FarListItem Item;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarListUpdate. Перед использованием структуры плагин должен заполнить поле.
Index
Индекс элемента в списке.
Items
Элемент FarListItem.

Замечания

Данные ассоциированные с пунктом списка при обновлении не уничтожаются. Для автоматического уничтожения копии данных используйте флаг LIF_DELETEUSERDATA.
Смотрите также:
DM_LISTUPDATE, FarListItem


OpenDlgPluginData

главная | структуры | Dialog API
Указатель на структуру OpenDlgPluginData передаётся в функцию OpenW плагина при вызове его из диалога.
struct OpenDlgPluginData
{
  size_t StructSize;
  HANDLE hDlg;
};

Элементы

StructSize
Это поле содержит размер структуры OpenDlgPluginData.
hDlg
Описатель диалога, из которого вызван плагин.

Замечания

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


ProcessDialogEventInfo

главная | структуры | Dialog API
Структура ProcessDialogEventInfo содержит информацию о событии, поступающем в функцию ProcessDialogEventW.
struct ProcessDialogEventInfo
{
  size_t StructSize;
  intptr_t Event;
  struct FarDialogEvent *Param;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessDialogEventInfo.
Event
Тип события. Может быть одной из следующих величин (перечисление DIALOG_EVENTS):
Событие | Описание
DE_DLGPROCINIT | Param - указатель на структуру FarDialogEvent. Событие FarDialogEvent.Msg поступает в функцию обработки диалога.
DE_DEFDLGPROCINIT | Param - указатель на структуру FarDialogEvent. Событие FarDialogEvent.Msg поступает в стандартную (внутреннюю) функцию обработки диалога.
DE_DLGPROCEND | Param - указатель на структуру FarDialogEvent. Событие FarDialogEvent.Msg обработано функцией обработки диалога. FarDialogEvent.Result содержит возвращённое обработчиком значение.
Param
Указатель на структуру FarDialogEvent.

Замечания

Смотрите также:
Структуры, ProcessDialogEventW


DI_BUTTON

главная | элементы диалога | Dialog API
Элемент диалога DI_BUTTON описывает кнопку (Push Button).
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_BUTTON
  intptr_t X1                  = X
  intptr_t Y1                  = Y
  intptr_t X2                  = 0
  intptr_t Y2                  = Y (равен значению Y1)
  intptr_t Selected            = Selected
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = надпись на кнопке
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Selected

Если кнопка имеет фокус ввода, то при нажатии Enter это поле примет значение 1.

Флаги

Для элемента DI_BUTTON имеют значения следующие флаги:
Флаг | Описание
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_BTNNOCLOSE | не завершать работу диалога при нажатии на кнопку
DIF_CENTERGROUP | центрирование идущих подряд кнопок с одинаковой вертикальной позицией (параметр X игнорируется)
DIF_NOBRACKETS | показывает заголовок кнопки без скобок
DIF_DISABLE | элемент является недоступным
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_SETSHIELD | размещает на кнопке аналог "иконки со щитом" Microsoft UAC
DIF_SHOWAMPERSAND | показывать в заголовке рамки амперсанд не используя его для определения горячей клавиши

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - текст кнопки
                (COL_WARNDIALOGBUTTON или COL_DIALOGBUTTON)
Colors[1] - выделенный текст (highlighting text)
                (COL_WARNDIALOGHIGHLIGHTBUTTON или COL_DIALOGHIGHLIGHTBUTTON)

Param2, когда кнопка в фокусе:

Colors[0] - текст кнопки
                (COL_WARNDIALOGSELECTEDBUTTON или COL_DIALOGSELECTEDBUTTON)
Colors[1] - выделенный текст (highlighting text)
                (COL_WARNDIALOGHIGHLIGHTSELECTEDBUTTON или COL_DIALOGHIGHLIGHTSELECTEDBUTTON)

Colors[2] - 0 (не используется)
Colors[3] - 0 (не используется)
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_HOTKEY | горячая клавиша (Alt+Символ)
DN_BTNCLICK | нажата кнопка
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

Смотрите также:
DI_CHECKBOX, DI_RADIOBUTTON, FarDialogItem


DI_CHECKBOX

главная | элементы диалога | Dialog API
Элемент диалога DI_CHECKBOX описывает контрольный переключатель (Check Box). также он называется кнопкой с независимой фиксацией (переключатель вкл./выкл., который может переключаться пользователем). Переключатель "включён", если у элемента поле Selected отлично от нуля.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_CHECKBOX
  intptr_t X1                  = X
  intptr_t Y1                  = Y
  intptr_t X2                  = 0
  intptr_t Y2                  = Y (равен значению Y1)
  intptr_t Selected            = Selected
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = надпись переключателя
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Selected

Определяет состояние элемента - отмечен или нет.

Флаги

Для элемента DI_CHECKBOX имеют значения следующие флаги:
Флаг | Описание
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_CENTERGROUP | центрирование идущих подряд переключателей с одинаковой вертикальной позицией (параметр X игнорируется)
DIF_DISABLE | элемент является недоступным
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_3STATE | контрольный переключатель будет иметь 3 состояния: "выключен", "включён", "неопределено"
DIF_SHOWAMPERSAND | показывать в заголовке рамки амперсанд не используя его для определения горячей клавиши

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - текст кнопки
                (COL_WARNDIALOGBUTTON или COL_DIALOGTEXT)
Colors[1] - выделенный текст (highlighting text)
                (COL_WARNDIALOGHIGHLIGHTTEXT или COL_DIALOGHIGHLIGHTTEXT)
Colors[2] - 0 (не используется)
Colors[3] - 0 (не используется)
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_HOTKEY | горячая клавиша (Alt+Символ)
DN_BTNCLICK | изменение состояния переключателя
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

Хотя координаты X2 и Y2 в Dialog API не используется, но для нормальной работы в будущих версиях Far Manager желательно корректно заполнить значения этих полей.
Смотрите также:
DI_RADIOBUTTON, DI_BUTTON, FarDialogItem


DI_COMBOBOX

главная | элементы диалога | Dialog API
Элемент диалога DI_COMBOBOX описывает поле ввода со списком (комбинированный список).
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_COMBOBOX
  intptr_t X1                  = X1
  intptr_t Y1                  = Y
  intptr_t X2                  = X2
  intptr_t Y2                  = Y (равен значению Y1)
  struct FarList *ListItems    = ListItems
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = редактируемый текст
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

ListItems

Указатель на структуру FarList, описывающую пункты для начальной инициализации комбинированного списка. Редактируемое поле заполняется значением первого пункта списка с установленным флагом LIF_SELECTED при условии, что Data не содержит "редактируемый текст" и есть хотя бы один элемент списка с таким флагом. Если таких пунктов несколько, берётся первый.

Если значение равно NULL, то список выводится не будет.

Флаги

Для элемента DI_COMBOBOX имеют значения следующие флаги (про флаги списка см. FarListItem):
Флаг | Описание
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_DROPDOWNLIST | стиль не редактируемого раскрывающегося списка - DropDownList
DIF_EDITEXPAND | "расширять" переменные среды
DIF_EDITPATH | строка ввода будет содержать имена реальных файловых объектов
DIF_LISTAUTOHIGHLIGHT | горячие клавиши будут назначены автоматически
DIF_LISTNOAMPERSAND | показывать горячие клавиши в списке
DIF_LISTWRAPMODE | "заворачивает" список при навигации по списку
DIF_DISABLE | элемент является недоступным
DIF_READONLY | переводит строки редактирования в состояние "только для чтения"
DIF_SELECTONENTRY | выделить редактируемый текст при получении фокуса ввода
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки строки редактирования комбинированного списка; Param2:
Colors[0] - редактируемый текст
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[1] - выделенный текст
                (COL_DIALOGEDITSELECTED)
Colors[2] - неизмененный текст (UnChanged)
                (COL_DIALOGEDITUNCHANGED)
Colors[3] - цвет символа для вызова списка
                (COL_DIALOGTEXT)

Param2 (при флаге DIF_DROPDOWNLIST):

Colors[0] - редактируемый текст
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[1] - выделенный текст
                (COL_DIALOGEDIT
            элемент в фокусе
                COL_DIALOGEDITSELECTED)
Colors[2] - неизмененный текст (UnChanged)
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[3] - цвет символа для вызова списка
                (COL_DIALOGTEXT)
DN_CTLCOLORDLGLIST | запрос цветовых атрибутов перед отрисовкой открытого комбинированного списка
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_LISTHOTKEY | пользователь для смены пункта в открытом комбинированном списке воспользовался горячими клавишами
DN_EDITCHANGE | текст изменён
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

Работа со списками DI_COMBOBOX и DI_LISTBOX организована по следующей схеме:
  • Запуск DialogInit
    FarDialogItem.Param.ListItems - только для начальной инициализации.

  • DM_LISTADD
    Добавляет только пункт списка, без ассоциированных данных

  • DM_LISTINSERT
    Вставляет только пункт списка, без ассоциированных данных

  • DM_LISTUPDATE
    Удаляет UserData для обновляемого пункта списка.
    Только обновление данных пункта списка без ассоциированных данных

  • DM_LISTSETDATA
    Перед установкой новых ассоциированных данных предыдущие уничтожаются (если было выделение по памяти)

  • DM_LISTGETDATA
    Возвращается значение, предварительно установленное DM_LISTSETDATA.

  • DM_LISTGETDATASIZE
    Возвращается размер ассоциированных данных.

  • DM_LISTGETITEM
    Возвращает только пункт списка, без ассоциированных данных.

  • Завершение DialogFree
    Ассоциированные данные уничтожаются (если было выделение по памяти)

Смотрите также:
DI_LISTBOX, FarDialogItem


DI_DOUBLEBOX

главная | элементы диалога | Dialog API
Элемент диалога DI_DOUBLEBOX описывает двойную рамку.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_DOUBLEBOX
  intptr_t X1                  = X1
  intptr_t Y1                  = Y1
  intptr_t X2                  = X2
  intptr_t Y2                  = Y2
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = заголовок рамки
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Флаги

Для элемента DI_DOUBLEBOX имеют значения следующие флаги:
Флаг | Описание
DIF_LEFTTEXT | выравнивать заголовок рамки по левому краю
DIF_RIGHTTEXT | выравнивать заголовок рамки по правому краю относительно координат X1 и X2
DIF_SHOWAMPERSAND | показывать в текстовой строке амперсанд, не используя его для определения горячей клавиши

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки рамки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - текст заголовка рамки
                (COL_WARNDIALOGBOXTITLE или COL_DIALOGBOXTITLE)
Colors[1] - выделенный текст заголовка рамки (highlighting text)
                (COL_WARNDIALOGHIGHLIGHTBOXTITLE или COL_DIALOGHIGHLIGHTBOXTITLE)
Colors[2] - рамка
                (COL_WARNDIALOGBOX или COL_DIALOGBOX)
Colors[3] - 0 (не используется)
DN_HOTKEY | горячая клавиша (Alt+Символ)
DN_CONTROLINPUT | "кликнули" клавишей мыши

Замечания

  1. Если элемент в массиве управляющих элементов стоит первым, то консольное окно Far Manager будет содержать заголовок "заголовок рамки".
  2. Если координаты X1==X2 или Y1==Y2, то рисуется соответствующая линия (вертикальная или горизонтальная)
Смотрите также:
DI_SINGLEBOX, FarDialogItem


DI_EDIT

главная | элементы диалога | Dialog API
Элемент диалога DI_EDIT описывает поле ввода.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_EDIT
  intptr_t X1                  = X1
  intptr_t Y1                  = Y
  intptr_t X2                  = X2
  intptr_t Y2                  = Y (равен значению Y1)
  const wchar_t *History       = History
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = редактируемый текст
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

History

Адрес текстовой строки, которая будет использоваться как внутреннее название истории редактирования (см. также флаг DIF_HISTORY). Если значение равно NULL, то поле ввода не имеет истории.

Флаги

Для элемента DI_EDIT имеют значения следующие флаги:
Флаг | Описание
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_EDITOR | последовательно определённые поля ввода группируются в редактор с возможностью вставки и удаления строк
DIF_HISTORY | позволяет вести историю редактирования для поля ввода
DIF_MANUALADDHISTORY | строка для истории редактирования не будет автоматически добавляться в историю по завершению работы диалога
DIF_USELASTHISTORY | начальное значение берётся из истории
DIF_EDITEXPAND | "расширять" переменные среды
DIF_EDITPATH | строка ввода будет содержать имена реальных файловых объектов
DIF_DISABLE | элемент является недоступным
DIF_READONLY | переводит строки редактирования в состояние "только для чтения"
DIF_SELECTONENTRY | выделить редактируемый текст при получении фокуса ввода
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - редактируемый текст
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[1] - выделенный текст
                (COL_DIALOGEDITSELECTED)
Colors[2] - неизмененный текст (UnChanged)
                (COL_DIALOGEDITUNCHANGED)
Colors[3] - цвет символа для History
                (COL_DIALOGTEXT)
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_EDITCHANGE | текст изменён
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

Для определения, является ли текущий элемент диалога строкой ввода, в АПИ есть функция IsEdit():
static __inline BOOL IsEdit(enum FARDIALOGITEMTYPES Type)
{
  switch (Type)
  {
    case DI_EDIT:
    case DI_FIXEDIT:
    case DI_PSWEDIT:
    case DI_COMBOBOX:
      return TRUE;
    default:
      return FALSE;
  }
}
Смотрите также:
DI_PSWEDIT, DI_FIXEDIT, FarDialogItem


DI_FIXEDIT

главная | элементы диалога | Dialog API
Элемент диалога DI_FIXEDIT описывает поле ввода фиксированного размера. То же, что и DI_EDIT, но без возможности прокрутки текста.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_FIXEDIT
  intptr_t X1                  = X1
  intptr_t Y1                  = Y
  intptr_t X2                  = X2
  intptr_t Y2                  = Y (равен значению Y1)
  const wchar_t *History       = History
  const wchar_t *Mask;         = Mask
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = редактируемый текст
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

History

Адрес текстовой строки, которая будет использоваться как внутреннее название истории редактирования (см. также флаг DIF_HISTORY). Если значение равно NULL, то поле ввода не имеет истории.

Mask

Адрес текстовой строки с маской ввода (см. также флаг DIF_MASKEDIT). Если значение равно NULL, то поле ввода не имеет маски.
"История" (флаг DIF_HISTORY) имеет более высокий приоритет, чем "Маска" (флаг DIF_MASKEDIT). Т.е. если указаны оба флага, то элемент редактирования будет иметь историю, а флаг DIF_MASKEDIT будет сброшен.

Флаги

Для элемента DI_FIXEDIT имеют значения следующие флаги:
Флаг | Описание
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_HISTORY | позволяет вести историю редактирования для поля ввода
DIF_MANUALADDHISTORY | строка для истории редактирования не будет автоматически добавляться в историю по завершению работы диалога
DIF_USELASTHISTORY | начальное значение берётся из истории
DIF_MASKEDIT | поле ввода позволяет вводить значение по указанной маске
DIF_DISABLE | элемент является недоступным
DIF_READONLY | переводит строки редактирования в состояние "только для чтения"
DIF_SELECTONENTRY | выделить редактируемый текст при получении фокуса ввода
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - редактируемый текст
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[1] - выделенный текст
                (COL_DIALOGEDITSELECTED)
Colors[2] - неизмененный текст (UnChanged)
                (COL_DIALOGEDITUNCHANGED)
Colors[3] - цвет символа для History
                (COL_DIALOGTEXT)
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_EDITCHANGE | текст изменён
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

Текстовый курсор после инициализации элемента - в режиме замены.

Смотрите также:
DI_EDIT, DI_PSWEDIT, FarDialogItem


DI_LISTBOX

главная | элементы диалога | Dialog API
Элемент диалога DI_LISTBOX описывает список.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_LISTBOX
  intptr_t X1                  = X1
  intptr_t Y1                  = Y1
  intptr_t X2                  = X2
  intptr_t Y2                  = Y2
  struct FarList *ListItems    = ListItems
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = верхний заголовок списка
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

ListItems

Указатель на структуру FarList, описывающую пункты для начальной инициализации списка.

Флаги

Для элемента DI_LISTBOX имеют значения следующие флаги (про флаги списка см. FarListItem):
Флаг | Описание
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_LISTAUTOHIGHLIGHT | горячие клавиши будут назначены автоматически
DIF_LISTNOAMPERSAND | показывать горячие клавиши в списке
DIF_LISTWRAPMODE | "заворачивает" список при навигации по списку
DIF_LISTNOCLOSE | не закрывать диалог при выборе элемента в списке
DIF_LISTTRACKMOUSE | реагировать на движение мыши в списке
DIF_LISTTRACKMOUSEINFOCUS | реагировать на движение мыши в списке только если элемент находится в фокусе
DIF_DISABLE | элемент является недоступным
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_LISTNOBOX | отключает прорисовку рамки вокруг списка. В этом случае Data игнорируется

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки элемента
DN_CTLCOLORDLGLIST | запрос цветовых атрибутов для отрисовки списка
DN_LISTCHANGE | изменилась позиция в списке
DN_LISTHOTKEY | пользователь для смены пункта в списке воспользовался горячими клавишами

Замечания

Работа со списками DI_COMBOBOX и DI_LISTBOX организована по следующей схеме:
  • Запуск DialogInit
    FarDialogItem.Param.ListItems - только для начальной инициализации.

  • DM_LISTADD
    Добавляет только пункт списка, без ассоциированных данных

  • DM_LISTINSERT
    Вставляет только пункт списка, без ассоциированных данных

  • DM_LISTUPDATE
    Удаляет UserData для обновляемого пункта списка.
    Только обновление данных пункта списка без ассоциированных данных

  • DM_LISTSETDATA
    Перед установкой новых ассоциированных данных предыдущие уничтожаются (если было выделение по памяти)

  • DM_LISTGETDATA
    Возвращается значение, предварительно установленное DM_LISTSETDATA.

  • DM_LISTGETDATASIZE
    Возвращается размер ассоциированных данных.

  • DM_LISTGETITEM
    Возвращает только пункт списка, без ассоциированных данных.

  • Завершение DialogFree
    Ассоциированные данные уничтожаются (если было выделение по памяти)

Текстовый курсор после инициализации элемента - в режиме замены.

Смотрите также:
DI_COMBOBOX, FarDialogItem


DI_PSWEDIT

главная | элементы диалога | Dialog API
Элемент диалога DI_PSWEDIT описывает поле ввода пароля - то же, что и элемент DI_EDIT, но вводимый текст на экране отрисовывается символами '*'.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_PSWEDIT
  intptr_t X1                  = X1
  intptr_t Y1                  = Y
  intptr_t X2                  = X2
  intptr_t Y2                  = Y (равен значению Y1)
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = редактируемый текст
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Флаги

Для элемента DI_PSWEDIT имеют значения следующие флаги:
Флаг | Описание
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_DISABLE | элемент является недоступным
DIF_READONLY | переводит строки редактирования в состояние "только для чтения"
DIF_SELECTONENTRY | выделить редактируемый текст при получении фокуса ввода
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - редактируемый текст
                (COL_WARNDIALOGEDIT или COL_DIALOGEDIT)
Colors[1] - выделенный текст
                (COL_DIALOGEDITSELECTED)
Colors[2] - неизмененный текст (UnChanged)
                (COL_DIALOGEDITUNCHANGED)
Colors[3] - 0 (не используется)
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_EDITCHANGE | текст изменён
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

Элемент DI_PSWEDIT позволяет только вставлять текст в поле редактирования. Копирование текста в буфер обмена (Ctrl+Ins или Ctrl+C) для данного элемента не поддерживаются.

Смотрите также:
DI_EDIT, DI_FIXEDIT, FarDialogItem


DI_RADIOBUTTON

главная | элементы диалога | Dialog API
Элемент диалога DI_RADIOBUTTON описывает селекторную кнопку (Radio Button). Также он называется кнопкой с зависимой фиксацией. Похож на CheckBox, за исключением того, что, если у первого из несколько идущих подряд подобных элементов установлен флаг DIF_GROUP, то они являются взаимоисключающими: если одна кнопка включена, другие обязательно выключены.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_RADIOBUTTON
  intptr_t X1                  = X
  intptr_t Y1                  = Y
  intptr_t X2                  = 0
  intptr_t Y2                  = Y (равен значению Y1)
  intptr_t Selected            = Selected
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = надпись кнопки
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Selected

Определяет состояние элемента - отмечен или нет.

Флаги

Для элемента DI_RADIOBUTTON имеют значения следующие флаги:
Флаг | Описание
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_GROUP | группировка последовательно объявленных селекторных кнопок (укажите этот флаг для первого элемента в группе)
DIF_MOVESELECT | изменить выбор внутри группы при изменении фокуса ввода; также элемент будет отображаться без ограничительных круглых скобок (пример - диалог выбора цвета в Far Manager - Options|Colors)
DIF_CENTERGROUP | центрирование идущих подряд переключателей с одинаковой вертикальной позицией (параметр X игнорируется)
DIF_DISABLE | элемент является недоступным
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_SHOWAMPERSAND | показывать в заголовке рамки амперсанд не используя его для определения горячей клавиши

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - текст кнопки
                (COL_WARNDIALOGBUTTON или COL_DIALOGTEXT)
Colors[1] - выделенный текст (highlighting text)
                (COL_WARNDIALOGHIGHLIGHTTEXT или COL_DIALOGHIGHLIGHTTEXT)
Colors[2] - 0 (не используется)
Colors[3] - 0 (не используется)
DN_HOTKEY | горячая клавиша (Alt+Символ)
DN_BTNCLICK | нажата кнопка
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

Хотя координаты X2 и Y2 в Dialog API не используется, но для нормальной работы в будущих версиях Far Manager желательно корректно заполнить значения этих полей.
Смотрите также:
DI_CHECKBOX, DI_BUTTON, FarDialogItem


DI_SINGLEBOX

главная | элементы диалога | Dialog API
Элемент диалога DI_SINGLEBOX описывает одинарную рамку.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_SINGLEBOX
  intptr_t X1                  = X1
  intptr_t Y1                  = Y1
  intptr_t X2                  = X2
  intptr_t Y2                  = Y2
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = заголовок рамки
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Флаги

Для элемента DI_SINGLEBOX имеют значения следующие флаги:
Флаг | Описание
DIF_LEFTTEXT | выравнивать заголовок рамки по левому краю
DIF_RIGHTTEXT | выравнивать заголовок рамки по правому краю относительно координат X1 и X2
DIF_SHOWAMPERSAND | показывать в заголовке рамки амперсанд не используя его для определения горячей клавиши

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки рамки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - текст заголовка рамки
                (COL_WARNDIALOGBOXTITLE или COL_DIALOGBOXTITLE)
Colors[1] - выделенный текст заголовка рамки (highlighting text)
                (COL_WARNDIALOGHIGHLIGHTBOXTITLE или COL_DIALOGHIGHLIGHTBOXTITLE)
Colors[2] - рамка
                (COL_WARNDIALOGBOX или  COL_DIALOGBOX)
Colors[3] - 0 (не используется)
DN_HOTKEY | горячая клавиша (Alt+Символ)
DN_CONTROLINPUT | "кликнули" клавишей мыши

Замечания

  1. Если элемент в массиве управляющих элементов стоит первым, то консольное окно Far Manager будет содержать заголовок "заголовок рамки".
  2. Если координаты X1==X2 или Y1==Y2, то рисуется соответствующая линия (вертикальная или горизонтальная)
Смотрите также:
DI_DOUBLEBOX, FarDialogItem


DI_TEXT

главная | элементы диалога | Dialog API
Элемент диалога DI_TEXT описывает статическую текстовую строку. В понятиях WinAPI это управляющий элемент STATIC.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_TEXT
  intptr_t X1                  = X1
  intptr_t Y1                  = Y
  intptr_t X2                  = X2
  intptr_t Y2                  = Y (равен значению Y1)
  const wchar_t *Mask          = Mask
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = выводимый текст
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Mask

Поле используется только с флагом DIF_SEPARATORUSER, может быть NULL, или указывать на строку, содержащую набор из трех символов, описывающих формируемую разделительную линию.

Флаги

Для элемента DI_TEXT имеют значения следующие флаги:
Флаг | Описание
DIF_BOXCOLOR | текст будет иметь цвет рамок (COL_DIALOGBOX или COL_WARNDIALOGBOX)
DIF_CENTERGROUP | центрирование двух текстовых строк с одинаковой вертикальной позицией (параметр X1 игнорируется)
DIF_SEPARATOR горизонтальный разделитель диалога (одинарная линия); координата X1 не используется для случая, когда Data пустая строка;
если Data не пустая строка, то она также будет отрисована (для вывода строки будет использована координата X1);
DIF_SEPARATOR2 горизонтальный разделитель диалога (двойная линия); координата X1 не используется для случая, когда Data пустая строка;
если Data не пустая строка, то она также будет отрисована (для вывода строки будет использована координата X1);
DIF_SEPARATORUSER | горизонтальный разделитель диалога (формат линии указан в Mask); должны быть указаны обе координаты X1 и X2
DIF_SHOWAMPERSAND | показывать в текстовой строке амперсанд не используя его для определения горячей клавиши
DIF_CENTERTEXT | выравнивать текст по центру относительно координат X1 и X2
DIF_RIGHTTEXT | выравнивать текст по правому краю относительно координат X1 и X2
DIF_WORDWRAP | усекает очередное слово в тексте элемента, если оно не вмещается по ширине, учитываются все координаты элемента X1,X2,Y1,Y2

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - текст
                (COL_WARNDIALOGTEXT или COL_DIALOGTEXT
              при выставленном флаге DIF_BOXCOLOR:
                COL_WARNDIALOGBOX или COL_DIALOGBOX)
Colors[1] - выделенный текст (highlighting text)
                (COL_WARNDIALOGHIGHLIGHTTEXT или COL_DIALOGHIGHLIGHTTEXT)
Colors[2] - 0 (не используется)
Colors[3] - 0 (не используется)
DN_CONTROLINPUT | "кликнули" клавишей мыши
DN_HOTKEY | горячая клавиша (Alt+Символ)

Замечания

  1. Хотя координата Y2 в Dialog API не используется, но для нормальной работы в будущих версиях Far Manager желательно корректно заполнить значение этого поля. Укажите то же значение координаты, что и Y1.
  2. Если указан флаг DIF_SEPARATORUSER, то координаты X1 и X2 должны быть обязательно указаны, в противном случае действие флага не будет иметь действия.
  3. Если указан флаг DIF_SEPARATORUSER, то в поле Mask Far Manager ожидает 3 символа "Лево-Середина-Право". Недостающие (до 3-х) символы для такой разделительной лини будут содержать пробелы.
  4. Если указан флаг DIF_CENTERTEXT, то координата X2 должна быть обязательно указана, в противном случае действие флага не будет иметь действия.
  5. Если не указан флаг DIF_CENTERTEXT, то Far Manager самостоятельно перерасчитает координаты X2 и Y2, исходя из размера строки и размера диалога.
  6. Если элемент в массиве управляющих элементов стоит первым, то консольное окно Far Manager будет содержать заголовок "выводимый текст".
  7. Если в тексте элемента DI_TEXT имеется "горячая клавиша" (HotKey) и не выставлен флаг DIF_SHOWAMPERSAND, то при нажатии в диалоге Alt+Символ клавиатурный фокус ввода перейдёт на следующий элемент, который может иметь фокус ввода
Смотрите также:
DI_VTEXT, FarDialogItem


DI_USERCONTROL

главная | элементы диалога | Dialog API
Свобода выбора! Элемент диалога DI_USERCONTROL описывает элемент управления, определяемый программистом: отрисовка, реагирование на события и прочие операции с элементом - всё это возлагается "на хрупкие плечи" плагина.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_USERCONTROL
  intptr_t X1                  = X1
  intptr_t Y1                  = Y1
  intptr_t X2                  = X2
  intptr_t Y2                  = Y2
  struct FAR_CHAR_INFO *VBuf   = виртуальный буфер отрисовки
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = User Defined
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Виртуальный буфер отрисовки

Параметр VBuf задаёт адрес виртуального буфера типа FAR_CHAR_INFO.

Если значение VBuf = NULL, то это значит, что плагин сам должен отрисовывать элемент DI_USERCONTROL после прихода события DN_DRAWDLGITEM, используя сервисную функцию Text.

Если VBuf != NULL, то Менеджер Диалогов считает, что это адрес буфера типа FAR_CHAR_INFO. Здесь обработчик диалога, в ответ на событие DN_DRAWDLGITEM, должен отрисовать этот элемент в виртуальный буфер, после чего Менеджер Диалогов выдаст содержимое VBuf на экран.

Флаги

Для элемента DI_USERCONTROL имеют значения следующие флаги:
Флаг | Описание
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_DISABLE | элемент является недоступным

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки элемента
DN_CONTROLINPUT | нажали клавиатурную клавишу или кликнули клавишей мыши
DN_KILLFOCUS | элемент потерял фокус (при условии, что не используется флаг DIF_NOFOCUS)
DN_GOTFOCUS | элемент получил фокус (при условии, что не используется флаг DIF_NOFOCUS)

Замечания

  1. Замечания по работе с курсором см. в описании сообщений DM_GETCURSORPOS или DM_SETCURSORPOS.
Смотрите также:
FarDialogItem


DI_VTEXT

главная | элементы диалога | Dialog API
Элемент диалога DI_VTEXT описывает статическую вертикальную текстовую строку.
struct FarDialogItem
{
  enum FARDIALOGITEMTYPES Type = DI_VTEXT
  intptr_t X1                  = X
  intptr_t Y1                  = Y1
  intptr_t X2                  = X (равен значению X1)
  intptr_t Y2                  = Y2
  const wchar_t *Mask          = Mask
  FARDIALOGITEMFLAGS Flags     = Flags
  const wchar_t *Data          = выводимый текст
};

Внимание! Внимание!

  • Приведено схематичное изображение структуры; полное описание структуры см. здесь.

Mask

Поле используется только с флагом DIF_SEPARATORUSER, может быть NULL, или указывать на строку, содержащую набор из трех символов, описывающих формируемую разделительную линию.

Флаги

Для элемента DI_VTEXT имеют значения следующие флаги:
Флаг | Описание
DIF_BOXCOLOR | текст будет иметь цвет рамок (COL_DIALOGBOX или COL_WARNDIALOGBOX)
DIF_CENTERGROUP | центрирование двух текстовых строк с одинаковой горизонтальной позицией (параметр Y1 игнорируется)
DIF_SEPARATOR вертикальный разделитель диалога (одинарная линия); координата Y1 не используется для случая, когда Data пустая строка;
если Data не пустая строка, то она также будет отрисована (для вывода строки будет использована координата Y1);
DIF_SEPARATOR2 вертикальный разделитель диалога (двойная линия); координата Y1 не используется для случая, когда Data пустая строка;
если Data не пустая строка, то она также будет отрисована (для вывода строки будет использована координата Y1);
DIF_SEPARATORUSER | вертикальный разделитель диалога (формат линии указан в Mask); должны быть указаны обе координаты Y1 и Y2
DIF_SHOWAMPERSAND | показывать в текстовой строке амперсанд не используя его для определения горячей клавиши
DIF_CENTERTEXT | выравнивать текст по центру (учитываются координаты Y1 и Y2)
DIF_RIGHTTEXT | выравнивать текст по нижнему краю относительно координат Y1 и Y2

События

Событие | Описание
DN_DRAWDLGITEM | начало отрисовки текстовой строки
DN_CTLCOLORDLGITEM запрос цветовых атрибутов для отрисовки; Param2:
Colors[0] - текст
                (COL_WARNDIALOGTEXT или COL_DIALOGTEXT
             при выставленном флаге DIF_BOXCOLOR:
                 COL_WARNDIALOGBOX или COL_DIALOGBOX)
Colors[1] - выделенный текст (highlighting text)
                (COL_WARNDIALOGHIGHLIGHTTEXT или COL_DIALOGHIGHLIGHTTEXT)
Colors[2] - 0 (не используется)
Colors[3] - 0 (не используется)
DN_CONTROLINPUT | "кликнули" клавишей мыши

Замечания

  • Хотя координата X2 в Dialog API не используется, но для нормальной работы в будущих версиях Far Manager желательно корректно заполнить значение этого поля. Укажите то же значение координаты, что и X1.
  • Если указан флаг DIF_SEPARATORUSER, то координаты Y1 и Y2 должны быть обязательно указаны, в противном случае действие флага не будет иметь действия.
  • Если указан флаг DIF_SEPARATORUSER, то в поле Mask Far Manager ожидает 3 символа "Верх-Середина-Низ". Недостающие (до 3-х) символы для такой разделительной лини будут содержать пробелы.
  • Если указан флаг DIF_CENTERTEXT, то координата Y2 должна быть обязательно указана, в противном случае действие флага не будет иметь действия.
  • Если не указан флаг DIF_CENTERTEXT, то Far Manager самостоятельно перерасчитает координаты X2 и Y2, исходя из размера строки и размера диалога.
  • Если в тексте элемента DI_TEXT имеется "горячая клавиша" (HotKey) и не выставлен флаг DIF_SHOWAMPERSAND, то при нажатии в диалоге Alt+Символ клавиатурный фокус ввода перейдёт на следующий элемент, который может иметь фокус ввода
    • Смотрите также:
    DI_TEXT, FarDialogItem


DIF_3STATE

главная | флаги элементов диалога | Dialog API
Флаг DIF_3STATE указывает на то, что элемент DI_CHECKBOX будет иметь 3 состояния:
[ ] - выключено     (FarDialogItem.Selected = 0)
[x] - включено      (FarDialogItem.Selected = 1)
[?] - неопределённо (FarDialogItem.Selected = 2)

Элементы

Флаг DIF_3STATE имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_CHECKBOX | контрольный переключатель (Check Box)

Замечания

Применяя флаг DIF_3STATE, необходимо помнить о том, что ожидает пользователь, работая с таким CheckBox`ом. Т.е. если пользователь выбрал неопределённое состояние чекбокса, то опция, которой управляет этот чекбокс, должна вообще игнорироваться при дальнейшей работе. Ярким примером является диалог работы с файловыми атрибутами:
[ ] - сбросить атрибут
[+] - установить атрибут
[?] - ничего с данным атрибутом не делать


DIF_BOXCOLOR

главная | флаги элементов диалога | Dialog API
Флаг DIF_BOXCOLOR позволяет задавать первоначальный цвет элемента, соответствующего цвету рамки диалога (COL_WARNDIALOGBOX или COL_DIALOGBOX).

Элементы

Флаг имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_TEXT | текстовая строка
DI_VTEXT | вертикальная текстовая строка

Замечания

При получении события DN_CTLCOLORDLGITEM в функции обработки диалога значение цвета можно изменить.
Смотрите также:
Индексы цветов


DIF_BTNNOCLOSE

главная | флаги элементов диалога | Dialog API
Флаг DIF_BTNNOCLOSE предписывает кнопке при нажатии не закрывать диалог. Обычное поведение кнопок - завершить обработку диалога. Ещё один способ переопределить обычное поведение - вернуть значение FALSE для события DN_CLOSE.

Элементы

Флаг DIF_BTNNOCLOSE имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_BUTTON | кнопка (Push Button)

Замечания

Для диалога без обработчика флаг DIF_BTNNOCLOSE не имеет значения.
Смотрите также:
DM_CLOSE


DIF_CENTERGROUP

главная | флаги элементов диалога | Dialog API
Последовательно объявленные элементы с флагом DIF_CENTERGROUP и одинаковой вертикальной позицией будут отцентрированы в диалоге. Горизонтальные координаты элементов (X1 и X2) игнорируются.

Элементы

Флаг DIF_CENTERGROUP имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_BUTTON | кнопка (Push Button)
DI_CHECKBOX | контрольный переключатель (Check Box)
DI_RADIOBUTTON | селекторная кнопка (Radio Button)
DI_TEXT | текстовая строка
DI_VTEXT | вертикальная текстовая строка

Замечания

  1. Удобно использовать для центрирования групп кнопок.
  2. Far Manager сам обрабатывает центрирование группы при изменении размеров диалога.


DIF_CENTERTEXT

главная | флаги элементов диалога | Dialog API
Флаг DIF_CENTERTEXT позволяет выравнивать текст в элементах DI_TEXT и DI_VTEXT по центру, относительно геометрии элемента.

Элементы

Флаг DIF_CENTERTEXT имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_TEXT | текстовая строка
DI_VTEXT | вертикальная текстовая строка

Замечания

При указании этого флага вы должны обязательно корректно заполнить координаты X2 (для DI_TEXT) и Y2 (для DI_VTEXT).


DIF_DEFAULTBUTTON

главная | флаги элементов диалога | Dialog API
Элемент управления с флагом DIF_DEFAULTBUTTON является "элементом по умолчанию".

Элементы

Флаг DIF_DEFAULTBUTTON имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_BUTTON | кнопка (Push Button)
DI_CHECKBOX | контрольный переключатель (Check Box)
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_COMBOBOX | комбинированный список
DI_RADIOBUTTON | селекторная кнопка (Radio Button)
DI_PSWEDIT | поле ввода пароля
DI_LISTBOX | список
DI_USERCONTROL | элемент управления, определяемый программистом

Замечания

Если при нажатии клавиши Enter, фокус установлен не на кнопке, то функция DialogRun вернёт номер того элемента, для которого установлен флаг DIF_DEFAULTBUTTON.


DIF_DISABLE

главная | флаги элементов диалога | Dialog API
Флаг DIF_DISABLE указывает Менеджеру Диалогов, что данный элемент "недоступен" (Disabled). Это значит, что такой элемент диалога не получит фокуса ввода и не будет реагировать на мышь, но в тоже время элемент с этим флагом можно изменить программно.

Элементы

Флаг DIF_DISABLE имеет смысл для следующих элементов диалога:
Элемент | Описание
Все | все элементы диалога могут иметь состояние "недоступен" (Disabled)

Замечания

  1. Для изменения состояния "доступен/недоступен" (Enable/Disable) элемента пошлите сообщение DM_ENABLE Менеджеру Диалогов (функцией SendDlgMessage).
  2. "Недоступные" редактируемые элементы диалога отображаются цветом COL_DIALOGEDITDISABLED.


DIF_DROPDOWNLIST

главная | флаги элементов диалога | Dialog API
Флаг DIF_DROPDOWNLIST задаёт для элемента DI_COMBOBOX стиль не редактируемого раскрывающегося списка - DropDownList.

Элементы

Флаг DIF_DROPDOWNLIST имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_COMBOBOX | комбинированный список

Замечания

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


DIF_EDITEXPAND

главная | флаги элементов диалога | Dialog API
Флаг DIF_EDITEXPAND "расширяет" переменные среды после завершения выполнения диалога (например, %TEMP% будет расширен до C:\TEMP)

Элементы

Флаг DIF_EDITEXPAND имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода

Замечания

Для "расширения" переменных среды используется функция ExpandEnvironmentStrings(), так что, если значение %VariableName% отсутствует в окружении, то оно (значение) остаётся нетронутым.


DIF_EDITOR

главная | флаги элементов диалога | Dialog API
Последовательно определённые поля ввода (DI_EDIT), имеющие флаг DIF_EDITOR группируются в редактор с возможностью вставки и удаления строк.

Элементы

Флаг DIF_EDITOR имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_EDIT | строка ввода

Замечания

Для того, чтобы в диалоге создать область редактирования размером в 5 строк, необходимо разместить 5 элементов редактирования типа DI_EDIT с установленным флагом DIF_EDITOR, как показано в пример:
DI_EDIT,5,3,29,3,1,1,0,0,DIF_EDITOR,0,L"",0,0,
DI_EDIT,5,4,29,4,0,1,0,0,DIF_EDITOR,0,L"",0,0,
DI_EDIT,5,5,29,5,0,1,0,0,DIF_EDITOR,0,L"",0,0,
DI_EDIT,5,6,29,6,0,1,0,0,DIF_EDITOR,0,L"",0,0,
DI_EDIT,5,7,29,7,0,1,0,0,DIF_EDITOR,0,L"",0,0


DIF_EDITPATH

главная | флаги элементов диалога | Dialog API
Флаг DIF_EDITPATH говорит обработчику диалога, что данная строка ввода будет содержать имена реальных файловых объектов и должна обрабатываться по-особому.

Элементы

Флаг DIF_EDITPATH имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_COMBOBOX | комбинированный список (без флага DIF_DROPDOWNLIST)
DI_EDIT | строка ввода

Замечания

Флаг DIF_EDITPATH используется во многих диалогах Far Manager, где необходимо произвести операцию над файлом или папкой, например, в диалоге "Создание папки" он расширяет возможности автодополнения: при включённых опциях в настройках диалогов - "Автозавершение в строках ввода" и "Показывать список", в диалоге "Создание папки" будет показано выпадающее меню автодополнения, в котором, помимо непосредственно введённой истории, будут содержаться и файловые объекты из текущей папки Far Manager'а.


DIF_EDITPATHEXEC

главная | флаги элементов диалога | Dialog API
Флаг DIF_EDITPATHEXEC ограничивает автодополнение в строках ввода только именами исполнимых файлов (%PATHEXT%), которые находятся в каталогах, перечисленных в %PATH%.

Элементы

Флаг DIF_EDITPATHEXEC имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_COMBOBOX | комбинированный список (без флага DIF_DROPDOWNLIST)
DI_EDIT | строка ввода

Замечания

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


DIF_FOCUS

главная | флаги элементов диалога | Dialog API
Элемент управления с флагом DIF_FOCUS получает клавиатурный фокус ввода при показе диалога на экране, т.е. курсор будет помещен на этот элемент.

Элементы

Флаг DIF_FOCUS имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_BUTTON | кнопка (Push Button)
DI_CHECKBOX | контрольный переключатель (Check Box)
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_COMBOBOX | комбинированный список
DI_RADIOBUTTON | селекторная кнопка (Radio Button)
DI_PSWEDIT | поле ввода пароля
DI_LISTBOX | список
DI_USERCONTROL | элемент управления, определяемый программистом

Замечания

Флаг DIF_FOCUS одного (одного и только одного!) из элементов диалога должен быть установлен.


DIF_GROUP

главная | флаги элементов диалога | Dialog API
Флаг DIF_GROUP выставленный у первого элемента DI_RADIOBUTTON группирует последовательно объявленные радиокнопки:
// диалог выбора цветов в Far Manager:
...
// первая группа радиокнопок
DI_RADIOBUTTON,6,3,0,0,0,0,F_LIGHTGRAY|B_BLACK|DIF_GROUP|DIF_MOVESELECT,0,L"",
DI_RADIOBUTTON,6,4,0,0,0,0,F_BLACK|B_RED|DIF_MOVESELECT,0,L"",
...
// вторая группа радиокнопок
DI_RADIOBUTTON,21,3,0,0,0,0,F_LIGHTGRAY|B_BLACK|DIF_GROUP|DIF_MOVESELECT,0,L"",
DI_RADIOBUTTON,21,4,0,0,0,0,F_BLACK|B_RED|DIF_MOVESELECT,0,L"",
...

Элементы

Флаг DIF_GROUP имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_RADIOBUTTON | селекторная кнопка (Radio Button)

Замечания

Укажите этот флаг для первого элемента в группе.


DIF_HIDDEN

главная | флаги элементов диалога | Dialog API
Флаг DIF_HIDDEN скрывает элемент диалога.

Элементы

Флаг DIF_HIDDEN имеет смысл для следующих элементов диалога:
Элемент | Описание
Все | все элементы диалога могут скрыты

Замечания

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


DIF_HISTORY

главная | флаги элементов диалога | Dialog API
Флаг DIF_HISTORY позволяет вести историю редактирования для полей ввода. Если этот флаг установлен, то поле History должно содержать адрес текстовой строки, которая будет использоваться как внутреннее название истории редактирования. Если для нескольких полей ввода оно одинаково, они используют одну и ту же историю редактирования.

Элементы

Флаг DIF_HISTORY имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера

Замечания

  1. Флаг DIF_HISTORY НЕ РАБОТАЕТ с элементом диалога DI_PSWEDIT!
  2. DIF_HISTORY имеет более высокий приоритет, чем флаг DIF_MASKEDIT.
  3. Если плагин имеет строку ввода с историей, но при этом выход из диалога предполагается осуществлять по Esc (Enter задействован для других целей), то данные не будут попадать в историю, т.к. Esc означает отказ от дальнейшей обработки диалога. В этом случае плагин может сам добавлять нужную строку в историю редактирования. Для этого необходимо послать Менеджеру Диалогов сообщение DM_ADDHISTORY.
  4. Если у элемента выставлен флаг DIF_MANUALADDHISTORY, то Менеджер Диалогов не будет по завершении работы диалога добавлять строку в историю редактирования.
  5. Плагин может также вести совместные с Far Manager истории, использовав предопределённые наименования:
    имя | назначение
    L"SearchText" | строки поиска
    L"ReplaceText" | строки замены
    L"PersPath" | пути к персональным плагинам
    L"Copy" | строки назначения в диалоге копирования
    L"LineNumber" | переходы в редакторе (Alt+F8)
    L"ViewerOffset" | переходы в программе просмотра (Alt+F8)
    L"NewEdit" | редактируемые файлы (Shift+F4 / Shift+F2)
    L"Masks" | маски файлов (пометка, ассоциации, фильтры, поиск файлов)
    L"UserVarN" | переменные в подстановках
    L"ApplyCmd" | "выполнить команду" (Ctrl+G)
    L"DizText" | строки ввода описаний файлов
    L"NewFolder" | создание каталогов
Смотрите также:
DIF_USELASTHISTORY, DM_ADDHISTORY, DIF_MANUALADDHISTORY.


DIF_LEFTTEXT

главная | флаги элементов диалога | Dialog API
Флаг DIF_LEFTTEXT позволяет выравнивать заголовки рамок по левому краю. По умолчанию заголовки рамок выровнены по-центру.

Элементы

Флаг DIF_LEFTTEXT имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_DOUBLEBOX | двойная рамка
DI_SINGLEBOX | одиночная рамка

Замечания

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


DIF_LISTAUTOHIGHLIGHT

главная | флаги элементов диалога | Dialog API
Если указан DIF_LISTAUTOHIGHLIGHT, то горячие клавиши для элементов списка будут назначены автоматически, начиная с первого пункта.

Элементы

Флаг DIF_LISTAUTOHIGHLIGHT имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

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


DIF_LISTNOAMPERSAND

главная | флаги элементов диалога | Dialog API
Флаг DIF_LISTNOAMPERSAND позволяет показывать горячие клавиши в списке. По умолчанию амперсанды в строках списка показываются на экране, а не используются для назначения горячих клавиш.

Элементы

Флаг DIF_LISTNOAMPERSAND имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

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


DIF_LISTNOBOX

главная | флаги элементов диалога | Dialog API
Флаг DIF_LISTNOBOX отключает прорисовку рамки вокруг списка DI_LISTBOX.

Элементы

Флаг DIF_LISTNOBOX имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_LISTBOX | список

Замечания

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


DIF_LISTNOCLOSE

главная | флаги элементов диалога | Dialog API
Флаг DIF_LISTNOCLOSE предписывает списку при выборе элемента не закрывать диалог. Обычное поведение списка при выборе элемента - завершить обработку диалога. Ещё один способ переопределить обычное поведение - вернуть значение FALSE для события DN_CLOSE.

Элементы

Флаг DIF_LISTNOCLOSE имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

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


DIF_LISTTRACKMOUSE

главная | флаги элементов диалога | Dialog API
Флаг DIF_LISTTRACKMOUSE позволяет задать реакцию на движение мыши в списке. Обычное поведение списка - не реагировать на движение мыши (не перемещать курсор в списке).

Элементы

Флаг DIF_LISTTRACKMOUSE имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_LISTBOX | список

Замечания

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


DIF_LISTTRACKMOUSEINFOCUS

главная | флаги элементов диалога | Dialog API
Флаг DIF_LISTTRACKMOUSEINFOCUS позволяет задать реакцию на движение мыши в списке только если элемент находится в фокусе. Обычное поведение списка - не реагировать на движение мыши (не перемещать курсор в списке).

Элементы

Флаг DIF_LISTTRACKMOUSEINFOCUS имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_LISTBOX | список

Замечания

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


DIF_LISTWRAPMODE

главная | флаги элементов диалога | Dialog API
Если указан DIF_LISTWRAPMODE, то попытка перемещения курсора в списке выше первого пункта или ниже последнего будет приводить к перемещению соответственно к последнему или к первому пункту.

Элементы

Флаг DIF_LISTWRAPMODE имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_LISTBOX | список

Замечания

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


DIF_MANUALADDHISTORY

главная | флаги элементов диалога | Dialog API
Флаг DIF_MANUALADDHISTORY указывает Менеджеру Диалогов, что обработчик диалога сам будет добавлять строки в историю.

Элементы

Флаг DIF_MANUALADDHISTORY имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера

Замечания

  1. Добавление строки в историю осуществляется с помощью сообщения DM_ADDHISTORY.
  2. Флаг является дополнением к флагу DIF_HISTORY и сам по себе не несёт никакой смысловой нагрузки.
Всё это позволяет наиболее полно контролировать процесс добавления строки в историю редактирования.
Смотрите также:
DIF_HISTORY, DM_ADDHISTORY


DIF_MASKEDIT

главная | флаги элементов диалога | Dialog API
Флаг DIF_MASKEDIT позволяет для элемента диалога DI_FIXEDIT указать маску ввода. Если этот флаг установлен, то поле Mask должно содержать адрес текстовой строки со значением маски ввода.

На данный момент поддерживаются следующие символы маски:
'X' | позволяет вводить в данную позицию строки ввода любой символ;
'#' | позволяет вводить в данную позицию строки ввода цифры, пробел и знак минуса;
'9' | позволяет вводить в данную позицию строки ввода только цифры;
'A' | позволяет вводить в данную позицию строки ввода только буквы.
'H' | позволяет вводить в данную позицию строки ввода только шестнадцатиричные символы.
Можно создавать разнообразнейшие маски ввода, например: L"(###) #99-99-99". В этой маске скобки и дефисы между девятками будут статическими (не удаляемыми) элементами строки, внутри скобок можно ввести либо цифры либо пробелы (к примеру телефонный код города), в позициях, где стоят девятки в строке ввода, можно ввести только цифры.
Есть некоторый нюанс по использованию DIF_MASKEDIT. Когда вы задаёте строку маски (к примеру, L"99.99.9999") учтите, что работа реализована таким образом, что длина строки ввода принудительно устанавливается равной длине строки маски.

Элементы

Флаг DIF_MASKEDIT имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_FIXEDIT | поле ввода фиксированного размера

Замечания

Флаг DIF_HISTORY имеет более высокий приоритет, чем DIF_MASKEDIT.


DIF_MOVESELECT

главная | флаги элементов диалога | Dialog API
Флаг DIF_MOVESELECT позволяет изменять выбранный элемент внутри группы элементов DI_RADIOBUTTON при изменении фокуса ввода. При этом сам элемент будет иметь другой вид - отрисовка без круглых скобок. Пример работы этого флага см. в диалоге настройки цветов Far Manager.

Элементы

Флаг DIF_MOVESELECT имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_RADIOBUTTON | селекторная кнопка (Radio Button)

Замечания

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


DIF_NOAUTOCOMPLETE

главная | флаги элементов диалога | Dialog API
Флаг DIF_NOAUTOCOMPLETE отключает автодополнение для строк редактирования.

Элементы

Флаг DIF_NOAUTOCOMPLETE имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

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


DIF_NOBRACKETS

главная | флаги элементов диалога | Dialog API
Флаг DIF_NOBRACKETS заставляет Менеджер Диалогов показывать заголовок кнопки DI_BUTTON без квадратных скобок.

Элементы

Флаг DIF_NOBRACKETS имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_BUTTON | кнопка (Push Button)

Замечания

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


DIF_NOFOCUS

главная | флаги элементов диалога | Dialog API
Элемент управления с флагом DIF_NOFOCUS не получает клавиатурный фокус ввода. Удобно для случая, когда предусмотрено управление только мышью (см. плагин "Reversi")

Элементы

Флаг DIF_NOFOCUS имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_BUTTON | кнопка (Push Button)
DI_CHECKBOX | контрольный переключатель (Check Box)
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_COMBOBOX | комбинированный список
DI_RADIOBUTTON | селекторная кнопка (Radio Button)
DI_PSWEDIT | поле ввода пароля
DI_LISTBOX | список
DI_USERCONTROL | элемент управления, определяемый программистом

Замечания

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


DIF_NONE

главная | флаги элементов диалога | Dialog API
нулевой флаг

Элементы

Замечания

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


DIF_READONLY

главная | флаги элементов диалога | Dialog API
Флаг DIF_READONLY переводит строки редактирования в состояние "только для чтения".

Элементы

Флаг DIF_READONLY имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

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


DIF_RIGHTTEXT

главная | флаги элементов диалога | Dialog API
Флаг DIF_RIGHTTEXT позволяет выравнивать текст элемента или заголовок рамки по правому краю (нижнему краю для DI_VTEXT).

Элементы

Флаг DIF_RIGHTTEXT имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_TEXT | текстовая строка
DI_VTEXT | вертикальная текстовая строка
DI_DOUBLEBOX | двойная рамка
DI_SINGLEBOX | одиночная рамка

Замечания

При указании этого флага, плагин должен обязательно корректно заполнить координаты X1,X2 и Y1,Y2 (для DI_VTEXT).
Смотрите также:
DIF_LEFTTEXT


DIF_SELECTONENTRY

главная | флаги элементов диалога | Dialog API
При получении фокуса ввода содержимое строки редактирования с флагом DIF_SELECTONENTRY будет выделяться.

Элементы

Флаг DIF_SELECTONENTRY имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

Выделение в строке ввода, имеющей флаг DIF_SELECTONENTRY, будет сниматься при потери фокуса ввода.


DIF_SEPARATOR

главная | флаги элементов диалога | Dialog API
Текстовая строка DI_TEXT с флагом DIF_SEPARATOR отображается как одинарная горизонтальная линия с двойными боковыми линиями.

Элементы

Флаг DIF_SEPARATOR имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_TEXT | текстовая строка
DI_VTEXT | вертикальная текстовая строка

Замечания

  1. Координаты отрисовки разделительной линии (левый край диалога = 0): X1 = X1_Диалога + N; X2 = X2_Диалога - N,
    где N равно 3 или 0 (при вызове диалога с флагом FDLG_SMALLDIALOG).
  2. Координата X1 влияет только на позиционирование текстовой строки (отображается поверх разделительной линии) из Data. Если вам нужна разделительная линия с центрированным текстом, то укажите X1 = -1, иначе текст будет отрисован с координаты X1.
  3. Если Data содержит пустую строку, элемент отображается просто как разделительная линия.
Смотрите также:
DIF_SEPARATOR2, DIF_SEPARATORUSER


DIF_SEPARATOR2

главная | флаги элементов диалога | Dialog API
Текстовая строка DI_TEXT с флагом DIF_SEPARATOR2 отображается как двойная горизонтальная линия с двойными боковыми линиями.

Элементы

Флаг DIF_SEPARATOR2 имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_TEXT | текстовая строка
DI_VTEXT | вертикальная текстовая строка

Замечания

  1. Координаты отрисовки разделительной линии (левый край диалога = 0): X1 = X1_Диалога + N; X2 = X2_Диалога - N,
    где N равно 3 или 0 (при вызове диалога с флагом FDLG_SMALLDIALOG).
  2. Координата X1 влияет только на позиционирование текстовой строки (отображается поверх разделительной линии) из Data. Если вам нужна разделительная линия с центрированным текстом, то укажите X1 = -1, иначе текст будет отрисован с координаты X1.
  3. Если Data содержит пустую строку, элемент отображается просто как разделительная линия.
Смотрите также:
DIF_SEPARATOR, DIF_SEPARATORUSER


DIF_SEPARATORUSER

главная | флаги элементов диалога | Dialog API
Текстовая строка DI_TEXT с флагом DIF_SEPARATORUSER отображается как разделительная линия, формат которой определяется в компоненте Mask.

Элементы

Флаг DIF_SEPARATORUSER имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_TEXT | текстовая строка
DI_VTEXT | вертикальная текстовая строка

Замечания

  1. Должны быть указаны обе координаты X1 и X2 (Y1 и Y2 для DI_VTEXT)
  2. В поле Mask Far Manager ожидает 3 символа "Лево-Середина-Право" (или "Верх-Середина-Низ" для DI_VTEXT). Недостающие (до 3-х) символы для такой разделительной линии будут содержать пробелы.
  3. Если Mask равен NULL, то отрисовывается стандартная одинарная разделительная линия.
  4. Если Data содержит пустую строку, элемент отображается просто как разделительная линия.
Смотрите также:
DIF_SEPARATOR, DIF_SEPARATOR2


DIF_SETSHIELD

главная | флаги элементов диалога | Dialog API
Флаг DIF_SETSHIELD размещает на кнопке аналог "иконки со щитом" Microsoft UAC. Если действия, выполняемые при нажатии на кнопку, могут потребовать прав администратора, плагину следует использовать этот флаг для информирования пользователя.

Элементы

Флаг DIF_SETSHIELD имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_BUTTON | кнопка (Push Button)

Замечания

Для подробностей смотрите описание флага из Windows API - BCM_SETSHIELD.


DIF_SHOWAMPERSAND

главная | флаги элементов диалога | Dialog API
Флаг DIF_SHOWAMPERSAND заставляет показывать в текстовой строке и рамках амперсанд (&), не используя его для определения горячей клавиши.

Элементы

Флаг DIF_SHOWAMPERSAND имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_BUTTON | кнопка (Push Button)
DI_CHECKBOX | контрольный переключатель (Check Box)
DI_RADIOBUTTON | селекторная кнопка (Radio Button)
DI_TEXT | текстовая строка
DI_VTEXT | вертикальная текстовая строка
DI_DOUBLEBOX | двойная рамка
DI_SINGLEBOX | одиночная рамка

Замечания

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


DIF_USELASTHISTORY

главная | флаги элементов диалога | Dialog API
Строка ввода с установленными флагами DIF_HISTORY и DIF_USELASTHISTORY получает начальное значение из последнего элемента истории, если начальное значение поля редактирования не задано.

Элементы

Флаг DIF_USELASTHISTORY имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера

Замечания

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


DIF_WORDWRAP

главная | флаги элементов диалога | Dialog API
Флаг DIF_WORDWRAP усекает очередное слово, если оно не вмещается по ширине элемента.

Элементы

Флаг DIF_WORDWRAP имеет смысл для следующих элементов диалога:
Элемент | Описание
DI_TEXT | текстовая строка

Замечания

  1. При указании этого флага, плагин должен обязательно корректно заполнить координаты X1,X2,Y1,Y2.
  2. Совместно с флагом DIF_WORDWRAP можно применять только флаги DIF_RIGHTTEXT, DIF_CENTERTEXT и DIF_SHOWAMPERSAND.


DN_BTNCLICK

главная | события | Dialog API
Сообщение DN_BTNCLICK приходит для элементов DI_BUTTON, DI_CHECKBOX, DI_RADIOBUTTON после того, как пользователь нажал клавиши Space и Enter (для кнопок), +, - и *.

Param1

ID элемента диалога.

Param2

Состояние после нажатия:
DI_BUTTON = 0
DI_CHECKBOX = 0 (снята пометка), 1 (установлена пометка) и 2 (третье состояние, если установлен флаг DIF_3STATE)
DI_RADIOBUTTON = 0 - для предыдущего элемента в группе, 1 - для активного элемента в группе.

Return

Для DI_BUTTON: TRUE - сообщение обработано, дальше не продолжать обработку этого сообщения ядром.
FALSE - продолжить обработку ядром.

Для остальных элементов: TRUE - разрешить изменение (и соответственно отрисовку того, что пользователь ввёл)
FALSE - запретить изменение.

Элементы

Элемент | Описание
DI_BUTTON | Кнопка (Push Button).
DI_CHECKBOX | Контрольный переключатель (Check Box).
DI_RADIOBUTTON | Селекторная кнопка (Radio Button).

Замечания

Пример

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


DN_CLOSE

главная | события | Dialog API
Событие DN_CLOSE приходит в обработчик диалога как сигнал, сообщающий, что диалог будет закрыт - пользователь пытается завершить работу с диалогом.

Param1

  • ID элемента, который имел фокус ввода в момент нажатия Ctrl+Enter или ID элемента, у которого выставлен флаг DIF_DEFAULTBUTTON.
  • -2 - нажали комбинацию клавиш Ctrl+Pause или Ctrl+ScrollLock.
  • -1 - Esc или F10.

Param2

0

Return

TRUE - да, согласен с выходом из диалога
FALSE - продолжить работу диалога.

Замечания

  1. Событие DN_CLOSE приходит сразу после посылки сообщения DM_CLOSE обработчиком диалога.

Пример

Смотрите также:
DialogInit, DM_CLOSE


DN_CONTROLINPUT

главная | события | Dialog API
Обработчик диалога получает событие DN_CONTROLINPUT, когда пользователь нажал клавишу клавиатуры или мыши.

Param1

ID элемента (обычно элемент, имеющий фокус ввода) диалога. -1 для случая, если пользователь кликнул клавишей мыши вне диалога.

Param2

Указатель на структуру INPUT_RECORD описывающую клавишу.

Return

TRUE - клавишу обработали сами.
FALSE - пусть обрабатывает клавишу стандартный внутренний обработчик диалога.

Элементы

Элемент | Описание
Все | Все элементы диалога, кроме скрытых и недоступных.

Замечания

  1. По умолчанию для открытого DI_COMBOBOX событие DN_CONTROLINPUT в диалоговую процедуру не приходит. Воспользуйтесь сообщением DM_SETCOMBOBOXEVENT, чтобы включить режим посылки нажатий клавиш в диалоговую процедуру.
  2. Для элемента DI_USERCONTROL координаты курсора (0,0) мыши начинаются с левого-верхнего угла этого элемента. Для остальных элементов - относительно левого верхнего угла экрана.
  3. Если пользователь кликнул клавишей мыши вне диалога, то:
    • левая клавиша рассматривается как нажатие клавиши Esc;
    • правая клавиша рассматривается как нажатие клавиши Enter;
    • прочие клавиши (для многокнопочной мыши) не имеют никакого эффекта.
    • если функция диалога не обрабатывает событие с Param1 = -1, то диалог будет закрыт.

Пример

Пример обработки сообщения:
// вызвать контекстную справку
case DN_CONTROLINPUT:
  const INPUT_RECORD* record=(const INPUT_RECORD *)Param2;
  if (record->EventType==KEY_EVENT && record->Event.KeyEvent.bKeyDown)
  {
    WORD Key=record->Event.KeyEvent.wVirtualKeyCode;
    if (Key==VK_F1)
    {
      Info.ShowHelp(Info.ModuleName, 0, 0);
      return true;
    }
  }
Смотрите также:
DialogInit, DM_KEY


DN_CTLCOLORDIALOG

главная | события | Dialog API
Сообщение DN_CTLCOLORDIALOG посылается в функцию обработки диалога перед прорисовкой подложки окна диалога.

Param1

0

Param2

Адрес на структуру FarColor, атрибуты (цвет_фона+цвет_текста) с использованием которых обработчик диалога отрисовывает подложку диалога.
По умолчанию это значение равно COL_DIALOGTEXT - для обычных диалогов и COL_WARNDIALOGTEXT для диалогов с флагом FDLG_WARNING.

Return

TRUE - если атрибуты изменены.
FALSE - оставить всё как есть.

Замечания

Событие приходит сразу после DN_DRAWDIALOG.
Задать новые цвета можно изменяя непосредственно значение Param2.
Получить цвет Far Manager по индексу можно используя ACTL_GETCOLOR.

Пример

Смотрите также:
DialogInit, ACTL_GETCOLOR


DN_CTLCOLORDLGITEM

главная | события | Dialog API
Событие DN_CTLCOLORDLGITEM посылается процедуре обработки диалога перед отрисовкой конкретного элемента диалога.

Param1

ID элемента, который будет отрисован.

Param2

Указатель на структуру типа FarDialogItemColors, атрибуты (цвет_фона+цвет_текста) с использованием которых обработчик диалога хочет отрисовать элемент. Указатели FarDialogItemColors.Colors для конкретного элемента означают:
DI_SINGLEBOX
DI_DOUBLEBOX
Colors[0]=Title, Colors[1]=HiText, Colors[2]=Box, Colors[3]=0
DI_TEXT
Colors[0]=Title, Colors[1]=HiText, Colors[2]=Box, Colors[3]=0
Цвет для рамки (Box) определён только для флагов DIF_SEPARATOR, DIF_SEPARATOR2 и DIF_SEPARATORUSER.
DI_VTEXT
Colors[0]=Title, Colors[1]=0, Colors[2]=0, Colors[3]=0
DI_EDIT
DI_FIXEDIT
DI_PSWEDIT
DI_COMBOBOX
Colors[0]=EditLine, Colors[1]=SelectText, Colors[2]=UnchangedColor, Colors[3]=History&ComboBox указатель
DI_CHECKBOX
DI_RADIOBUTTON
Colors[0]=Title, Colors[1]=HiText, Colors[2]=0, Colors[3]=0
DI_BUTTON
Colors[0]=Title, Colors[1]=HiText, Colors[2]=0, Colors[3]=0
DI_LISTBOX
Для элемента DI_LISTBOX приходит только событие DN_CTLCOLORDLGLIST.

Return

TRUE - если атрибуты изменены.
FALSE - оставить всё как есть.

Элементы

Элемент | Описание
Все | Все элементы диалога, кроме DI_LISTBOX и DI_USERCONTROL

Замечания

В ответ на это сообщение процедура обработки диалога может установить свои атрибуты (цвет текста и фона) для заданного элемента.

Пример

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


DN_CTLCOLORDLGLIST

главная | события | Dialog API
Сообщение DN_CTLCOLORDLGLIST посылается процедуре обработки диалога перед отрисовкой списка (DI_COMBOBOX, DI_LISTBOX, DIF_HISTORY).

Param1

ID элемента диалога.

Param2

Указатель на структуру FarDialogItemColors, описывающую цветовую схему списка.

Return

TRUE - если атрибуты изменены.
FALSE - оставить всё как есть.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода (с установленным флагом DIF_HISTORY)
DI_FIXEDIT | поле ввода фиксированного размера (с установленным флагом DIF_HISTORY)

Замечания

При обработке этого сообщения процедура обработки диалога может изменить переданные ей атрибуты (цвет текста и фона) для заданного элемента диалога.

Пример

Смотрите также:
DialogInit, FarDialogItemColors


DN_DRAGGED

главная | события | Dialog API
Событие DN_DRAGGED приходит в обработчик диалога как сигнал о начале и конце перемещения диалога.

Начало перемещения диалога

Param1

0

Param2

0

Return

TRUE - разрешить перемещение.
FALSE - запретить перемещение.

Конец перемещения диалога

Param1

1

Param2

0 - успешное перемещение.
1 - отменили перемещение диалога, нажав Esc или правую клавишу мыши.

Return

Не имеет значения.

Замечания

  1. Событие DN_DRAGGED приходит до прорисовки диалога.

Пример

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


DN_DRAWDIALOG

главная | события | Dialog API
Сообщение DN_DRAWDIALOG посылается перед прорисовкой всего диалога.

Param1

0

Param2

0

Return

Если обработчик диалога вернул FALSE, то диалог не будет отрисован на экране.

Замечания

Пример

Смотрите также:
DialogInit, DN_DRAWDIALOGDONE


DN_DRAWDIALOGDONE

главная | события | Dialog API
Сообщение DN_DRAWDIALOGDONE посылается после прорисовки всего диалога.

Param1

0

Param2

0

Return

Не используется.

Замечания

Хотя это сообщение и посылается последним, но на момент его посылки виртуальный буфер экрана Far Manager ещё не "сброшен". Т.е. если плагин хочет что-то нарисовать поверх диалога, то его изменения могут быть стёрты с экрана при возвращении из обработчика этого сообщения.

Чтобы этого не происходило нужно принудительно сбросить виртуальный буфер используя вызов функции Text(0,0,NULL,NULL), а затем "нарисовать" своё изображение, например:

  case  DN_DRAWDIALOGDONE:
    Info.Text(0,0,NULL,NULL);
    // здесь рисуем своё
    break;

Пример

Смотрите также:
DialogInit, DN_DRAWDIALOG


DN_DRAWDLGITEM

главная | события | Dialog API
Сообщение DN_DRAWDLGITEM посылается обработчику диалога перед отрисовкой элемента диалога.

Param1

ID элемента диалога, который будет отрисован.

Param2

Указатель на структуру FarDialogItem, описывающую элемент для отрисовки.

Return

Если обработчик диалога вернёт FALSE, то указанный элемент не будет выводится на экран.

Элементы

Элемент | Описание
Все | Все элементы диалога

Замечания

Внешний вид DI_USERCONTROL, в отличие от прочих элементов диалога, можно предварительно подготавливать в виртуальном буфере. Far Manager не копирует во внутренние переменные содержимое этого буфера, поэтому в ответ на событие DN_DRAWDLGITEM достаточно изменить состояние виртуального буфера:
case DN_DRAWDLGITEM:
  FAR_CHAR_INFO *VBuf=((struct FarDialogItem*)Param2)->Param.VBuf;
  for (I=0; I < 256; I++)
  {
    VBuf[I].Char = DecodeTable[I];
    VBuf[I].Attributes = Color;
  }
  return TRUE;

Пример

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


DN_DRAWDLGITEMDONE

главная | события | Dialog API
Сообщение DN_DRAWDLGITEMDONE посылается после отрисовки элемента диалога.

Param1

ID элемента диалога, который будет отрисован.

Param2

0

Return

Не используется.

Замечания

Хотя это сообщение и посылается после отрисовки элемента, но на момент его посылки виртуальный буфер экрана Far Manager ещё не "сброшен". Т.е. если плагин хочет что-то нарисовать поверх диалога, то его изменения могут быть стёрты с экрана при возвращении из обработчика этого сообщения.

Чтобы этого не происходило нужно принудительно сбросить виртуальный буфер используя вызов функции Text(0,0,NULL,NULL), а затем "нарисовать" своё изображение, например:

  case  DN_DRAWDLGITEMDONE:
    Info.Text(0,0,NULL,NULL);
    // здесь рисуем своё
    break;

Пример

Смотрите также:
DialogInit, DN_DRAWDIALOGDONE, DN_DRAWDLGITEM


DN_DROPDOWNOPENED

главная | события | Dialog API
Событие DN_DROPDOWNOPENED посылается перед открытием Combobox или History и после закрытия.

Param1

ID элемента диалога, для которого будет открыт/закрыт список.

Param2

0 = закрыт, 1 = открыт.

Return

Не используется.

Замечания

Пример

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


DN_EDITCHANGE

главная | события | Dialog API
Сообщение DN_EDITCHANGE оповещает обработчик об изменении состояния редактируемого элемента диалога - например, ввели символ.

Param1

ID элемента диалога.

Param2

Указатель на структуру FarDialogItem, описывающую изменённый элемент.

Return

В текущем Dialog API результат игнорируется, но для обеспечения работоспособности плагина с будущими версиями Dialog API рекомендуется возвращать:
  • TRUE - "подтверждаю изменения"
  • FALSE - "изменения в окне редактирования не принимаются"

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

В Dialog API нельзя принудительно изменить состояние элемента, изменяя элементы структуры FarDialogItem.

Пример

...
// отобразить копию введённых данных только для чисел
if (Msg == DN_EDITCHANGE && Param1 == 2)
{
  FarDialogItem *Item=(FarDialogItem *)Param2;
  int Len=wcslen(Item->PtrData);
  for(int I=0; I < Len; ++I)
    if(!isdigit(Item->PtrData[I]))
      break;
  if(I == Len)
    return FALSE;
  Info.SendDlgMessage(hDlg, DM_SETTEXTPTR, 3, Item->PtrData);
  return TRUE;
}
...
Смотрите также:
DialogInit


DN_ENTERIDLE

главная | события | Dialog API
Событие DN_ENTERIDLE посылается в процедуру обработки диалога, который входит в холостое состояние.

Внимание! Внимание!

  • Это событие никак не связано с таймером. Диалоговое окно входит в холостое состояние, когда нет никаких событий в системе (клавиши не нажимали, мышью не двигали).

Param1

0

Param2

0

Return

0

Пример

// во время простоя дадим компьютеру подумать над следующим ходом.
case DN_ENTERIDLE:
  Timer(hDlg);
  return 0;
Смотрите также:
DialogInit


DN_GETVALUE

главная | события | Dialog API
Сообщение DN_GETVALUE посылается обработчику диалога всякий раз, когда в макросах встречаются Dlg.GetValue(), ItemCount и CurPos.

Param1

ID элемента диалога.

Param2

Указатель на структуру FarGetValue, описывающую макропеременную.

Return

Обработчик диалога должен вернуть TRUE, если плагин модифицировал данные. Иначе - FALSE.

Элементы

Элемент | Описание
Все | для Dlg.GetValue()
DI_LISTBOX | для ItemCount и CurPos
DI_COMBOBOX | для ItemCount и CurPos, если список открыт.

Замечания

Макродвижок "вычисляет" требуемые данные, затем посылает обработчику диалога событие DN_GETVALUE с заполненной структурой. Если плагин модифицирует данные (и возвращает TRUE), то макродвижок отдает макропоследовательности измененное значение.

Пример

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


DN_GOTFOCUS

главная | события | Dialog API
Событие DN_GOTFOCUS посылается процедуре обработки диалога после того, как элемент диалога получил клавиатурный фокус ввода.

Param1

ID элемента получившего фокус ввода.

Param2

0

Return

0

Элементы

Элемент | Описание
Все | Все элементы, которые могут иметь клавиатурный фокус ввода.

Замечания

Событие также приходит для фокусного элемента сразу после DN_INITDIALOG.

Пример

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


DN_HELP

главная | события | Dialog API
Событие DN_HELP передаётся в обработчик диалога перед выводом темы помощи.

Param1

ID элемента диалога, имеющий фокус ввода (текущий элемент).

Param2

Адрес строки, содержащей название темы, которая будет показана.

Return

Адрес строки темы подсказки, связанной с данным диалогом, который будет выведен. Если вернули NULL, то тема помощи выводиться не будет.

Элементы

Элемент | Описание
Все | Все элементы, которые могут иметь клавиатурный фокус ввода.

Замечания

Это сообщение позволяет управлять показом темы помощи на уровне отдельного элемента диалога.

Пример

// в зависимости от состояния игры показать тот или иной раздел помощи
// в данном случае текущий элемент диалога нас не интересует
case DN_HELP:
{
  static wchar_t *HelpTopics[3]={L"Contents",L"Rule",L"Recommendations"};
  int i=1;
  if(GAME[0].NumPl1==2 && GAME[0].NumPl2 == 2)
    i=0;
  else if(GAME[0].NumPl1+GAME[0].NumPl2 > 16)
    i=2;
  return (&HelpTopics[i][0]);
}
Смотрите также:
DialogInit


DN_HOTKEY

главная | события | Dialog API
Событие DN_HOTKEY посылается в обработчик диалога, когда пользователь нажал Alt+буква.

Param1

ID элемента диалога, который получит фокус ввода.

Param2

Указатель на структуру INPUT_RECORD описывающую клавишу.

Return

TRUE - согласен.
FALSE - отменить обработку клавиши.

Элементы

Элемент | Описание
DI_DOUBLEBOX | двойная рамка; если имеет горячую клавишу (флаг DIF_SHOWAMPERSAND не выставлен), то передаёт управление ближайшему элементу, который может иметь фокус ввода
DI_SINGLEBOX | одиночная рамка; если имеет горячую клавишу (флаг DIF_SHOWAMPERSAND не выставлен), то передаёт управление ближайшему элементу, который может иметь фокус ввода
DI_TEXT | текстовая строка; если имеет горячую клавишу (флаг DIF_SHOWAMPERSAND не выставлен), то передаёт управление ближайшему элементу, который может иметь фокус ввода
DI_VTEXT | вертикальная текстовая строка; если имеет горячую клавишу (флаг DIF_SHOWAMPERSAND не выставлен), то передаёт управление ближайшему элементу, который может иметь фокус ввода
DI_BUTTON | кнопка (Push Button); элемент без выставленного флага DIF_SHOWAMPERSAND сам реагирует на комбинацию Alt+буква
DI_CHECKBOX | контрольный переключатель (Check Box); элемент без выставленного флага DIF_SHOWAMPERSAND сам реагирует на комбинацию Alt+буква
DI_RADIOBUTTON | селекторная кнопка (Radio Button); элемент без выставленного флага DIF_SHOWAMPERSAND сам реагирует на комбинацию Alt+буква

Пример

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


DN_INITDIALOG

главная | события | Dialog API
Событие DN_INITDIALOG посылается процедуре обработки диалога после того, как были проинициализированы все управляющие элементы диалога, но до того, как они стали видимы.

Param1

ID элемента, который получит фокус ввода по умолчанию.

Param2

Специфические данные, переданные в функции DialogInit - параметр Param.

Return

TRUE - если процедура обработки диалога изменила данные.
FALSE - изменений не было.

Замечания

В ответ на данное событие процедура обработки диалога инициализирует каждый элемент в некоторое корректное начальное состояние. Например, она может заполнить блок списка элементами, которые потом просмотрит пользователь...
Если изменения были и обработчик диалога вернул системе значение FALSE, то изменённые данные не будут восприняты.

Пример

case DN_INITDIALOG:
  struct FarDialogItem DialogItem;

  Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,75,&DialogItem);
  if(DialogItem.ListItems->Items[0].Flags&LIF_SELECTED)
    Computer=Pl2;
  else
  ...
  return TRUE;
Смотрите также:
DialogInit


DN_INPUT

главная | события | Dialog API
Событие DN_INPUT посылается обработчику диалога до обработки ядром событий консоли.

Param1

0

Param2

Указатель на структуру INPUT_RECORD.

Return

TRUE - разрешить дальнейшую обработку ядром этого события.
FALSE - событие обработано плагином.

Элементы

Элемент | Описание
Диалог | сообщение затрагивает только диалог

Замечания

  1. По умолчанию событие DN_INPUT не приходит в диалоговую процедуру. Для включения/выключения посылки этого события воспользуйтесь сообщением DM_SETINPUTNOTIFY.
  2. Не включайте без нужды данный механизм - события от мыши приходят очень часто.
  3. По умолчанию для открытого DI_COMBOBOX событие DN_INPUT в диалоговую процедуру не приходит. Воспользуйтесь сообщением DM_SETCOMBOBOXEVENT, чтобы включить режим посылки событий от мыши в диалоговую процедуру.

Пример

Смотрите также:
DialogInit, DM_SETINPUTNOTIFY


DN_KILLFOCUS

главная | события | Dialog API
Событие DN_KILLFOCUS передаётся процедуре обработки диалога непосредственно перед потерей клавиатурного фокуса элементом диалога.

Param1

ID элемента диалога, теряющего фокус ввода.

Param2

0

Return

-1 - "Согласен с потерей фокуса".
>=0 - номер желаемого элемента, которому хотим передать фокус.

Элементы

Элемент | Описание
Все | все элементы, которые могут иметь клавиатурный фокус ввода.

Замечания

Пример

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


DN_LISTCHANGE

главная | события | Dialog API
Событие DN_LISTCHANGE оповещает обработчик об изменении позиции курсора элемента списка (DI_COMBOBOX, DI_LISTBOX, DIF_HISTORY).

Param1

ID элемента диалога.

Param2

Новая позиция в списке.

Return

TRUE - разрешить изменение позиции курсора.
FALSE - запретить изменение позиции курсора.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_LISTBOX | список
DI_EDIT | строка ввода (с установленным флагом DIF_HISTORY)
DI_FIXEDIT | поле ввода фиксированного размера (с установленным флагом DIF_HISTORY)

Замечания

Пример

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


DN_LISTHOTKEY

главная | события | Dialog API
Событие DN_LISTHOTKEY оповещает обработчик о том, что пользователь для смены пункта в списке (DI_COMBOBOX, DI_LISTBOX) воспользовался горячими клавишами.

Param1

ID элемента DI_COMBOBOX или DI_LISTBOX.

Param2

Позиция выбранного элемента в списке.

Return

FALSE - разрешить изменение.
TRUE - плагин сам отработал событие.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_LISTBOX | список
Смотрите также:
DialogInit


DN_RESIZECONSOLE

главная | события | Dialog API
Событие DN_RESIZECONSOLE передаётся процедуре обработки диалога после изменения размера консоли (например, после того, как пользователь нажал Alt+F9).

Param1

0

Param2

Указатель на структуру COORD, в которой указаны текущие размеры консоли.

Return

TRUE.

Элементы

Элемент | Описание
Диалог | сообщение затрагивает только диалог

Замечания

Событие DN_RESIZECONSOLE полезно в том случае, когда плагин умеет подстраиваться под текущие размеры консоли. Пример работы данного события можно наблюдать в диалоге поиска файлов (Alt+F7).

Пример

Изменение размеров диалога поиска (Alt+F7) при изменении размеров консоли.
case DN_RESIZECONSOLE:
{
  COORD coord=(*(COORD*)Param2);
  SMALL_RECT rect;
  int IncY=coord.Y-DlgHeight-4;

  ...

  Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0);

  Info.SendDlgMessage(hDlg,DM_GETDLGRECT,0,&rect);
  coord.X=rect.Right-rect.Left+1;
  DlgHeight+=IncY;
  coord.Y=DlgHeight;

  if (IncY > 0)
    Info.SendDlgMessage(hDlg,DM_RESIZEDIALOG,0,&coord);

  for (I=0; I < 2; I++)
  {
    Info.SendDlgMessage(hDlg,DM_GETITEMPOSITION,I,&rect);
    rect.Bottom+=(short)IncY;
    Info.SendDlgMessage(hDlg,DM_SETITEMPOSITION,I,&rect);
  }

  for (I=2; I < 10; I++)
  {
    Info.SendDlgMessage(hDlg,DM_GETITEMPOSITION,I,&rect);
    if (I==2)
      rect.Left=-1;
    rect.Top+=(short)IncY;
    Info.SendDlgMessage(hDlg,DM_SETITEMPOSITION,I,&rect);
  }

  if (IncY <= 0)
    Info.SendDlgMessage(hDlg,DM_RESIZEDIALOG,0,&coord);

  Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0);

  ...

  return TRUE;
}
Смотрите также:
DialogInit


DM_ADDHISTORY

главная | сообщения | Dialog API
Сообщение DM_ADDHISTORY посылается Менеджеру диалогов для добавления строки в историю.

Param1

ID элемента диалога.

Param2

Указатель на строку, которая будет помещена в историю.

Return

TRUE - данные добавлены в историю.
FALSE - указанный элемент диалога Param1 не поддерживает работу с историей.

Элементы

Элемент | Описание
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера

Замечания

Сообщение работает только для элементов DI_EDIT и DI_FIXEDIT с установленным флагом DIF_HISTORY. Также строки будут автоматически добавляться в историю, если у указанных элементов не выставлен флаг DIF_MANUALADDHISTORY.

Пример

Смотрите также:
DialogInit, DIF_HISTORY, DIF_MANUALADDHISTORY


DM_CLOSE

главная | сообщения | Dialog API
Сообщение DM_CLOSE посылается в обработчик диалога как сигнал, сообщающий, что диалог будет закрыт.

Param1

ID элемента, который будет возвращён из функции DialogRun (или -1 для элемента, имеющего фокус ввода).

Param2

0

Return

Значение, которое обработчик диалога вернёт в ответ на событие DN_CLOSE.

Замечания

Событие DN_CLOSE приходит сразу после посылки сообщения DM_CLOSE.

Пример

Смотрите также:
DialogRun, DN_CLOSE


DM_EDITUNCHANGEDFLAG

главная | сообщения | Dialog API
Команда DM_EDITUNCHANGEDFLAG предназначена для управления состоянием "неизмененный текст" строк редактирования.

Param1

ID элемента управления.

Param2

Одно из трёх значений;
-1 - получить текущее состояние строки редактирования;
0 - сбросить состояние "неизмененный текст";
1 - установить состояние "неизмененный текст".

Return

Предыдущее состояние "неизмененный текст" строки редактирования.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список (без флага DIF_DROPDOWNLIST)
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

  1. В начале работы диалога перечисленные элементы, кроме DI_FIXEDIT, уже имеют состояние "неизмененный текст".
  2. После установки состояния "неизмененный текст", выделение блока будет сброшено.

Пример

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


DM_ENABLE

главная | сообщения | Dialog API
Команда DM_ENABLE посылается ядру Dialog API для переключения или получения состояния Enable/Disable конкретного элемента диалога.

Param1

ID элемента диалога.

Param2

Состояние элемента:
TRUE - Enable
FALSE - Disable
-1 - получить состояние

Return

Предыдущее состояние элемента:
TRUE - Enabled
FALSE - Disabled

Элементы

Элемент | Описание
Все | все элементы диалога

Замечания

Пример

Смотрите также:
DialogInit, DIF_DISABLE


DM_ENABLEREDRAW

главная | сообщения | Dialog API
Команда DM_ENABLEREDRAW посылается Менеджеру диалогов для отключения/включения перерисовки всего диалога.

Param1

TRUE - Включить отрисовку диалога
FALSE - Отключить отрисовку диалога
-1 - Получить текущее значение счётчика блокировки вывода.

Param2

0

Return

Предыдущее значение счётчика блокировки вывода.

Замечания

Эта команда предназначена в основном для того, чтобы исключить перерисовку диалога при изменении нескольких элементов одновременно. Когда посылается это сообщение - счётчик блокировки при Param1 = TRUE увеличивается, при Param1 = FALSE - уменьшается. Диалог отрисовывается, когда значение счётчика равно 0. Это нормальное поведение для вложенных манипуляций.

Пример

Типичное использование:
Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,FALSE,0);

// изменяем кучу заголовков

Info.SendDlgMessage(hDlg,DM_ENABLEREDRAW,TRUE,0);
Смотрите также:
DialogInit


DM_GETCHECK

главная | сообщения | Dialog API
Сообщение DM_GETCHECK посылается Менеджеру диалогов для получения состояния элементов DI_CHECKBOX и DI_RADIOBUTTON.

Param1

ID требуемого элемента.

Param2

0

Return

Состояние элемента: BSTATE_UNCHECKED, BSTATE_CHECKED, BSTATE_3STATE.

Элементы

Элемент | Описание
DI_CHECKBOX | контрольный переключатель (Check Box)
DI_RADIOBUTTON | селекторная кнопка (Radio Button)

Замечания

Пример

Смотрите также:
DialogInit, DM_SETCHECK, DM_SET3STATE


DM_GETCOMBOBOXEVENT

главная | Сообщения | Dialog API
Сообщение DM_GETCOMBOBOXEVENT возвращает состояние режима рассылки событий клавиатуры и мыши DN_CONTROLINPUT и DN_INPUT в диалоговую процедуру при навигации в открытом элементе DI_COMBOBOX.

Param1

ID требуемого элемента DI_COMBOBOX.

Param2

0

Return

Состояние режима (перечисление FARCOMBOBOXEVENTTYPE).

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список

Замечания

Пример

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


DM_GETCONSTTEXTPTR

главная | сообщения | Dialog API
Сообщение DM_GETCONSTTEXTPTR посылается Менеджеру диалогов для получения указателя на внутренний буфер Far Manager, содержащий строку ввода.

Param1

ID требуемого элемента.

Param2

0

Return

Возвращает указатель на внутренний буфер Far Manager, содержащий строку ввода, переменная типа const wchar_t*.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список (без флага DIF_DROPDOWNLIST)
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

Внимание! Внимание!

Полученную сообщением DM_GETCONSTTEXTPTR строку ни в коем случае нельзя изменять!
А также нельзя сохранять сам указатель, так как он меняется при изменениях в строке ввода.

Добавлен для удобства работы после закрытия диалога (функция DialogRun) и до функции DialogFree.

Пример

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


DM_GETCURSORPOS

главная | сообщения | Dialog API
Сообщение DM_GETCURSORPOS посылается обработчику диалога для получения позиции курсора в строках редактирования диалога и в элементе DI_USERCONTROL.

Param1

ID элемента диалога.

Param2

Указатель на структуру COORD, в которую Менеджер Диалогов поместит информацию о положении курсора (COORD.Y = 0 для строкового редактора).

Return

FALSE - указанный ID элемента не является строковым редактором или элементом DI_USERCONTROL.
TRUE - структура COORD содержит координаты курсора.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля
DI_USERCONTROL | элемент управления, определяемый программистом

Замечания

Пример

Смотрите также:
DialogInit, DM_SETCURSORPOS


DM_GETCURSORSIZE

главная | сообщения | Dialog API
Сообщение DM_GETCURSORSIZE посылается обработчику диалога для получения размера курсора в строках редактирования диалога и в элементе DI_USERCONTROL.

Param1

ID элемента диалога.

Param2

0

Return

Старшее слово - размер курсора (от 0 до 100, в терминах структуры CONSOLE_CURSOR_INFO), младшее слово - признак видимости курсора (1 - курсор видим, 0 - курсор невидим).

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список (без флага DIF_DROPDOWNLIST)
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля
DI_USERCONTROL | элемент управления, определяемый программистом

Замечания

Пример

Смотрите также:
DialogInit, DM_SETCURSORSIZE, DM_GETCURSORPOS, DM_SETCURSORPOS


DM_GETDIALOGINFO

главная | события | Dialog API
Команда DM_GETDIALOGINFO посылается обработчику диалога, для запроса информации о диалоге Far Manager'а или другого плагина.

Param1

0

Param2

Указатель на структуру DialogInfo, получающую данные. Плагин должен корректно заполнить поле DialogInfo.StructSize перед вызовом.

Return

TRUE - если структура заполнена.
FALSE - соощение проигнорировано.

Пример

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


DM_GETDIALOGTITLE

главная | сообщения | Dialog API
Сообщение DM_GETDIALOGTITLE посылается Менеджеру диалогов для получения заголовка диалога.

Param1

0

Param2

Указатель на структуру FarDialogItemData.

Return

Размер данных в символах, без завершающего символа конца строки '\0'.

Замечания

Far Manager для заголовка диалога (в т.ч. для заголовка консольного окна) берёт данные из первого попавшегося элемента типа DI_TEXT, DI_DOUBLEBOX, DI_SINGLEBOX или DI_LISTBOX.

Если в массиве элементов диалога отсутствует хотя бы один из перечисленных элементов, то заголовок пустой.

Если Param2 = NULL - это способ получить длину строки:

LenData=SendDlgMessage(hDlg,DM_GETDIALOGTITLE,ID,NULL);

Пример

Смотрите также:
DM_GETTEXT, DM_SETTEXTPTR


DM_GETDLGDATA

главная | сообщения | Dialog API
Сообщение DM_GETDLGDATA возвращает указатель на связанные с диалогом данные. Каждый экземпляр диалога может иметь свои данные, предназначенные для использования плагином, который создавал диалог.

Param1

0

Param2

0

Return

Менеджер Диалогов возвращает указатель на ранее переданные данные плагином.

Замечания

Первоначально здесь находится то, что передано в аргументе Param функции DialogInit.

Пример

Смотрите также:
DialogInit, DM_SETDLGDATA


DM_GETDLGITEM

главная | сообщения | Dialog API
Сообщение DM_GETDLGITEM посылается Менеджеру диалогов для получения полной информации о заданном элементе.

Param1

ID элемента диалога.

Param2

Указатель на структуру FarGetDialogItem, память под запрашиваемый элемент плагин выделяет самостоятельно. Плагин должен корректно заполнить поле FarGetDialogItem.StructSize перед вызовом.

Return

Необходимый размер буфера, при Param2 = NULL.

Элементы

Элемент | Описание
Все | все элементы диалога

Замечания

Пример

// получить 12-й элемент
struct FarGetDialogItem DialogItem={sizeof(FarGetDialogItem)};
// выделяем память
DialogItem.Item = (FarDialogItem *)malloc(DialogItem.Size=Info.SendDlgMessage(hDlg,DM_GETDLGITEM,12,NULL));
if (DialogItem.Item)
{
  // получаем элемент
  Info.SendDlgMessage(hDlg,DM_GETDLGITEM,12,&DialogItem);

  // что-то делаем

  // освобождаем память
  free(DialogItem.Item);
}
Смотрите также:
DialogInit, DM_GETITEMPOSITION, DM_GETDLGRECT


DM_GETDLGITEMSHORT

главная | сообщения | Dialog API
Сообщение DM_GETDLGITEMSHORT посылается Менеджеру диалогов для получения информации о заданном элементе. Отличается от DM_GETDLGITEM тем, что FarDialogItem.Data, FarDialogItem.Mask и FarDialogItem.History всегда возвращаются как NULL.

Param1

ID элемента диалога.

Param2

Указатель на структуру FarDialogItem.

Return

TRUE - данные скопированы или FALSE - для неверного ID элемента.

Элементы

Элемент | Описание
Все | все элементы диалога

Замечания

Пример

// получить 12-й элемент
struct FarDialogItem DialogItem;
Info.SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,12,&DialogItem);
Смотрите также:
DialogInit, DM_GETITEMPOSITION, DM_GETDLGRECT


DM_GETDLGRECT

главная | сообщения | Dialog API
Сообщение DM_GETDLGRECT позволяет получить экранные координаты диалогового окна.

Param1

0

Param2

Указатель на структуру SMALL_RECT в которой менеджер диалогов вернёт экранные координаты диалога.

Return

TRUE - данные скопированы или FALSE, если в качестве Param2 передано значение NULL.

Пример

case DN_INPUT:
{
  const INPUT_RECORD* record=(const INPUT_RECORD *)Param2;
  if (record->EventType==MOUSE_EVENT)
    // отработаем щелчок мыши в LISTе диалога
    if (Param1==ID && record->Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED && record->Event.MouseEvent.dwEventFlags!=DOUBLE_CLICK)
    {
      SMALL_RECT dlgRect;
      Info.SendDlgMessage(hDlg, DM_GETDLGRECT, ID, &dlgRect);
      // щелкнули в LISTе
      if (record->Event.MouseEvent.dwMousePosition.X > dlgRect.Left && record->Event.MouseEvent.dwMousePosition.X < dlgRect.Right
          && record->Event.MouseEvent.dwMousePosition.Y > dlgRect.Top && record->Event.MouseEvent.dwMousePosition.Y < dlgRect.Bottom)
      {
       // что-то делаем
      }
    }
}
Смотрите также:
DialogInit, DM_GETDLGITEM, DM_GETITEMPOSITION


DM_GETDROPDOWNOPENED

главная | сообщения | Dialog API
Сообщение DM_GETDROPDOWNOPENED служит для программного определения: "есть ли в диалоге раскрытый комбобокс или история".

Param1

0

Param2

0

Return

FALSE - в диалоге нет открытого комбобокса или истории.
TRUE - в диалоге есть открытый комбобокс или история.

Элементы

Элемент | Описание
Диалог | сообщение затрагивает только диалог

Замечания

Пример

Смотрите также:
DialogInit, DM_SETDROPDOWNOPENED


DM_GETEDITPOSITION

главная | сообщения | Dialog API
Сообщение DM_GETEDITPOSITION посылается обработчику диалога для получения позиции и состояния курсора в строках редактирования диалога.

Param1

ID элемента диалога.

Param2

Указатель на структуру EditorSetPosition, в которую Менеджер Диалогов поместит информацию о позиции и состоянии курсора.

Return

FALSE - указанный ID элемента не является строковым редактором.
TRUE - структура EditorSetPosition заполнена.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

Пример

Смотрите также:
DialogInit, DM_GETCURSORPOS, DM_SETCURSORPOS, DM_SETEDITPOSITION


DM_GETFOCUS

главная | сообщения | Dialog API
Сообщение DM_GETFOCUS посылается Менеджеру Диалогов для получения ID элемента диалога, имеющего клавиатурный фокус ввода.

Param1

0

Param2

0

Return

ID элемента, имеющего клавиатурный фокус ввода.
-1 в случае, если диалог не существует.

Элементы

Элемент | Описание
Все | Все элементы, которые могут иметь клавиатурный фокус ввода.

Замечания

Пример

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


DM_GETITEMDATA

главная | сообщения | Dialog API
Сообщение DM_GETITEMDATA возвращает указатель на связанные с элементом диалогом данные. Каждый элемент диалога может иметь свои данные, предназначенные для использования плагином, который создавал диалог.

Param1

ID элемента диалога.

Param2

0

Return

Менеджер Диалогов возвращает указатель на ранее переданные данные плагином (или 0, если плагин не ассоциировал данные с этим элементом диалога).

Элементы

Элемент | Описание
Все | все элементы диалога

Замечания

Пример

Смотрите также:
DialogInit, DM_SETITEMDATA, DM_GETDLGDATA, DM_SETDLGDATA


DM_GETITEMPOSITION

главная | сообщения | Dialog API
Сообщение DM_GETITEMPOSITION позволяет получить позицию и размеры управляющего элемента.

Param1

ID элемента диалога.

Param2

Указатель на структуру SMALL_RECT в которой менеджер диалогов вернёт размеры элемента.

Return

TRUE - данные скопированы или FALSE, если в качестве Param2 передано значение NULL или такого элемента нет.

Элементы

Элемент | Описание
Все | все элементы диалога

Пример

Смотрите также:
DialogInit, DM_SETITEMPOSITION, DM_GETDLGITEM, DM_GETDLGRECT


DM_GETSELECTION

главная | сообщения | Dialog API
Сообщение DM_GETSELECTION посылается обработчику диалога для получения параметров выделения в строках редактирования диалога.

Param1

ID элемента диалога.

Param2

Указатель на структуру EditorSelect, в которую Менеджер Диалогов поместит информацию о выделении в сроке редактирования.

Return

FALSE - указанный ID элемента не является строковым редактором.
TRUE - структура EditorSelect содержит параметры выделения.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

Пример

Смотрите также:
DialogInit, DM_SETSELECTION


DM_GETTEXT

главная | сообщения | Dialog API
Сообщение DM_GETTEXT посылается Менеджеру диалогов для получения содержимого строк ввода или заголовков элементов диалога.

Param1

ID требуемого элемента.

Param2

Указатель на структуру FarDialogItemData.

Return

Размер данных в символах, без завершающего символа конца строки '\0'.

Элементы

Элемент | Описание
Все | Для строк ввода - содержимое строки, для прочих элементов - заголовки. Всё то, что содержится в FarDialogItem.Data.

Замечания

Если Param2 = NULL - это способ получить длину строки:
LenData=SendDlgMessage(hDlg,DM_GETTEXT,ID,NULL);

Пример

Смотрите также:
DialogInit, DM_SETTEXTPTR


DM_KEY

главная | сообщения | Dialog API
Используя сообщение DM_KEY плагин передаёт массив клавиш Менеджеру диалогов.

Param1

Количество передаваемых клавиш.

Param2

Массив структур типа INPUT_RECORD.

Return

0

Замечания

Обработчик диалога не получит события DN_CONTROLINPUT в ответ на посылку Менеджеру диалогов сообщения DM_KEY.

Пример

Смотрите также:
DialogInit, DN_CONTROLINPUT


DM_LISTADD

главная | сообщения | Dialog API
Сообщение DM_LISTADD посылается Менеджеру диалогов для добавления элементов в список DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на добавляемые пункты списка, структуру типа FarList.

Return

TRUE - данные добавлены в список.
FALSE - ошибка при добавлении данных.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

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


DM_LISTADDSTR

главная | сообщения | Dialog API
Сообщение DM_LISTADDSTR посылается Менеджеру диалогов для добавления строки в список DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на добавляемую строку.

Return

Индекс добавленной строки в списке.
-1 в случае, если диалог не существует.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

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


DM_LISTDELETE

главная | сообщения | Dialog API
Сообщение DM_LISTDELETE посылается Менеджеру диалогов для удаления элементов из списка DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на структуру типа FarListDelete, описывающую параметры удаления, или NULL.

Return

TRUE - данные удалены из списка.
FALSE - ошибка при удалении данных.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Если в качестве Param2 задано значение NULL, то из списка будут удалены все элементы. Данные, которые плагин ассоциировал с элементом списка с помощью сообщения DM_LISTSETDATA также будут удалены.

Пример

// *** УДАЛИТЬ ПЕРВЫЕ ДВА ЭЛЕМЕНТА СПИСКА ***
struct FarListDelete FLDItem={siazeof(FarListDelete)};
FLDItem.StartIndex=0;
FLDItem.Count=2;
Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,&FLDItem);

// *** ОЧИСТИТЬ ВЕСЬ СПИСОК ***
  //   Способ 1:
  struct FarListDelete FLDItem={siazeof(FarListDelete),0,0};
  Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,&FLDItem);

  //   Способ 2:
  Info.SendDlgMessage(hDlg,DM_LISTDELETE,ID,NULL);
Смотрите также:
DialogInit, FarListDelete


DM_LISTFINDSTRING

главная | сообщения | Dialog API
Сообщение DM_LISTFINDSTRING посылается Менеджеру диалогов для поиска элемента списка DI_COMBOBOX или DI_LISTBOX по шаблону.

Param1

ID элемента диалога.

Param2

Указатель на структуру, описывающую искомый пункт списка, структуру типа FarListFind.

Return

Позиция найденного элемента в списке (начиная с нуля).
-1 - элемент в списке не найден.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

Смотрите также:
FarListFind, DialogInit


DM_LISTGETCURPOS

главная | сообщения | Dialog API
Сообщение DM_LISTGETCURPOS посылается Менеджеру диалогов для получения текущей позиции курсора в списке DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на структуру FarListPos, в которую будет записана дополнительная информация о позиции в списке, или NULL, если дополнительная информация не требуется.

Return

Текущая позиция курсора в списке.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

// получить текущую позицию

CurPos=Info.SendDlgMessage(hDlg,DM_LISTGETCURPOS,ID,NULL);
Смотрите также:
DialogInit, DM_LISTSETCURPOS


DM_LISTGETDATA

главная | сообщения | Dialog API
Сообщение DM_LISTGETDATA посылается Менеджеру диалогов для получения данных, ассоциированных с элементом списка DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Индекс элемента списка.

Return

Данные, которые плагин ассоциировал с элементом списка с помощью сообщения DM_LISTSETDATA или NULL, если нет данных, ассоциированных с указанным пунктом списка. Более подробно о логике хранения данных см. замечание для структуры FarListItemData.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Смотрите также:
DialogInit, DM_LISTSETDATA


DM_LISTGETDATASIZE

главная | сообщения | Dialog API
Сообщение DM_LISTGETDATASIZE посылается Менеджеру диалогов для получения размера данных, ассоциированных с элементом списка DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Индекс элемента списка.

Return

Размер данных, которые плагин ассоциировал с элементом списка с помощью сообщения DM_LISTSETDATA.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Смотрите также:
DialogInit, DM_LISTSETDATA, DM_LISTGETDATA


DM_LISTGETITEM

главная | сообщения | Dialog API
Сообщение DM_LISTGETITEM посылается Менеджеру диалогов для получения одного элемента из списка DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на структуру типа FarListGetItem, в которую будет помещён результат.

Return

TRUE - данные получены.
FALSE - ошибка при получении данных.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Перед получением элемента списка необходимо предварительно заполнить структуру FarListGetItem, указав в качестве FarListGetItem.ItemIndex индекс нужного элемента.
struct FarListGetItem List={sizeof(FarListGetItem)};
List.ItemIndex=Index;
Info.SendDlgMessage(hDlg,DM_LISTGETITEM,ID,&List);
Смотрите также:
DialogInit, FarListGetItem


DM_LISTGETTITLES

главная | сообщения | Dialog API
Сообщение DM_LISTGETTITLES посылается Менеджеру диалогов для получения заголовков (верхнего и нижнего) у элемента DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на структуру типа FarListTitles, в которую будут помещены заголовки.

Return

TRUE - заголовки получены
FALSE -элемент не является списком

Элементы

Элемент | Описание
DI_LISTBOX | список

Замечания

Для получения заголовков необходимо предварительно заполнить структуру FarListTitles:
wchar_t Title[100];
wchar_t Bottom[100];
FarListTitles ListTitle={sizeof(FarListTitles)};
ListTitle.Title=Title;
ListTitle.TitleSize=100;
ListTitle.Bottom=Bottom;
ListTitle.BottomSize=100;
Info.SendDlgMessage(hDlg,DM_LISTGETTITLES,ID,&ListTitle);
Смотрите также:
DialogInit, FarListTitles, DM_LISTSETTITLES


DM_LISTINFO

главная | сообщения | Dialog API
Сообщение DM_LISTINFO позволяет получить информацию о списке DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на структуру FarListInfo.

Return

TRUE - структура FarListInfo заполнена.
FALSE - ошибка, в качестве Param2 передали значение NULL.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

// Получить информацию о списке
struct FarListInfo ListInfo={sizeof(FarListInfo)};
Info.SendDlgMessage(hDlg,DM_LISTINFO,ID,&ListInfo);
Смотрите также:
FarListInfo, DialogInit


DM_LISTINSERT

главная | сообщения | Dialog API
Сообщение DM_LISTINSERT посылается Менеджеру диалогов для вставки элемента в список DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на добавляемый пункт списка, структуру типа FarListInsert.

Return

Новое количество пунктов в списке.
-1 - ошибка при вставке данных.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

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


DM_LISTSET

главная | сообщения | Dialog API
Сообщение DM_LISTSET посылается Менеджеру диалогов для добавления элементов в список DI_COMBOBOX или DI_LISTBOX с удалением уже существующих строк.

Param1

ID элемента диалога.

Param2

Указатель на добавляемые пункты списка, структуру типа FarList.

Return

TRUE - данные добавлены в список.
FALSE - ошибка при добавлении данных.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

FarList List={sizeof(FarList)};
FarListItem *ListItems;
...

ListItems=new FarListItem[MenuItemsNumber];
List.ItemsNumber=MenuItemsNumber;
List.Items=ListItems;

...
Info.SendDlgMessage(hDlg,DM_LISTSET,0,&List);
Смотрите также:
DialogInit


DM_LISTSETCURPOS

главная | сообщения | Dialog API
Сообщение DM_LISTSETCURPOS посылается Менеджеру диалогов для позиционирования курсора в списке DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на структуру FarListPos.

Return

Скорректированная позиция курсора в списке с учётом разделительных линий и недоступных пунктов.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

// Установить текущую позицию

RealPos=Info.SendDlgMessage(hDlg,DM_LISTSETCURPOS,ID,&NewPos);
Смотрите также:
DialogInit, DM_LISTGETCURPOS


DM_LISTSETDATA

главная | сообщения | Dialog API
Сообщение DM_LISTSETDATA посылается Менеджеру диалогов для ассоциации пользовательских данных с элементом списка DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на структуру типа FarListItemData, описывающую добавляемые данные.

Return

Размер добавленных данных или 0, если данные некорректны или не удалось выделить достаточно памяти для размещения данных.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Смотрите также:
DialogInit, DM_LISTGETDATA


DM_LISTSETTITLES

главная | сообщения | Dialog API
Сообщение DM_LISTSETTITLES посылается Менеджеру диалогов для установки заголовков (верхнего и нижнего) у элемента DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на структуру типа FarListTitles, содержащую заголовки.

Return

TRUE - заголовки установлены
FALSE -элемент не является списком

Элементы

Элемент | Описание
DI_LISTBOX | список

Замечания

Для установки заголовков необходимо предварительно заполнить структуру FarListTitles:
FarListTitles ListTitle={sizeof(FarListTitles)};
ListTitle.Title=L"Some title";
ListTitle.Bottom=NULL; // сбросить нижний заголовок
Info.SendDlgMessage(hDlg,DM_LISTSETTITLES,ID,&ListTitle);
Смотрите также:
DialogInit, FarListTitles, DM_LISTGETTITLES


DM_LISTSORT

главная | сообщения | Dialog API
Сообщение DM_LISTSORT посылается Менеджеру диалогов для сортировки элементов списка DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Направление сортировки: 0 - по возрастанию, 1 - по убыванию.

Return

TRUE - список отсортирован.
FALSE - ошибка при сортировке списка.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Пример

// Сортировать список по убыванию (от 'Z' до 'A')
Info.SendDlgMessage(hDlg,DM_LISTSORT,ID,(void*)1);
Смотрите также:
DialogInit


DM_LISTUPDATE

главная | сообщения | Dialog API
Сообщение DM_LISTUPDATE посылается Менеджеру диалогов для обновления элемента в списках DI_COMBOBOX или DI_LISTBOX.

Param1

ID элемента диалога.

Param2

Указатель на обновляемый пункт списка, структуру типа FarListUpdate.

Return

TRUE - пункт в списке успешно обновлён.
FALSE - ошибка при обновлении данных.

Элементы

Элемент | Описание
DI_LISTBOX | список
DI_COMBOBOX | комбинированный список

Замечания

Для обновления строки текущего элемента списка DI_LISTBOX можно также использовать сообщение DM_SETTEXTPTR (или DM_SETTEXT).

Пример

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


DM_MOVEDIALOG

главная | сообщения | Dialog API
Сообщение DM_MOVEDIALOG посылается менеджеру диалогов для перемещения диалога.

Param1

1 - Param2 содержит абсолютные координаты.
0 - Param2 содержит относительные координаты.

Param2

Указатель на структуру COORD, в которой указаны новые координаты левого верхнего угла диалогового окна.

Return

Структура COORD, содержащая реальные координаты левого верхнего угла диалогового окна.

Замечания

Для центрирования диалога на экране заполните структуру COORD значениями -1 и установите Param1 = 1.

Пример

// центрировать диалог
COORD c={-1,-1};
Info.SendDlgMessage(hDlg,DM_MOVEDIALOG,1,&c);

// переместить диалог в левый верхний угол экрана в координаты 1,1.
COORD c={1,1};
Info.SendDlgMessage(hDlg,DM_MOVEDIALOG,1,&c);

// переместить диалог на 2 позиции вправо.
COORD c={2,0};
Info.SendDlgMessage(hDlg,DM_MOVEDIALOG,0,&c);
Смотрите также:
DM_RESIZEDIALOG, DialogInit


DM_REDRAW

главная | сообщения | Dialog API
Плагин посылает сообщение DM_REDRAW Менеджеру диалогов для перерисовки всего диалогового окна.

Param1

0

Param2

0

Return

0

Замечания

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


DM_RESIZEDIALOG

главная | сообщения | Dialog API
Сообщение DM_RESIZEDIALOG посылается менеджеру диалогов для изменения размеров диалога.

Param1

0

Param2

Указатель на структуру COORD, в которой указаны новые размеры диалогового окна.

Return

Структура COORD, содержащая новые размеры диалогового окна.

Замечания

Если Far Manager был запущен с параметром "far.exe /w", то размеры окна могут отличаться от размеров экранного буфера Far Manager и Ваш диалог может "уплыть" за границы экрана, учитывайте этот случай в своем плагине.

Пример

Смотрите также:
DM_MOVEDIALOG, DialogInit


DM_SET3STATE

главная | сообщения | Dialog API
Сообщение DM_SET3STATE посылается Менеджеру диалогов для модификации стиля элемента DI_CHECKBOX.

Param1

ID элемента диалога.

Param2

TRUE - контрольный переключатель может иметь 3 состояния.
FALSE - контрольный переключатель может иметь 2 состояния.

Return

Предыдущий стиль управляющего элемента.

Элементы

Элемент | Описание
DI_CHECKBOX | контрольный переключатель (Check Box)

Замечания

Пример

Смотрите также:
DialogInit, DM_GETCHECK, DM_SETCHECK


DM_SETCHECK

главная | сообщения | Dialog API
Сообщение DM_SETCHECK посылается Менеджеру диалогов для изменения состояния элементов DI_CHECKBOX и DI_RADIOBUTTON.

Param1

ID элемента диалога.

Param2

Param2 имеет эффект только для элемента DI_CHECKBOX и может принимать одно из следующих значений (перечисление FARCHECKEDSTATE):
Флаг | Описание
BSTATE_UNCHECKED | Выключить - [ ] или ( )
BSTATE_CHECKED | Включить - [x] или (*)
BSTATE_3STATE | Включить неопределённое состояние - [?] (имеет эффект только для элемента с выставленным флагом DIF_3STATE)
BSTATE_TOGGLE | Переключить состояние элемента. (для элемента с выставленным флагом DIF_3STATE состояние будет меняться по кругу: "включено", "выключено", "неопределено")

Return

Предыдущее состояние элемента. Для DI_RADIOBUTTON - ID предыдущего элемента в группе кнопок с зависимой фиксацией (см. описание DIF_GROUP).

Элементы

Элемент | Описание
DI_CHECKBOX | Контрольный переключатель (Check Box)
DI_RADIOBUTTON | Селекторная кнопка (Radio Button)

Замечания

Пример

Смотрите также:
DialogInit, DM_GETCHECK, DM_SET3STATE


DM_SETCOMBOBOXEVENT

главная | сообщения | Dialog API
Сообщение DM_SETCOMBOBOXEVENT позволяет управлять механизмом посылки событий клавиатуры и мыши DN_CONTROLINPUT и DN_INPUT в диалоговую процедуру при навигации в открытом элементе DI_COMBOBOX.

Param1

ID требуемого элемента DI_COMBOBOX.

Param2

Param2 комбинация следующих значений (перечисление FARCOMBOBOXEVENTTYPE):
Флаг | Описание
CBET_KEY | включить приход событий клавиатуры
CBET_MOUSE | включить приход событий мыши

Return

Предыдущее состояние.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список

Замечания

По умолчанию при открытом DI_COMBOBOX события клавиатуры и мыши в диалоговую процедуру не приходят.

Пример

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


DM_SETCURSORPOS

главная | сообщения | Dialog API
Сообщение DM_SETCURSORPOS посылается обработчику диалога для позиционирования курсора в строках редактирования диалога и элементах DI_USERCONTROL.

Param1

ID элемента диалога.

Param2

Указатель на структуру COORD, содержащей информацию о положении курсора (COORD.Y игнорируется для строкового редактора).

Return

FALSE - указанный ID элемента не является строковым редактором или элементом DI_USERCONTROL.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля
DI_USERCONTROL | элемент управления, определяемый программистом

Замечания

Чтобы погасить курсор в элементе DI_USERCONTROL, необходимо заполнить поля структуры COORD значениями -1.

Пример

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


DM_SETCURSORSIZE

главная | сообщения | Dialog API
Сообщение DM_SETCURSORSIZE посылается обработчику диалога для установки размера курсора и признака его видимости в строках редактирования диалога и в элементе DI_USERCONTROL.

Param1

ID элемента диалога.

Param2

Старшее слово - размер курсора (от 0 до 100, в терминах структуры CONSOLE_CURSOR_INFO), младшее слово - признак видимости курсора (1 - курсор видим, 0 - курсор невидим).

Return

Предыдущие значения:
Старшее слово - размер курсора (от 0 до 100, в терминах структуры CONSOLE_CURSOR_INFO), младшее слово - признак видимости курсора (1 - курсор видим, 0 - курсор невидим).

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список (без флага DIF_DROPDOWNLIST)
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля
DI_USERCONTROL | элемент управления, определяемый программистом

Замечания

Для того, чтобы в элементе DI_USERCONTROL курсор стал видим, необходимо также переместить курсор в нужную позицию:
Coord.X=X;
Coord.Y=Y;
Info.SendDlgMessage(hDlg,DM_SETCURSORPOS,3,&Coord);
Это связано с тем, что по умолчанию позиция курсора в DI_USERCONTROL равна {-1,-1}.

Пример

// Установить курсор для элемента 3 полностью заполненной ячейкой.
Info.SendDlgMessage(hDlg,DM_SETCURSORSIZE,3,(void*)MAKELONG(1,99));
Смотрите также:
DialogInit, DM_GETCURSORSIZE, DM_GETCURSORPOS, DM_SETCURSORPOS


DM_SETDLGDATA

главная | сообщения | Dialog API
Сообщение DM_SETDLGDATA устанавливает указатель на пользовательские данные, связанные с диалогом. С каждым экземпляром диалога можно связать свои данные, предназначенные для использования плагином в его собственных целях.

Param1

0

Param2

Указатель на данные.

Return

Предыдущее значение.

Замечания

Первоначально здесь находится то, что передано в параметре Param функции DialogInit.

Пример

Смотрите также:
DialogInit, DM_GETDLGDATA


DM_SETDLGITEM

главная | сообщения | Dialog API
Сообщение DM_SETDLGITEM посылается Менеджеру диалогов для изменения информации о заданном элементе.

Param1

ID элемента диалога.

Param2

Указатель на заполненную структуру FarDialogItem.

Return

TRUE - данные обработаны.
FALSE - если такого ID элемента не существует или вы поменяли тип элемента.

Элементы

Элемент | Описание
Все | Все элементы диалога

Замечания

Вы не можете изменить тип элемента.
Смотрите также:
DialogInit


DM_SETDLGITEMSHORT

главная | сообщения | Dialog API
Сообщение DM_SETDLGITEMSHORT посылается Менеджеру диалогов для изменения информации о заданном элементе. Отличается от DM_SETDLGITEM тем, что FarDialogItem.Data, FarDialogItem.Mask и FarDialogItem.History не используется.

Param1

ID элемента диалога.

Param2

Указатель на заполненную структуру FarDialogItem. FarDialogItem.Data, FarDialogItem.Mask и FarDialogItem.History должны быть NULL.

Return

TRUE - данные обработаны. FALSE - если такого ID элемента не существует или вы поменяли тип элемента.

Элементы

Элемент | Описание
Все | Все элементы диалога

Замечания

Вы не можете изменить тип элемента.
Смотрите также:
DialogInit


DM_SETDROPDOWNOPENED

главная | сообщения | Dialog API
Сообщение DM_SETDROPDOWNOPENED используется для программного раскрытия или закрытия комбобокса или истории.

Param1

ID элемента, чей список (DI_COMBOBOX) или историю (DI_EDIT или DI_FIXEDIT с флагом DIF_HISTORY) мы хотим раскрыть.

Param2

TRUE - раскрыть список у элемента ID.
FALSE - закрыть открытый комбобокс или историю. В этом случае параметр Param1 игнорируется.

Return

Если Param2 = FALSE, всегда возвращается TRUE.
Если Param2 = TRUE, возвращается TRUE в случае удачного открытия комбобокса или истории, FALSE - возвращается, если был указан ID не поддерживаемого типа.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера

Замечания

В диалоге одновременно может быть открыт только один комбо-бокс или список истории. Поэтому посылка сообщения с Param2 = TRUE закрывает уже открытый комбобокс, а при посылке сообщения с Param2 = FALSE указывать ID элемента не требуется.

Пример

Смотрите также:
DialogInit, DM_GETDROPDOWNOPENED


DM_SETEDITPOSITION

главная | сообщения | Dialog API
Сообщение DM_SETEDITPOSITION посылается обработчику диалога для установки позиции и состояния курсора в строках редактирования диалога.

Param1

ID элемента диалога.

Param2

Указатель на структуру EditorSetPosition.

Return

FALSE - указанный ID элемента не является строковым редактором.
TRUE - позиция курсора установлена.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

Пример

Пример функции поддержки выделения мышью в строках ввода в плагине "Visual renaming files"
static void MouseSelect(HANDLE hDlg, DWORD idStr, DWORD dwMousePosX)
{
  SMALL_RECT dlgRect, itemRect;
  Info.SendDlgMessage(hDlg, DM_GETDLGRECT, 0, &dlgRect);
  Info.SendDlgMessage(hDlg, DM_GETITEMPOSITION, idStr, &itemRect);

  EditorSetPosition esp={sizeof(EditorSetPosition)};
  Info.SendDlgMessage(hDlg, DM_GETEDITPOSITION, idStr, &esp);

  int length=Info.SendDlgMessage(hDlg, DM_GETTEXT, idStr, 0);
  int CurPos=dwMousePosX - ( dlgRect.Left + itemRect.Left );

  if ( dwMousePosX <= ( dlgRect.Left + itemRect.Left ) && esp.LeftPos > 0 )
    esp.LeftPos-=1;
  else if ( dwMousePosX >= ( dlgRect.Left + itemRect.Right ) && CurPos+esp.LeftPos < length )
    esp.LeftPos+=1;

  if (CurPos+esp.LeftPos < 0)
    CurPos=0;
  else if (CurPos+esp.LeftPos > length)
    CurPos=length;
  else
    CurPos+=esp.LeftPos;

  esp.CurPos=esp.CurTabPos=CurPos;

  if (bStartSelect)
  {
    StartPosX=CurPos;
    bStartSelect=false;
  }

  EditorSelect es={sizeof(EditorSelect)};
  es.BlockType=BTYPE_COLUMN;
  es.BlockStartLine=es.BlockHeight=0;

  if (CurPos > StartPosX)
  {
    es.BlockStartPos=StartPosX;
    es.BlockWidth=CurPos-StartPosX;
  }
  else
  {
    es.BlockStartPos=CurPos;
    es.BlockWidth=StartPosX-CurPos;
  }

  Info.SendDlgMessage(hDlg, DM_SETSELECTION, idStr, &es);
  Info.SendDlgMessage(hDlg, DM_SETEDITPOSITION, idStr, &esp);
}
Смотрите также:
DialogInit, DM_GETCURSORPOS, DM_SETCURSORPOS, DM_GETEDITPOSITION


DM_SETFOCUS

главная | сообщения | Dialog API
Сообщение DM_SETFOCUS устанавливает клавиатурный фокус на заданный элемент диалога.

Param1

ID элемента, который должен получить фокус ввода.

Param2

0

Return

FALSE - это элемент не может иметь фокус ввода.
TRUE - фокус ввода успешно установлен.

Элементы

Элемент | Описание
Все | Все элементы, которые могут иметь клавиатурный фокус ввода.

Замечания

Сообщение DM_SETFOCUS порождает цепочку событий: DN_KILLFOCUS для элемента, который теряет фокус ввода и DN_GOTFOCUS - для элемента, который получит фокус ввода. События DN_KILLFOCUS и DN_GOTFOCUS не генерируются в случае, если Param1 совпадает с элементом, уже имеющим фокус ввода.
Смотрите также:
DialogInit


DM_SETHISTORY

главная | сообщения | Dialog API
Сообщение DM_SETHISTORY позволяет управлять наличием истории в строках ввода.

Param1

ID элемента диалога.

Param2

Указатель на строку, содержащую название истории ввода или NULL, если необходимо отключить историю в строке ввода.

Return

FALSE - указанный элемент диалога Param1 не поддерживает работу с историей.
TRUE - история успешно назначена элементу диалога Param1.

Элементы

Элемент | Описание
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера

Замечания

Если строка ввода пуста и у элемента DI_EDIT выставлен флаг DIF_USELASTHISTORY, то Far Manager сам подставит первое значение из истории в строку ввода.

Пример

Применение данного сообщения можно увидеть в исходных текстах плагина MultiArc.

Следующий пример выставляет историю и очищает строку ввода:

...
  else if(Msg == MAM_ARCSWITCHES)
  {
    static wchar_t SwHistoryName[MAX_PATH];
    FSF.sprintf(SwHistoryName,L"ArcSwitches\\%s",pdd->ArcFormat);
    Info.SendDlgMessage(hDlg,DM_SETHISTORY,4,SwHistoryName);
    Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,4,L"");
  }
...

Для того, чтобы Far Manager сам подставил первую строку из истории ключей, необходимо приведённый выше код переписать так:

...
  else if(Msg == MAM_ARCSWITCHES)
  {
    static wchar_t SwHistoryName[MAX_PATH];
    FSF.sprintf(SwHistoryName,L"ArcSwitches\\%s",pdd->ArcFormat);
    Info.SendDlgMessage(hDlg,DM_SETTEXTPTR,4,L"");
    Info.SendDlgMessage(hDlg,DM_SETHISTORY,4,SwHistoryName);
  }
...

Т.е. сначала строка ввода очищается, потом происходит назначение истории для элемента.

Смотрите также:
DialogInit, DM_ADDHISTORY, DIF_HISTORY


DM_SETINPUTNOTIFY

главная | сообщения | Dialog API
Сообщение DM_SETINPUTNOTIFY позволяет управлять механизмом посылки первичного необработанного события консоли (DN_INPUT) в диалоговую процедуру.

Param1

0 - выключить
1 - включить
-1 - получить состояние

Param2

0

Return

Предыдущее состояние.

Элементы

Элемент | Описание
Диалог | сообщение затрагивает только диалог

Замечания

Пример

Смотрите также:
DialogInit, DN_INPUT


DM_SETITEMDATA

главная | сообщения | Dialog API
Сообщение DM_SETITEMDATA устанавливает указатель на пользовательские данные, связанные с элементом диалога. С каждым элементом диалога можно связать свои данные, предназначенные для использования плагином в его собственных целях.

Param1

ID элемента управления.

Param2

Указатель на данные.

Return

Предыдущее значение.

Замечания

Пример

Смотрите также:
DialogInit, DM_GETITEMDATA, DM_GETDLGDATA, DM_SETDLGDATA


DM_SETITEMPOSITION

главная | сообщения | Dialog API
Сообщение DM_SETITEMPOSITION посылается Менеджеру диалогов для изменения позиции элемента.

Param1

ID элемента диалога.

Param2

Указатель на структуру SMALL_RECT с новыми координатами.

Return

TRUE - позиция элемента изменена.
FALSE - если такого ID элемента не существует или координаты заданы неверно (Left > Right или Top > Bottom)

Элементы

Элемент | Описание
Все | Все элементы диалога
Смотрите также:
DialogInit, DM_GETITEMPOSITION, DM_RESIZEDIALOG


DM_SETMAXTEXTLENGTH

главная | сообщения | Dialog API
Сообщение DM_SETMAXTEXTLENGTH посылается Менеджеру диалогов для установки максимального размера редактируемой строки.

Param1

ID элемента диалога.

Param2

Требуемый размер.

Return

Предыдущее значение размера редактируемой строки или 0 в случае ошибки.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_PSWEDIT | поле ввода пароля

Замечания

Для DI_COMBOBOX влияет только на строку редактирования (не распространяется на DIF_DROPDOWNLIST).

Пример

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


DM_SETSELECTION

главная | сообщения | Dialog API
Сообщение DM_SETSELECTION посылается обработчику диалога для выделения блока в строках редактирования диалога.

Param1

ID элемента диалога.

Param2

Указатель на структуру EditorSelect.

Return

FALSE - указанный ID элемента не является строковым редактором.
TRUE - текст выделен.

Элементы

Элемент | Описание
DI_COMBOBOX | комбинированный список
DI_EDIT | строка ввода
DI_FIXEDIT | поле ввода фиксированного размера
DI_PSWEDIT | поле ввода пароля

Замечания

Пример

Смотрите также:
DialogInit, DM_GETSELECTION


DM_SETTEXT

главная | сообщения | Dialog API
Сообщение DM_SETTEXT посылается Менеджеру диалогов для установки содержимого строк ввода или заголовков элементов диалога в новое значение.

Param1

ID элемента диалога.

Param2

Указатель на структуру FarDialogItemData. Значение этого параметра равное NULL игнорируется.

Return

Размер установленных данных в символах, без завершающего символа конца строки '\0'.

Элементы

Элемент | Описание
Все | Все элементы диалога

Замечания

Для DI_COMBOBOX влияет только на строку редактирования (не распространяется на DIF_DROPDOWNLIST)

Пример

Смотрите также:
DialogInit, DM_SETTEXTPTR


DM_SETTEXTPTR

главная | сообщения | Dialog API
Сообщение DM_SETTEXTPTR посылается Менеджеру диалогов для установки содержимого строк ввода или заголовков элементов диалога в новое значение. В отличии от сообщения DM_SETTEXT, это сообщение работает с указателем на строку.

Param1

ID элемента диалога.

Param2

Адрес строки, содержащей текст. Значение этого параметра равное NULL игнорируется.

Return

Размер установленных данных в символах, без завершающего символа конца строки '\0'.

Элементы

Элемент | Описание
Все | Все элементы диалога

Замечания

Для DI_COMBOBOX влияет только на строку редактирования (не распространяется на DIF_DROPDOWNLIST).

Пример

Смотрите также:
DialogInit, DM_SETTEXT


DM_SHOWDIALOG

главная | сообщения | Dialog API
Сообщение DM_SHOWDIALOG посылается Менеджеру диалогов для того, чтобы показать или спрятать диалог на экране.

Param1

TRUE - показать диалог
FALSE - скрыть диалог

Param2

0

Return

0
Смотрите также:
DM_SHOWITEM, DialogInit


DM_SHOWITEM

главная | сообщения | Dialog API
Сообщение DM_SHOWITEM посылается Менеджеру диалогов для того, чтобы показать или спрятать элемент диалога.

Param1

ID элемента диалога.

Param2

Одно из трёх значений:
  • -1 - получить состояние элемента
  • 0 - погасить элемент
  • 1 - показать элемент

Return

Предыдущее состояние элемента диалога.

Элементы

Элемент | Описание
Все | Все элементы диалога

Замечания

  1. Элемент диалога принудительно перерисовывается, если он видим и Param2 = 1.
  2. Элемент диалога не перерисовывается для случая Param2 = -1.

Пример

Смотрите также:
DM_SHOWDIALOG, DialogInit


DM_USER

главная | сообщения | Dialog API
Сообщение DM_USER предназначено для пользовательских сообщений.

Param1

На усмотрение программиста.

Param2

На усмотрение программиста.

Return

На усмотрение программиста.

Элементы

Элемент | Описание
Все | Все элементы диалога

Замечания

Пример

#define DMREV_RESULT DM_USER+1

intptr_t WINAPI ReversiDialogProc(HANDLE hDlg, intptr_t Msg,intptr_t Param1, void *Param2)
{
...
    Info.SendDlgMessage(hDlg,DMREV_RESULT,0,0);
...
    case DMREV_RESULT: // пользовательское определение
      ...
      return 0;
...
}
Смотрите также:
DialogInit


Settings API

главная

Краткое описание Settings API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция | Описание
ConfigureW | настройка плагина

Сервисные функции, указатели на эти функции плагин получает от Far Manager в функции SetStartupInfoW

Функция | Описание
SettingsControl | управляет настройками плагина

Структуры

Структура | Описание
ConfigureInfo | информация о настраиваемом плагине
FarSettingsCreate | управление настройками плагина
FarSettingsEnum | управление настройками плагина
FarSettingsHistory | управление настройками плагина
FarSettingsItem | управление настройками плагина
FarSettingsName | управление настройками плагина
FarSettingsValue | управление настройками плагина
Смотрите также:
Типы и определения


ConfigureW

главная | экспортируемые функции | Settings API
Функция ConfigureW вызывается Far Manager, когда пользователь выбрал в меню "Параметры внешних модулей" пункт, добавленный туда данным плагином.
intptr_t WINAPI ConfigureW(
  const struct ConfigureInfo *Info
);

Параметры

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

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

Если функция завершается успешно, то возвращается 1 - в этом случае Far Manager выполняет обновление панелей.
Если пользователь прервал выполнение диалога конфигурации, то верните 0.

Замечания

Если ваш плагин содержит только одну функцию (т.е. добавляет один пункт в меню "Параметры внешних модулей"), то аргумент Info можно игнорировать.

Пример

Пример из плагина "TmpPanel".
intptr_t WINAPI ConfigureW(const struct ConfigureInfo *Info)
{
  return Config();
}
Смотрите также:
GetPluginInfoW


SettingsControl

главная | сервисные функции | Settings API
Функция SettingsControl позволяет управлять загрузкой настроек из базы данных плагина или Far Manager, а также сохранением настроек в базу данных плагина.

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

  • В обязательном порядке используйте эту функцию для портабельности плагина, вместо работы с реестром!
intptr_t WINAPI SettingsControl(
  HANDLE hHandle,
  enum FAR_SETTINGS_CONTROL_COMMANDS Command,
  intptr_t Param1,
  void *Param2
);

Параметры

hHandle
Смотрите описание Command.
Command
Может быть одним из следующих значений (перечисление FAR_SETTINGS_CONTROL_COMMANDS):
Команда Описание
SCTL_CREATE Создаёт объект "настройки" для заданного плагина.
hHandle должен быть установлен в значение INVALID_HANDLE_VALUE.
Param1 указывает способ хранения настройки (перечисление FAR_PLUGIN_SETTINGS_LOCATION):
Константа | Описание
PSL_ROAMING | в перемещаемом профиле
PSL_LOCAL | в локальном профиле
Param2 указатель на структуру FarSettingsCreate (поле FarSettingsCreate.Guid должно быть заполнено).
Функция при неудаче вернёт FALSE.
SCTL_FREE Удалить объект "настройки" для заданного плагина.
hHandle описатель настроек, созданный по команде SCTL_CREATE (поле FarSettingsCreate.Handle).
Param1 и Param2 игнорируются.
Функция возвращает TRUE.
SCTL_SET Сохранить настройки.
hHandle описатель настроек, созданный по команде SCTL_CREATE (поле FarSettingsCreate.Handle).
Param1 игнорируется. Param2 указатель на структуру FarSettingsItem.
Функция при неудаче вернёт FALSE.
SCTL_GET Загрузить настройки.
hHandle описатель настроек, созданный по команде SCTL_CREATE (поле FarSettingsCreate.Handle).
Param1 игнорируется. Param2 указатель на структуру FarSettingsItem.
Функция при неудаче вернёт FALSE.
SCTL_CREATESUBKEY Открыть ключ настроек. Если такого ключа нет, то создать его.
hHandle описатель настроек, созданный по команде SCTL_CREATE (поле FarSettingsCreate.Handle).
Param1 игнорируется. Param2 указатель на структуру FarSettingsValue.
Функция возвращает уровень вложенности ключа (!! требуется уточнение !!).
SCTL_OPENSUBKEY Открыть существующий ключ настроек.
hHandle описатель настроек, созданный по команде SCTL_CREATE (поле FarSettingsCreate.Handle).
Param1 игнорируется. Param2 указатель на структуру FarSettingsValue.
Функция возвращает уровень вложенности ключа (!! требуется уточнение !!).
SCTL_ENUM Получить список подключей и значений.
hHandle описатель настроек, созданный по команде SCTL_CREATE (поле FarSettingsCreate.Handle).
Param1 игнорируется. Param2 указатель на структуру FarSettingsEnum.
Функция при неудаче вернёт FALSE.
SCTL_DELETE Удалить подключ или значение.
hHandle описатель настроек, созданный по команде SCTL_CREATE (поле FarSettingsCreate.Handle).
Param1 игнорируется. Param2 - указатель на структуру FarSettingsValue.
Функция при неудаче вернёт FALSE.
Param1
Указывает на Параметр1 команды. Смотрите описание Command.
Param2
Указывает на Параметр2 команды. Смотрите описание Command.

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

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

Пример

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

PanelControl


ConfigureInfo

главная | структуры | Settings API
Структура ConfigureInfo используется Far Manager'ом в функции ConfigureW.
struct ConfigureInfo
{
  size_t StructSize;
  const GUID *Guid;
};

Элементы

StructSize
Это поле содержит размер структуры ConfigureInfo.
Guid
GUID выбранного пункта, в списке пунктов, экспортированных плагином в меню "Параметры внешних модулей".
Смотрите также:
структуры, GetPluginInfoW


FarSettingsCreate

главная | структуры | Settings API
Структура FarSettingsCreate используется в функции SettingsControl для управления настройками.
struct FarSettingsCreate
{
  size_t StructSize;
  GUID Guid;
  HANDLE Handle;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarSettingsCreate. Перед использованием структуры плагин должен заполнить поле.
Guid
Поле должно содержать GUID плагина, для которого создаётся объект "настройки".
Handle
Far Manager в это поле поместит описатель созданных настроек для указанного в Guid плагина.

Замечания

Смотрите также:
структуры, SettingsControl


FarSettingsEnum

главная | структуры | Settings API
Структура FarSettingsEnum используется в функции SettingsControl для управления настройками.
struct FarSettingsEnum
{
  size_t StructSize;
  size_t Root;
  size_t Count;
  union
  {
    const struct FarSettingsName *Items;
    const struct FarSettingsHistory *Histories;
  }
#ifndef __cplusplus
  Value
#endif
  ;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarSettingsEnum. Перед использованием структуры плагин должен заполнить поле.
Root
Описатель ключа, откуда брать информацию.
Count
Количество элементов Value.
Items
Массив элементов типа FarSettingsName.
Histories
Массив элементов типа FarSettingsHistory.

Замечания

Смотрите также:
структуры, SettingsControl


FarSettingsHistory

главная | структуры | Settings API
Структура FarSettingsHistory используется в функции SettingsControl для управления настройками.
struct FarSettingsHistory
{
  const wchar_t *Name;
  const wchar_t *Param;
  GUID PluginId;
  const wchar_t *File;
  FILETIME Time;
  BOOL Lock;
};

Элементы

Name
Полный путь.
Param
Значение, возвращаемое плагином в OpenPanelInfo.ShortcutData.
PluginId
GUID плагина для пути на панели плагина или GUID Far Manager для реального пути.
File
Имя файла-контейнера для пути на панели плагина.
Time
Структура FILETIME с временем создания пункта истории.
Lock
Состояние залоченности пункта истории от удаления.

Замечания

Смотрите также:
структуры, SettingsControl


FarSettingsItem

главная | структуры | Settings API
Структура FarSettingsItem используется в функции SettingsControl для управления настройками.
struct FarSettingsItem
{
  size_t StructSize;
  size_t Root;
  const wchar_t *Name;
  enum FARSETTINGSTYPES Type;
  union
  {
    unsigned __int64 Number;
    const wchar_t *String;
    struct
    {
      size_t Size;
      const void *Data;
    } Data;
  }
#ifndef __cplusplus
  Value
#endif
  ;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarSettingsItem. Перед использованием структуры плагин должен заполнить поле.
Root
Место хранения настроек. 0 - корень для плагина. Подключи получаются при помощи команды SCTL_OPENSUBKEY.
Name
Имя сохраняемого или запрашиваемого значения.
Type
Тип сохраняемого или запрашиваемого значения (перечисление FARSETTINGSTYPES):
Тип | Описание
FST_UNKNOWN | не определен
FST_SUBKEY | подключ
FST_QWORD | число
FST_STRING | строка
FST_DATA | данные
Number
Число.
String
Строка.
Data
Данные. Data.Size - размер данных, Data.Data - сами данные.

Замечания

Смотрите также:
структуры, SettingsControl


FarSettingsName

главная | структуры | Settings API
Структура FarSettingsName используется в функции SettingsControl для управления настройками.
struct FarSettingsName
{
  const wchar_t *Name;
  enum FARSETTINGSTYPES Type;
};

Элементы

Name
Имя запрашиваемого значения.
Type
Тип запрашиваемого значения (перечисление FARSETTINGSTYPES):
Тип | Описание
FST_UNKNOWN | не определен
FST_SUBKEY | подключ
FST_QWORD | число
FST_STRING | строка
FST_DATA | данные

Замечания

Смотрите также:
структуры, SettingsControl


FarSettingsValue

главная | структуры | Settings API
Структура FarSettingsValue используется в функции SettingsControl для управления настройками.
struct FarSettingsValue
{
  size_t StructSize;
  size_t Root;
  const wchar_t *Value;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarSettingsValue. Перед использованием структуры плагин должен заполнить поле.
Root
Описатель ключа, откуда брать информацию.
Value
Имя.

Замечания

Смотрите также:
структуры, SettingsControl


Plugin Manager API

главная

Краткое описание Plugin Manager API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция Описание

Сервисные функции, указатели на эти функции плагины получают от Far Manager в функции SetStartupInfoW

Функция | Описание
PluginsControl | управляет сторонними плагинами

Структуры

Структура | Описание
FarGetPluginInformation | получение информации о любом плагине
Смотрите также:
Типы и определения


PluginsControl

главная | сервисные функции | Plugin Manager API
Функция 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


FarGetPluginInformation

главная | структуры | Plugin Manager API
Структура FarGetPluginInformation используется для получения информации о любом установленном плагине.
struct FarGetPluginInformation
{
  size_t StructSize;
  const wchar_t *ModuleName;
  FAR_PLUGIN_FLAGS Flags;
  struct PluginInfo *PInfo;
  struct GlobalInfo *GInfo;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarGetPluginInformation. Перед использованием структуры плагин должен заполнить поле.
ModuleName
Полное имя плагина с путём.
Flags
Может быть комбинацией следующих значений (тип FAR_PLUGIN_FLAGS):
Флаг | Описание
FPF_LOADED | Плагин загружен Far Manager'ом.
FPF_ANSI | Плагин является модулем для ANSI-версии Far Manager.
FPF_NONE | Нулевой флаг.
PInfo
Указатель на структуру PluginInfo плагина.
GInfo
Указатель на структуру GlobalInfo плагина.

Замечания

Смотрите также:
структуры


Miscellaneous API

главная

Краткое описание Miscellaneous API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция | Описание
ProcessConsoleInputW | предобработка консольных событий плагином
ProcessSynchroEventW | позволяет плагину выполнить код в контексте главного потока Far Manager

Сервисные функции, указатели на эти функции плагины получают от Far Manager в функции SetStartupInfoW

Функция | Описание
AdvControl | дополнительные управляющие функции; работают везде: в панелях/редакторе/просмотре
ColorDialog | диалог изменения цвета
RegExpControl | управляющие функции регулярных выражений
RestoreScreen | восстанавливает предварительно сохранённую область экрана
SaveScreen | сохраняет область экрана
Text | выводит текстовую строку на экран

Структуры

Структура | Описание
FAR_CHAR_INFO | экранная символьная ячейка
FarColor | цвет и атрибуты текста и фона
FarSetColors | изменение цветовой схемы Far Manager
ProcessConsoleInputInfo | информация о консольном событии Far Manager
ProcessSynchroEventInfo | информация о событии, которое будет исполнено в контексте основного потока Far Manager
ProgressValue | установка статуса операции на кнопке Far Manager в панели задач
RegExpMatch | используется в структуре RegExpSearch
RegExpSearch | используется в регулярных выражениях Far Manager
WindowInfo | информация об окне Far Manager
WindowType | информация о типе окна Far Manager
Смотрите также:
Типы и определения


ProcessConsoleInputW

главная | экспортируемые функции | Miscellaneous API
Функция ProcessConsoleInputW позволяет плагину выполнить предобработку консольных событий.
intptr_t WINAPI ProcessConsoleInputW(
  struct ProcessConsoleInputInfo *Info
);

Параметры

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

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

  • 0 - продолжить обработку событий в Far Manager, никаких изменений со стороны плагина не производилось;
  • 1 - плагин всё сделал сам, дальнейшей обработки событий в Far Manager не требуется;
  • 2 - плагин поменял поле ProcessConsoleInputInfo.Rec, Far Manager должен принять новое значение.

Замечания

Пример

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

ПРИМЕЧАНИЕ

Данное API не является окончательным и может быть изменено или удалено в любой момент.


ProcessSynchroEventW

главная | экспортируемые функции | Miscellaneous API
ProcessSynchroEventW позволяет плагину выполнить код в контексте главного потока Far Manager.
intptr_t WINAPI ProcessSynchroEventW(
  const struct ProcessSynchroEventInfo *Info
);

Параметры

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

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

Возвращаемое значение зависит от типа события, смотрите описание событий для уточнения информации.
Для необрабатываемых плагином событий, функция должна возвращать 0.


AdvControl

главная | сервисные функции | Miscellaneous API
Функция 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_SETCURRENTWINDOW Внимание!

  • Переключение не произойдёт до тех пор, пока не будет вызвана команда 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.

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

  • Работает в Windows 7 и выше. Для подробностей см. http://msdn.microsoft.com - метод ITaskbarList3::SetProgressStat
ACTL_SETPROGRESSVALUE Отображает и корректирует прогресс операции на кнопке Far Manager в панели задач.
Param1 не используется.
Param2 указатель на структуру ProgressValue.
Функция возвращает TRUE.

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

  • Работает в Windows 7 и выше. Для подробностей см. http://msdn.microsoft.com - метод ITaskbarList3::SetProgressValue
ACTL_PROGRESSNOTIFY Far Manager выполняет стандартное оповещение о завершении операции (при неактивном окне приложения кратковременное мерцание кнопкой Far Manager в панели задач и последующая подсветка её до получения окном фокуса).
Param1 не используется.
Param2 не используется.
Функция возвращает TRUE.
ACTL_SYNCHRO Позволяет потоку, запущенному плагином, выполнить код в контексте главного потока Far Manager посредством вызова функции ProcessSynchroEventW.
Param1 не используется.
Param2 указатель на данные, передающиеся в функцию ProcessSynchroEventW, может быть NULL.
Функция всегда возвращает 0.

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

  • Проверка на вызов функции ProcessSynchroEventW проводится в GetInputRecord, т.е. гарантированного времени отклика нет, но должно быть достаточно быстро.
ACTL_WAITKEY Ожидать клавишу.
Param1 не используется.
Param2 = NULL - ждём любую клавишу.
Param2 указатель на заполненную структуру INPUT_RECORD (код клавиши) - ждём конкретную клавишу.
Функция всегда возвращает 0.
Param1
Указывает на параметры1 команды. Смотрите описание Command.
Param2
Указывает на параметры2 команды. Смотрите описание Command.

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

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


ColorDialog

главная | сервисные функции | Miscellaneous API
Функция ColorDialog выводит на экран стандартный Far Manager диалог изменения цвета.
BOOL WINAPI ColorDialog(
  const GUID *PluginId,
  COLORDIALOGFLAGS Flags,
  struct FarColor *Color
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
Flags
Может быть комбинацией следующих значений (тип COLORDIALOGFLAGS):
Флаг | Описание
CDF_NONE | нулевой флаг
Color
Цветовые атрибуты, адрес структуры FarColor, куда будет помещено значение выбранного цвета.

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

Функция возвращает TRUE, в случае выбора нового цвета, и FALSE, если пользователь прервал ввод.


RegExpControl

главная | сервисные функции | Miscellaneous API
Функция RegExpControl позволяет управлять Регулярными выражениями.
intptr_t WINAPI RegExpControl(
  HANDLE hHandle,
  enum FAR_REGEXP_CONTROL_COMMANDS Command,
  intptr_t Param1,
  void *Param2
);

Параметры

hHandle
Смотрите описание Command.
Command
Может быть одним из следующих значений (перечисление FAR_REGEXP_CONTROL_COMMANDS):
Команда | Описание
RECTL_CREATE | Создаёт структуры под Регулярные выражения. hHandle должен быть установлен в значение NULL. Param1 не используется. Param2 - указатель типа HANDLE, в который запишется созданный описатель Регулярных выражений. Функция при неудаче вернёт FALSE и Param2 = INVALID_HANDLE_VALUE.
RECTL_FREE | Освобождает память занятую при создании Регулярных выражений. hHandle - описатель Регулярных выражений, созданный по команде RECTL_CREATE. Param1 не используется. Param2 не используется. Функция возвращает TRUE.
RECTL_COMPILE | Инициализирует Регулярные выражения. hHandle - описатель Регулярных выражений, созданный по команде RECTL_CREATE. Param1 не используется. Param2 - указатель на строку с Регулярными выражениями. Функция возвращает TRUE при удачной компиляции строки.
RECTL_OPTIMIZE | Оптимизирует Регулярные выражения после инициализации, применяется после RECTL_COMPILE. hHandle - описатель Регулярных выражений, созданный по команде RECTL_CREATE. Param1 не используется. Param2 не используется. Функция возвращает TRUE при удачной оптимизации.
RECTL_MATCHEX | Сопоставляет Регулярное выражение строке. hHandle - описатель Регулярных выражений, созданный по команде RECTL_CREATE. Param1 не используется. Param2 указатель на заполненную структуру RegExpSearch. Функция возвращает TRUE при удачной операции сопоставления.
RECTL_SEARCHEX | Ищет в строке подстроки заданные Регулярным выражением. hHandle - описатель Регулярных выражений, созданный по команде RECTL_CREATE. Param1 не используется. Param2 указатель на заполненную структуру RegExpSearch. Функция возвращает TRUE, если удалось найти подстроки.
RECTL_BRACKETSCOUNT | Количество скобок () в Регулярном выражении. hHandle - описатель Регулярных выражений, созданный по команде RECTL_CREATE. Param1 не используется. Param2 не используется. Функция возвращает количество скобок в Регулярном выражении, при этом всё выражение целиком интерпретируется в качестве первой скобки.
Param1
Указывает на параметры1 команды. Смотрите описание Command.
Param2
Указывает на параметры2 команды. Смотрите описание Command.

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

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

Пример

HANDLE re;
if (Info.RegExpControl(0,RECTL_CREATE,0,&re))
{
  if (Info.RegExpControl(re,RECTL_COMPILE,0,(void*)L"/[0-9]+/"))
  {
    int brackets=Info.RegExpControl(re,RECTL_BRACKETSCOUNT,0,0);

    FILE *log=fopen("c:\\plugins.log","at");
    fprintf(log,"br: %d\n",brackets);
    fclose(log);

    if (!brackets)
    {
      Info.RegExpControl(re,RECTL_FREE,0,0);
      return;
    }

    RegExpMatch *match=(RegExpMatch*)malloc(brackets*sizeof(RegExpMatch));

    RegExpSearch search={
      L"test 123 test",
      0,
      13,
      match,
      brackets,
      0
    };

    if (Info.RegExpControl(re,RECTL_SEARCHEX,0,&search))
    {
      FILE *log=fopen("c:\\plugins.log","at");
      fprintf(log,"found: %d %d\n",match[0].start,match[0].end);
      fclose(log);
    }
    else
    {
      FILE *log=fopen("c:\\plugins.log","at");
      fprintf(log,"not found\n");
      fclose(log);
    }
    free(match);
  }
  Info.RegExpControl(re,RECTL_FREE,0,0);
}
Смотрите также:
PanelControl


RestoreScreen

главная | сервисные функции | Miscellaneous API
Функция RestoreScreen восстанавливает область экрана предварительно сохранённую функцией SaveScreen.
void WINAPI RestoreScreen(
  HANDLE hScreen
);

Параметры

hScreen
Описатель, полученный после вызова SaveScreen. После вызова RestoreScreen он больше не может использоваться.

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

Нет.

Замечания

Для увеличения скорости RestoreScreen перерисовывает только изменённую область экрана. RestoreScreen не может корректно определить эту область, если область экрана была изменена не функцией Far Manager (например, запущенной из плагина внешней программой). В этом случае сначала вы должны вызвать RestoreScreen с параметром NULL, чтобы показать Far Manager'у, что экран изменён, а затем вызвать RestoreScreen как обычно - с описателем от SaveScreen.
Смотрите также:
SaveScreen


SaveScreen

главная | сервисные функции | Miscellaneous API
Функция SaveScreen сохраняет область экрана. Для восстановления сохранённой области используйте функцию RestoreScreen.
HANDLE WINAPI SaveScreen(
  intptr_t X1,
  intptr_t Y1,
  intptr_t X2,
  intptr_t Y2
);

Параметры

X1,Y1,X2,Y2
Координаты области экрана. Если X2 или Y2 равны -1, то они заменяются соответственно правой или нижней координатой экрана. Таким образом, SaveScreen(0,0,-1,-1) сохранит весь экран.

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

Возвращаемое значение используется функцией RestoreScreen. Все указатели, возвращённые SaveScreen , должны быть переданы RestoreScreen, чтобы предотвратить утечку памяти.

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


Text

главная | сервисные функции | Miscellaneous API
Функция Text выводит текстовую строку на экран. Far Manager использует внутреннюю буферизацию экрана для увеличения производительности, поэтому для совместимости плагин не должен выводить текст на экран напрямую, а только используя функцию Text.
void WINAPI Text(
  intptr_t X,
  intptr_t Y,
  const struct FarColor *Color,
  const wchar_t *Str
);

Параметры

X,Y
Координаты вывода текста. Начало системы координат (0,0) - в верхней левой ячейке экрана.
Color
Цветовые атрибуты текста, указатель на структуру FarColor.
Str
Текстовая строка, завершающаяся нулём. После вывода строки, вы можете также вызвать Text с параметром Str равным NULL - эта операция сбросит экранный буфер Far Manager и ваши изменения вступят в силу немедленно. Но не используйте это слишком часто, чтобы не снизить общую производительность.

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

Нет.


FAR_CHAR_INFO

главная | структуры | Miscellaneous API
Структура FAR_CHAR_INFO определяет Unicode-код символа и цветовые атрибуты (передний план и фон) экранной символьной ячейки.
struct FAR_CHAR_INFO
{
  WCHAR Char;
  struct FarColor Attributes;
};

Элементы

Char
Определяет Unicode-код символ экранной ячейки.
Attributes
Цветовые атрибуты, структура типа FarColor.

Замечания

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


FarColor

главная | структуры | Miscellaneous API
Структура FarColor описывает код цвета, используется, например, в функции Text.
struct FarColor
{
  FARCOLORFLAGS Flags;
  COLORREF ForegroundColor;
  COLORREF BackgroundColor;
  void *Reserved;
};

Элементы

Flags
Может быть комбинацией следующих значений (тип FARCOLORFLAGS):
Флаг | Описание
FCF_FG_4BIT | цвет символа задан стандартным кодом в 4 бита
FCF_BG_4BIT | цвет фона символа задан стандартным кодом в 4 бита
FCF_4BITMASK | стандартный четырехбитный цвет (FCF_FG_4BIT|FCF_BG_4BIT)
FCF_EXTENDEDFLAGS | расширенные атрибуты (~FCF_4BITMASK)
FCF_FG_BOLD | расширенные атрибуты, задан стиль: "жирный" символ
FCF_FG_ITALIC | расширенные атрибуты, задан стиль: "наклонный" символ
FCF_FG_UNDERLINE | расширенные атрибуты, задан стиль: "подчеркнутый" символ
FCF_STYLEMASK | расширенные атрибуты, используются стили (FCF_FG_BOLD|FCF_FG_ITALIC|FCF_FG_UNDERLINE)
FCF_NONE | нулевой флаг
ForegroundColor
Цвет символа, значение типа COLORREF.
BackgroundColor
Цвет фона символа, значение типа COLORREF.
Reserved
Не используется.

Замечания

При формировании цвета для стандартной консоли Windows обязательно указывайте флаги FCF_FG_4BIT и FCF_BG_4BIT.


FarSetColors

главная | структуры | Miscellaneous API
Структура FarSetColors используется в функции AdvControl для изменения цветовой схемы Far Manager.
struct FarSetColors
{
  size_t StructSize;
  FARSETCOLORFLAGS Flags;
  size_t StartIndex;
  size_t ColorItem;
  struct FarColor *Colors;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarSetColors. Перед использованием структуры плагин должен заполнить поле.
Flags
Комбинация флагов (тип FARSETCOLORFLAGS):
Флаг | Описание
FSETCLR_REDRAW | После изменений цветовой схемы обновить экран.
FSETCLR_NONE | Нулевой флаг.
StartIndex
Начальная позиция индекса цветовой схемы для замены.
ColorItem
Количество позиций цветовой схемы для замены.
Colors
Указатель на массив цветовых схем - массив структур FarColor цветовых атрибутов.

Замечания

Смотрите также:
структуры, ACTL_SETARRAYCOLOR


ProcessConsoleInputInfo

главная | структуры | Miscellaneous API
Структура ProcessConsoleInputInfo содержит информацию о консольном событии, поступающем в функцию ProcessConsoleInputW.
struct ProcessConsoleInputInfo
{
  size_t StructSize;
  PROCESSCONSOLEINPUT_FLAGS Flags;
  INPUT_RECORD Rec;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessConsoleInputInfo.
Flags
Комбинация следующих значений (тип PROCESSCONSOLEINPUT_FLAGS):
Флаг | Описание
PCIF_FROMMAIN | Функция ProcessConsoleInputW вызвана из основного цикла сбора консольных событий.
PCIF_NONE | Нулевой флаг.
Rec
Структура INPUT_RECORD. Эта структура определена в Windows API и содержит информацию о консольном событии.

Замечания

Смотрите также:
Структуры, ProcessConsoleInputW


ProcessSynchroEventInfo

главная | структуры | Miscellaneous API
Структура ProcessSynchroEventInfo содержит информацию о событии, поступающем в функцию ProcessSynchroEventW.
struct ProcessSynchroEventInfo
{
  size_t StructSize;
  intptr_t Event;
  void *Param;
};

Элементы

StructSize
Это поле содержит размер структуры ProcessSynchroEventInfo.
Event
Тип события. Одно из следующих значений (перечисление SYNCHRO_EVENTS):
Событие Описание
SE_COMMONSYNCHRO Событие приходит, если плагином вызывается функция Info.AdvControl(...,ACTL_SYNCHRO,Param1,Param2).
Param указывает на переданные данные в параметре Info.AdvControl(...,Param2).
Функция ProcessSynchroEventW должна вернуть 0.
Param
Значение указателя зависит от типа события. Смотрите описание событий для уточнения информации.

Замечания

Смотрите также:
Структуры, ProcessSynchroEventW


ProgressValue

главная | структуры | Miscellaneous API
Структура ProgressValue используется в функции AdvControl для корректировки прогресса операции на кнопке Far Manager'а в тескбаре.
struct ProgressValue
{
  size_t StructSize;
  unsigned __int64 Completed;
  unsigned __int64 Total;
};

Элементы

StructSize
Это поле должно содержать размер структуры ProgressValue. Перед использованием структуры плагин должен заполнить поле.
Completed
Завершено.
Total
Всего.

Замечания

Смотрите также:
структуры


RegExpMatch

главная | структуры | Miscellaneous API
Структура RegExpMatch используется в структуре RegExpSearch Регулярных выражений Far Manager.
struct RegExpMatch
{
  intptr_t start;
  intptr_t end;
};

Элементы

start
Номер символа в строке, с которого началось соответствие Регулярному выражению.
end
Номер символа в строке, которым закончилось соответствие Регулярному выражению.

Замечания

Нумерация начинается с 0.

Пример

Смотрите также:
структуры, RegExpSearch


RegExpSearch

главная | структуры | Miscellaneous API
Структура RegExpSearch используется в функции RegExpControl Регулярных выражений Far Manager.
struct RegExpSearch
{
  const wchar_t *Text;
  intptr_t Position;
  intptr_t Length;
  struct RegExpMatch *Match;
  intptr_t Count;
  void *Reserved;
};

Элементы

Text
Исходная строка, в которой будет производиться поиск с использованием Регулярных выражений.
Position
Позиция в строке с которой будет осуществляться поиск.
Length
Длина строки.
Match
Скобки, массив структур RegExpMatch.
Count
Количество скобок.
Reserved
Зарезервировано для будущих нужд, обязательно должно быть NULL.

Замечания

Пример

Смотрите также:
структуры, RegExpMatch


WindowInfo

главная | структуры | Miscellaneous API
Структура WindowInfo содержит информацию о конкретном окне Far Manager. Плагин может получить информацию, используя команду ACTL_GETWINDOWINFO.
struct WindowInfo
{
  size_t StructSize;
  intptr_t Id;
  wchar_t *TypeName;
  wchar_t *Name;
  intptr_t TypeNameSize;
  intptr_t NameSize;
  intptr_t Pos;
  enum WINDOWINFO_TYPE Type;
  WINDOWINFO_FLAGS Flags;
};

Элементы

StructSize
Это поле должно содержать размер структуры WindowInfo. Перед использованием структуры плагин должен заполнить поле.
Id
Это поле содержит для диалога описатель, для программы просмотра и редактора - ID.
TypeName
Имя типа окна (Panels,View,Edit,Help,VMenu), зависит от текущего языка.
Name
Имя окна. Для окон типа WTYPE_VIEWER, WTYPE_EDITOR содержит имя файла.
Для панелей - имя текущего файлового объекта.
Для окна помощи - полный путь к просматриваемому HLF-файлу.
Для диалогов и меню - заголовок.
TypeNameSize
Размер буфера TypeName в символах, с учётом завершающего '\0'.
NameSize
Размер буфера Name в символах, с учётом завершающего '\0'.
Pos
Номер окна, о котором нужно узнать информацию. Нумерация идёт с 0. Pos = -1 вернёт информацию о текущем окне.
Type
Тип окна. Может иметь одно из следующих значений (перечисление WINDOWINFO_TYPE):
Тип | Описание
WTYPE_PANELS | файловые панели
WTYPE_VIEWER | окно встроенной программы просмотра
WTYPE_EDITOR | окно встроенного редактора
WTYPE_DIALOG | диалог
WTYPE_VMENU | меню
WTYPE_HELP | окно подсказки
Flags
Могут быть комбинацией следующих значений (тип WINDOWINFO_FLAGS):
Тип | Описание
WIF_MODIFIED | признак модификации содержимого файла в окне, может быть только у WTYPE_EDITOR
WIF_CURRENT | признак, является ли окно текущим
WIF_MODAL | признак, является ли окно модальным

Пример

void GetFarWindowInfo()
{
  WindowInfo WInfo={sizeof(WindowInfo)};
  int CountWindow;
  int I;
  FILE *Fp;

  if((Fp=_wfopen(L"window.log",L"a+t")) == NULL)
      return ;

  // запросили число окон
  CountWindow=(int)Info.AdvControl(Info.ModuleNumber,ACTL_GETWINDOWCOUNT,0,NULL);
  fwprintf(Fp,L"WindowCount=%i\n",CountWindow);

  for ( I=0; I < CountWindow; I++ )
  {
    // установили нужный номер
    WInfo.Pos=I;

    WInfo.TypeName=NULL;
    WInfo.Name=NULL;

    // запросили информацию об размере буферов
    Info.AdvControl(Info.ModuleNumber,ACTL_GETWINDOWINFO,0,(void*)&WInfo);

    WInfo.TypeName=(wchar_t *) malloc(WInfo.TypeNameSize);
    WInfo.Name=(wchar_t *) malloc(WInfo.NameSize);

    // запросили информацию
    Info.AdvControl(Info.ModuleNumber,ACTL_GETWINDOWINFO,0,(void*)&WInfo);

    // распечатали её
    fwprintf(Fp,L"Window[%i], Type=%i (%s), File=[%s] Current=%i, Modified=%i\n",
               I,WInfo.Type,WInfo.TypeName,WInfo.Name,
               WInfo.Current,WInfo.Modified);

    free(WInfo.TypeName);
    free(WInfo.Name);

 }
  fclose(Fp);

  // установили окно номер 1 (то есть второе)
  Info.AdvControl(Info.ModuleNumber,ACTL_SETCURRENTWINDOW,0,(void*)1);
}
Смотрите также:
структуры, AdvControl


WindowType

главная | структуры | Miscellaneous API
Структура WindowType содержит информацию о типе окна Far Manager, используется в команде ACTL_GETWINDOWTYPE.
struct WindowType
{
  size_t StructSize;
  enum WINDOWINFO_TYPE Type;
};

Элементы

StructSize
Это поле должно содержать размер структуры WindowType. Перед использованием структуры плагин должен заполнить поле.
Type
Тип окна. Может иметь одно из следующих значений (перечисление WINDOWINFO_TYPE):
Тип | Описание
WTYPE_PANELS | файловые панели
WTYPE_VIEWER | окно встроенной программы просмотра
WTYPE_EDITOR | окно встроенного редактора
WTYPE_DIALOG | диалог
WTYPE_VMENU | меню
WTYPE_HELP | окно подсказки

Пример

Смотрите также:
структуры, AdvControl


Macro API

главная

Краткое описание Macro API

Экспортируемые функции, т.е. те, которые плагин экспортирует для Far Manager

Функция Описание

Сервисные функции, указатели на эти функции плагины получают от Far Manager в функции SetStartupInfoW

Функция | Описание
MacroControl | управляет макрокомандами

Структуры

Структура | Описание
FarGetValue | запрошенная макропеременная
FarMacroCall | возврат данных в макрос
FarMacroLoad | загрузка макрофайлов
FarMacroValue | макропеременная
MacroAddMacro | добавить макропоследовательность в память
MacroExecuteString | передать исполняемый скрипт в Far Manager
MacroParseResult | результат проверки макропоследовательности
MacroSendMacroText | описание макропоследовательности
OpenMacroInfo | значения, передаваемые плагину из макропоследовательности

Коды операций

Константа | Описание
MACROOPCODE | коды операций макродвижка
Смотрите также:
Типы и определения


MacroControl

главная | сервисные функции | Macro API
Функция MacroControl позволяет управлять макрокомандами Far Manager.
intptr_t WINAPI MacroControl(
  const GUID *PluginId,
  enum FAR_MACRO_CONTROL_COMMANDS Command,
  intptr_t Param1,
  void *Param2
);

Параметры

PluginId
Указатель на GUID плагина (для вашего плагина, GUID должен быть таким же, что и в поле GlobalInfo.Guid функции GetGlobalInfoW).
Command
Может быть одним из следующих значений (перечисление FAR_MACRO_CONTROL_COMMANDS):
Команда Описание
MCTL_LOADALL Загрузить все макросы из файлов в память Far Manager.
Предыдущие значения макросов при этом выгружаются, за исключением макросов, добавленных с помощью команды MCTL_ADDMACRO.
Param1 не используется.
Param2 указывает на структуру FarMacroLoad. Для загрузки с параметрами по умолчанию установите в NULL.
Функция при неудаче вернёт FALSE.
MCTL_SAVEALL Сохранить клавиатурные макросы из памяти Far Manager в файлы.
Если пользователь записал с клавиатуры новые макросы, изменил либо удалил существующие, то данные изменения станут постоянными.
Param1 не используется.
Param2 не используется.
Функция при неудаче вернёт FALSE.
MCTL_SENDSTRING Выполнить или проверить макрос.
Param1 значение типа FARMACROSENDSTRINGCOMMAND:
Команда | Описание
MSSC_POST | Выполнить макрос. Param2 указывает на структуру MacroSendMacroText. Функция возвращает TRUE - макрос проанализирован и помещен в очередь, и FALSE - ошибка (макропоследовательность содержит ошибки). Макропоследовательность начнёт исполняться тогда, когда Far Manager получит управление.
MSSC_CHECK | Проверить макрос. Param2 указывает на структуру MacroSendMacroText. Функция при неудаче вернёт FALSE. В случае неудачи, можно получить расширенную диагностику об ошибке с помощью команды MCTL_GETLASTERROR
MCTL_EXECSTRING Исполнить скрипт (строку или файл).
Param1 не используется.
Param2 указывает на структуру MacroExecuteString.
Функция при неудаче вернёт FALSE.
MCTL_GETLASTERROR Получить расширенную диагностику об ошибке проверки макроса (MSSC_CHECK).
Param1 размер буфера. Указывает максимальное количество байт, которые могут быть записаны в Param2.
Param2 указатель на буфер, структуру MacroParseResult, память плагин выделяет самостоятельно.
Функция возвращает размер требуемого буфера, при Param2 = NULL.
MCTL_GETSTATE Получить статус работы макродвижка.
Param1 не используется.
Param2 не используется.
Функция возвращает одно из значений (перечисление FARMACROSTATE):
Значение | Описание
MACROSTATE_NOMACRO | макродвижок не выполняет никакой макрос в текущий момент
MACROSTATE_EXECUTING | идёт исполнение макроса без передачи кодов клавиш в плагин
MACROSTATE_EXECUTING_COMMON | идёт исполнение макроса; коды клавиш в плагин передаются
MACROSTATE_RECORDING | идёт запись макроса без передачи кодов клавиш в плагин
MACROSTATE_RECORDING_COMMON | идёт запись макроса; коды клавиш в плагин передаются
MCTL_GETAREA Получить текущую макрообласть.
Param1 не используется.
Param2 не используется.
Функция возвращает значение типа FARMACROAREA:
Значение | Описание
MACROAREA_OTHER | режим копирования текста с экрана
MACROAREA_SHELL | файловые панели
MACROAREA_VIEWER | внутренняя программа просмотра
MACROAREA_EDITOR | редактор
MACROAREA_DIALOG | диалоги
MACROAREA_SEARCH | быстрый поиск в панелях
MACROAREA_DISKS | меню выбора дисков
MACROAREA_MAINMENU | основное меню
MACROAREA_MENU | прочие меню
MACROAREA_HELP | система помощи
MACROAREA_INFOPANEL | информационная панель
MACROAREA_QVIEWPANEL | панель быстрого просмотра
MACROAREA_TREEPANEL | панель дерева папок
MACROAREA_FINDFOLDER | панель поиска папок
MACROAREA_USERMENU | пользовательское меню
MACROAREA_SHELLAUTOCOMPLETION | список автодополнения в панелях
MACROAREA_DIALOGAUTOCOMPLETION | список автодополнения в диалогах
MACROAREA_COMMON | общая область
MCTL_ADDMACRO Добавить в память Far Manager макрос.
Param1 игнорируется.
Param2 указывает на структуру MacroAddMacro.
Функция при неудаче вернёт FALSE.
MCTL_DELMACRO Удалить из памяти Far Manager макрос, добавленный ранее командой MCTL_ADDMACRO.
Param1 игнорируется.
Param2 указывает на идентификатор удаляемого макроса, поле Id структуры MacroAddMacro.
Функция при неудаче вернёт FALSE.
Param1
Указывает на Параметр1 команды. Смотрите описание Command.
Param2
Указывает на Параметр2 команды. Смотрите описание Command.

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

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

Пример

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

PanelControl


FarGetValue

главная | структуры | Macro API
Структура FarGetValue описывает макропеременную для события DN_GETVALUE.
struct FarGetValue
{
  size_t StructSize;
  intptr_t Type;
  struct FarMacroValue Value;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarGetValue. Перед использованием структуры плагин должен заполнить поле.
Type
Тип события. Как должен поступить макродвижок с Value после передачи управления плагином в Far Manager. Плагин должен выставить это поле в одно из следующих значений:
Тип | Описание
0 | Far Manager игнорирует изменения, произведенные плагином. Макродвижок отдает в макрос то, что было до вызова плагина.
1 | Плагин изменил данные, макродвижок вернет эти данные в макропоследовательность.
Value
Значение запрашиваемой макропеременной типа FarMacroValue. Значение приходит в плагин уже заполненным актуальной информацией.

Замечания

Смотрите также:
структуры


FarMacroCall

главная | структуры | Macro API
Структура FarMacroCall должна использоваться плагином при вызове функции OpenW с значением аргумента OpenFrom равному OPEN_FROMMACRO, если плагин хочет вернуть макросу более одной величины (или одну величину не-булевого типа). В этом случае плагин должен заполнить поля статического или аллоцированного экземпляра данной структуры и вернуть Far Manager'у указатель на него.
struct FarMacroCall
{
  size_t StructSize;
  size_t Count;
  struct FarMacroValue *Values;
  void (WINAPI * Callback)(void *CallbackData, struct FarMacroValue *Values, size_t Count);
  void *CallbackData;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarMacroCall. Перед использованием структуры плагин должен заполнить поле.
Count
Количество элементов массива Values
Values
Указатель на массив структур типа FarMacroValue. Этот массив также должен быть статическим или аллоцированным.
Callback
Указатель на функцию плагина, которая будет вызвана после того, как Far Manager скопирует переданные данные. В этой функции данные можно освободить. Если освобождать данные не требуется, установите Callback = NULL.
CallbackData
Указатель на произвольные данные плагина.

Замечания

Смотрите также:
структуры


FarMacroLoad

главная | структуры | Macro API
Структура FarMacroLoad используется в функции MacroControl для загрузки макрофайлов в Far Manager.
struct FarMacroLoad
{
  size_t StructSize;
  const wchar_t *Path;
  unsigned __int64 Flags;
};

Элементы

StructSize
Это поле должно содержать размер структуры FarMacroLoad. Перед использованием структуры плагин должен заполнить поле.
Path
Перечень путей, с которых должны грузиться макрофайлы.
  • Разделитель путей - точка с запятой.
  • В путях можно использовать переменные окружения.
Flags
На данный момент не используется. Установите в 0.

Замечания

Смотрите также:
структуры


FarMacroValue

главная | структуры | Macro API
Структура FarMacroValue описывает макропеременную.
struct FarMacroValue
{
  enum FARMACROVARTYPE Type;
  union
  {
    __int64        Integer;
    __int64        Boolean;
    double         Double;
    const wchar_t *String;
    void          *Pointer;
    struct
    {
      void *Data;
      size_t Size;
    } Binary;
    struct
    {
      struct FarMacroValue *Values;
      size_t Count;
    } Array;
  }
#ifndef __cplusplus
  Value
#endif
  ;
};

Элементы

Type
Тип переменной, одно из следующих значений (перечисление FARMACROVARTYPE):
Тип | Описание
FMVT_UNKNOWN | Неопределенный тип. Value.Integer = 0.
FMVT_INTEGER | Число. Компонента Value.Integer.
FMVT_STRING | Строка. Компонента Value.String.
FMVT_DOUBLE | Вещественное значение. Компонента Value.Double.
FMVT_BOOLEAN | Логическое значение. Компонента Value.Boolean.
FMVT_BINARY | Структура Value.Binary, где поле Size определяет размер Data.
FMVT_POINTER | Указатель. Компонента Value.Pointer.
FMVT_NIL | Специальное значение nil. Все компоненты Value должны игнорироваться.
FMVT_ARRAY | Структура Value.Array, где поле Count определяет количество величин в массиве Values.
FMVT_PANEL | Описатель панели плагина. Компонента Value.Pointer.
Value
Значение.

Замечания

Смотрите также:
структуры


MacroAddMacro

главная | структуры | Macro API
Структура MacroAddMacro используется в функции MacroControl для загрузки макропоследовательности в Far Manager.
struct MacroAddMacro
{
  size_t StructSize;
  void *Id;
  const wchar_t *SequenceText;
  const wchar_t *Description;
  FARKEYMACROFLAGS Flags;
  INPUT_RECORD AKey;
  enum FARMACROAREA Area;
  FARMACROCALLBACK Callback;
};

Элементы

StructSize
Это поле должно содержать размер структуры MacroAddMacro. Перед использованием структуры плагин должен заполнить поле.
Id
Уникальный, в рамках плагина, идентификатор макропоследовательности.
SequenceText
Строка, содержащая макрос в текстовом виде.
Если строка начинается с символа @, то используется следующий формат: @<имя файла-скрипта> [<параметры скрипта>]
  • В имени файла допустимо использование переменных окружения.
  • Опциональные параметры скрипта представляют список выражений, разделённых запятыми. Выражения должны использовать тот же язык программирования, что и скрипт.
  • Пример: @%MyFarScripts%\calc.lua 'factorial', 3+5
Description
Строка, содержащая описание макроса.
Flags
Комбинация флагов (тип FARKEYMACROFLAGS):
Флаг | Описание
KMFLAGS_ENABLEOUTPUT | Отображать на экране результат работы каждой клавиши.
KMFLAGS_NOSENDKEYSTOPLUGINS | Не передавать клавиши редакторным плагинам (плагинам, экспортирующим функцию ProcessEditorInputW).
KMFLAGS_SILENTCHECK | Не отображать на экране результат проверки макропоследовательности.
KMFLAGS_LANGMASK | Трёхбитовая область, в которой задаётся язык макропоследовательности.
KMFLAGS_LUA | Язык макропоследовательности - Lua (значение по умолчанию).
KMFLAGS_MOONSCRIPT | Язык макропоследовательности - MoonScript.
KMFLAGS_NONE | Нулевой флаг.
AKey
Клавиша вызова макроса, структура INPUT_RECORD.
Area
Макрообласть типа FARMACROAREA, куда поместить макропоследовательность.
Callback
Функция, выполняемая Far Manager перед непосредственным выполнением макропоследовательности SequenceText. Синтаксис функции:
 intptr_t (WINAPI *FARMACROCALLBACK)(void *Id,FARADDKEYMACROFLAGS Flags);
Где: Id - идентификатор (MacroAddMacro.Id). Flags - сейчас не используются.
Функция может что-то проверить и вернуть TRUE - запустить макрос, или FALSE - не запускать.

Замечания

Смотрите также:
структуры


MacroExecuteString

главная | структуры | Macro API
Структура MacroExecuteString используется в функции MacroControl для передачи исполняемого скрипта в Far Manager.
struct MacroExecuteString
{
  size_t StructSize;
  unsigned __int64 Flags;
  const wchar_t *SequenceText;
  size_t InCount;
  struct FarMacroValue *InValues;
  size_t OutCount;
  const struct FarMacroValue *OutValues;
};

Элементы

StructSize
Это поле должно содержать размер структуры MacroExecuteString. Перед использованием структуры плагин должен заполнить поле.
Flags
Комбинация флагов (тип FARKEYMACROFLAGS, используются только KMFLAGS_LUA и KMFLAGS_MOONSCRIPT):
Флаг | Описание
KMFLAGS_ENABLEOUTPUT | Отображать на экране результат работы каждой клавиши.
KMFLAGS_NOSENDKEYSTOPLUGINS | Не передавать клавиши редакторным плагинам (плагинам, экспортирующим функцию ProcessEditorInputW).
KMFLAGS_SILENTCHECK | Не отображать на экране результат проверки макропоследовательности.
KMFLAGS_LANGMASK | Трёхбитовая область, в которой задаётся язык макропоследовательности.
KMFLAGS_LUA | Язык макропоследовательности - Lua (значение по умолчанию).
KMFLAGS_MOONSCRIPT | Язык макропоследовательности - MoonScript.
KMFLAGS_NONE | Нулевой флаг.
SequenceText
Скрипт в текстовом виде. Если начинается символом @, то последующая часть интерпретируется как имя файла-скрипта (допустимо использование переменных окружения).
InCount
Количество аргументов для передачи скрипту. Если аргументов нет, установите в ноль.
InValues
Указатель на массив аргументов скрипта.
OutCount
Количество элементов, возвращённых скриптом (значение устанавливает Far Manager).
OutValues
Указатель на массив элементов, возвращённых скриптом (значение устанавливает Far Manager).

Замечания

  1. Скрипт не должен вызывать функции, перечисленные в статье "Ограничения в использовании некоторых функций" в macroapi_manual.ru.chm.
  2. Массив OutValues может использоваться плагином только до следующего вызова функции MacroControl, либо до возвращения управления Far Manager (более раннее из этих событий). Если предполагается использовать элементы массива и далее, плагин должен скопировать их в свою память.
Смотрите также:
структуры


MacroParseResult

главная | структуры | Macro API
Структура MacroParseResult используется в функции MacroControl для возврата плагину результатов проверки макропоследовательности.
struct MacroParseResult
{
  size_t StructSize;
  DWORD ErrCode;
  COORD ErrPos;
  const wchar_t *ErrSrc;
};

Элементы

StructSize
Это поле должно содержать размер структуры MacroParseResult. Перед использованием структуры плагин должен заполнить поле.
ErrCode
Результат проверки (перечисление FARMACROPARSEERRORCODE):
Флаг | Описание
MPEC_SUCCESS | Ошибок нет.
MPEC_ERROR | Имеются ошибки.
ErrPos
Позиция ошибки в исходном тексте.
ErrSrc
"Слово" вызвавщее ошибку, может быть пустым, в зависимости от кода ошибки.

Замечания

Смотрите также:
структуры


MacroSendMacroText

главная | структуры | Macro API
Структура MacroSendMacroText используется в функции MacroControl для передачи макропоследовательности в Far Manager.
struct MacroSendMacroText
{
  size_t StructSize;
  FARKEYMACROFLAGS Flags;
  INPUT_RECORD AKey;
  const wchar_t *SequenceText;
};

Элементы

StructSize
Это поле должно содержать размер структуры MacroSendMacroText. Перед использованием структуры плагин должен заполнить поле.
Flags
Комбинация флагов (тип FARKEYMACROFLAGS):
Флаг | Описание
KMFLAGS_ENABLEOUTPUT | Отображать на экране результат работы каждой клавиши.
KMFLAGS_NOSENDKEYSTOPLUGINS | Не передавать клавиши редакторным плагинам (плагинам, экспортирующим функцию ProcessEditorInputW).
KMFLAGS_SILENTCHECK | Не отображать на экране результат проверки макропоследовательности.
KMFLAGS_LANGMASK | Трёхбитовая область, в которой задаётся язык макропоследовательности.
KMFLAGS_LUA | Язык макропоследовательности - Lua (значение по умолчанию).
KMFLAGS_MOONSCRIPT | Язык макропоследовательности - MoonScript.
KMFLAGS_NONE | Нулевой флаг.
AKey
Клавиша вызова макроса, структура INPUT_RECORD.
SequenceText
Строка, содержащая макрос в текстовом виде.
Если строка начинается с символа @, то используется следующий формат: @<имя файла-скрипта> [<параметры скрипта>]
  • В имени файла допустимо использование переменных окружения.
  • Опциональные параметры скрипта представляют список выражений, разделённых запятыми. Выражения должны использовать тот же язык программирования, что и скрипт.
  • Пример: @%MyFarScripts%\calc.lua 'factorial', 3+5

Замечания

Смотрите также:
структуры


OpenMacroInfo

главная | структуры | Macro API
Структура OpenMacroInfo используется в функции OpenW для передачи значений из макропоследовательности плагину и обратно.
struct OpenMacroInfo
{
  size_t StructSize;
  size_t Count;
  struct FarMacroValue *Values;
};

Элементы

StructSize
Это поле содержит размер структуры OpenMacroInfo.
Count
Количество элементов массива Values.
Values
Указатель на массив значений макропеременных (структура FarMacroValue).

Замечания

Смотрите также:
структуры


MACROOPCODE

главная | типы и определения

Перечислены значения кодов операций (MACROOPCODE), которые исполнятор должен передать в Far Manager, используя функцию FARAPICALLFAR

MACROOPCODE | Значение | Описание
MCODE_OP_EXIT | 0x80000 | принудительно закончить выполнение макропоследовательности
MCODE_F_NOFUNC | 0x80C00 |
MCODE_F_ABS | 0x80C01 | N=abs(N)
MCODE_F_AKEY | 0x80C02 | V=akey(Mode[,Type])
MCODE_F_ASC | 0x80C03 | N=asc(S)
MCODE_F_ATOI | 0x80C04 | N=atoi(S[,radix])
MCODE_F_CLIP | 0x80C05 | V=clip(N[,V])
MCODE_F_CHR | 0x80C06 | S=chr(N)
MCODE_F_DATE | 0x80C07 | S=date([S])
MCODE_F_DLG_GETVALUE | 0x80C08 | V=Dlg.GetValue([Pos[,InfoID]])
MCODE_F_EDITOR_SEL | 0x80C09 | V=Editor.Sel(Action[,Opt])
MCODE_F_EDITOR_SET | 0x80C0A | N=Editor.Set(N[,Var])
MCODE_F_EDITOR_UNDO | 0x80C0B | V=Editor.Undo(N)
MCODE_F_EDITOR_POS | 0x80C0C | N=Editor.Pos(Op,What[,Where])
MCODE_F_ENVIRON | 0x80C0D | S=Env(S[,Mode[,Value]])
MCODE_F_FATTR | 0x80C0E | N=fattr(S)
MCODE_F_FEXIST | 0x80C0F | S=fexist(S)
MCODE_F_FSPLIT | 0x80C10 | S=fsplit(S,N)
MCODE_F_IIF | 0x80C11 | V=iif(C,V1,V2)
MCODE_F_INDEX | 0x80C12 | S=index(S1,S2[,Mode])
MCODE_F_INT | 0x80C13 | N=int(V)
MCODE_F_ITOA | 0x80C14 | S=itoa(N[,radix])
MCODE_F_KEY | 0x80C15 | S=key(V)
MCODE_F_LCASE | 0x80C16 | S=lcase(S1)
MCODE_F_LEN | 0x80C17 | N=len(S)
MCODE_F_MAX | 0x80C18 | N=max(N1,N2)
MCODE_F_MENU_CHECKHOTKEY | 0x80C19 | N=checkhotkey(S[,N])
MCODE_F_MENU_GETHOTKEY | 0x80C1A | S=gethotkey([N])
MCODE_F_MENU_SELECT | 0x80C1B | N=Menu.Select(S[,N[,Dir]])
MCODE_F_MENU_SHOW | 0x80C1C | S=Menu.Show(Items[,Title[,Flags[,FindOrFilter[,X[,Y]]]]])
MCODE_F_MIN | 0x80C1D | N=min(N1,N2)
MCODE_F_MOD | 0x80C1E | N=mod(a,b) == a % b
MCODE_F_MLOAD | 0x80C1F | B=mload(var)
MCODE_F_MSAVE | 0x80C20 | B=msave(var)
MCODE_F_MSGBOX | 0x80C21 | N=msgbox(["Title"[,"Text"[,flags]]])
MCODE_F_PANEL_FATTR | 0x80C22 | N=Panel.FAttr(panelType,fileMask)
MCODE_F_PANEL_SETPATH | 0x80C23 | N=panel.SetPath(panelType,pathName[,fileName])
MCODE_F_PANEL_FEXIST | 0x80C24 | N=Panel.FExist(panelType,fileMask)
MCODE_F_PANEL_SETPOS | 0x80C25 | N=Panel.SetPos(panelType,fileName)
MCODE_F_PANEL_SETPOSIDX | 0x80C26 | N=Panel.SetPosIdx(panelType,Idx[,InSelection])
MCODE_F_PANEL_SELECT | 0x80C27 | V=Panel.Select(panelType,Action[,Mode[,Items]])
MCODE_F_PANELITEM | 0x80C28 | V=PanelItem(Panel,Index,TypeInfo)
MCODE_F_EVAL | 0x80C29 | N=eval(S[,N])
MCODE_F_RINDEX | 0x80C2A | S=rindex(S1,S2[,Mode])
MCODE_F_SLEEP | 0x80C2B | Sleep(N)
MCODE_F_STRING | 0x80C2C | S=string(V)
MCODE_F_SUBSTR | 0x80C2D | S=substr(S,start[,length])
MCODE_F_UCASE | 0x80C2E | S=ucase(S1)
MCODE_F_WAITKEY | 0x80C2F | V=waitkey([N,[T]])
MCODE_F_XLAT | 0x80C30 | S=xlat(S)
MCODE_F_FLOCK | 0x80C31 | N=FLock(N,N)
MCODE_F_CALLPLUGIN | 0x80C32 | V=callplugin(SysID[,param])
MCODE_F_REPLACE | 0x80C33 | S=replace(sS,sF,sR[,Count[,Mode]])
MCODE_F_PROMPT | 0x80C34 | S=prompt(["Title"[,"Prompt"[,flags[, "Src"[, "History"]]]]])
MCODE_F_BM_ADD | 0x80C35 | N=BM.Add() - добавить текущие координаты и обрезать хвост
MCODE_F_BM_CLEAR | 0x80C36 | N=BM.Clear() - очистить все закладки
MCODE_F_BM_DEL | 0x80C37 | N=BM.Del([Idx]) - удаляет закладку с указанным индексом (x=1...), 0 - удаляет текущую закладку
MCODE_F_BM_GET | 0x80C38 | N=BM.Get(Idx,M) - возвращает координаты строки (M==0) или колонки (M==1) закладки с индексом (Idx=1...)
MCODE_F_BM_GOTO | 0x80C39 | N=BM.Goto([n]) - переход на закладку с указанным индексом (0 --> текущую)
MCODE_F_BM_NEXT | 0x80C3A | N=BM.Next() - перейти на следующую закладку
MCODE_F_BM_POP | 0x80C3B | N=BM.Pop() - восстановить текущую позицию из закладки в конце стека и удалить закладку
MCODE_F_BM_PREV | 0x80C3C | N=BM.Prev() - перейти на предыдущую закладку
MCODE_F_BM_BACK | 0x80C3D | N=BM.Back() - перейти на предыдущую закладку с возможным сохранением текущей позиции
MCODE_F_BM_PUSH | 0x80C3E | N=BM.Push() - сохранить текущую позицию в виде закладки в конце стека
MCODE_F_BM_STAT | 0x80C3F | N=BM.Stat([M]) - возвращает информацию о закладках, N=0 - текущее количество закладок
MCODE_F_TRIM | 0x80C40 | S=trim(S[,N])
MCODE_F_FLOAT | 0x80C41 | N=float(V)
MCODE_F_TESTFOLDER | 0x80C42 | N=testfolder(S)
MCODE_F_PRINT | 0x80C43 | N=Print(Str)
MCODE_F_MMODE | 0x80C44 | N=MMode(Action[,Value])
MCODE_F_EDITOR_SETTITLE | 0x80C45 | N=Editor.SetTitle([Title])
MCODE_F_MENU_GETVALUE | 0x80C46 | S=Menu.GetValue([N])
MCODE_F_MENU_ITEMSTATUS | 0x80C47 | N=Menu.ItemStatus([N])
MCODE_F_BEEP | 0x80C48 | N=beep([N])
MCODE_F_KBDLAYOUT | 0x80C49 | N=kbdLayout([N])
MCODE_F_WINDOW_SCROLL | 0x80C4A | N=Window.Scroll(Lines[,Axis])
MCODE_F_KEYBAR_SHOW | 0x80C4B | N=KeyBar.Show([N])
MCODE_F_HISTIORY_DISABLE | 0x80C4C | N=History.Disable([State])
MCODE_F_FMATCH | 0x80C4D | N=FMatch(S,Mask)
MCODE_F_PLUGIN_MENU | 0x80C4E | N=Plugin.Menu(Guid[,MenuGuid])
MCODE_F_PLUGIN_CONFIG | 0x80C4F | N=Plugin.Config(Guid[,MenuGuid])
MCODE_F_PLUGIN_CALL | 0x80C50 | N=Plugin.Call(Guid[,Item])
MCODE_F_PLUGIN_LOAD | 0x80C51 | N=Plugin.Load(DllPath[,ForceLoad])
MCODE_F_PLUGIN_COMMAND | 0x80C52 | N=Plugin.Command(Guid[,Command])
MCODE_F_PLUGIN_UNLOAD | 0x80C53 | N=Plugin.UnLoad(DllPath)
MCODE_F_PLUGIN_EXIST | 0x80C54 | N=Plugin.Exist(Guid)
MCODE_F_MENU_FILTER | 0x80C55 | N=Menu.Filter(Action[,Mode])
MCODE_F_MENU_FILTERSTR | 0x80C56 | S=Menu.FilterStr([Action[,S]])
MCODE_F_DLG_SETFOCUS | 0x80C57 | N=Dlg.SetFocus([ID])
MCODE_F_FAR_CFG_GET | 0x80C58 | V=Far.Cfg.Get(Key,Name)
MCODE_F_SIZE2STR | 0x80C59 | S=Size2Str(N,Flags[,Width])
MCODE_F_STRWRAP | 0x80C5A | S=StrWrap(Text,Width[,Break[,Flags]])
MCODE_F_MACRO_KEYWORD | 0x80C5B | S=Macro.Keyword(Index[,Type])
MCODE_F_MACRO_FUNC | 0x80C5C | S=Macro.Func(Index[,Type])
MCODE_F_MACRO_VAR | 0x80C5D | S=Macro.Var(Index[,Type])
MCODE_F_MACRO_CONST | 0x80C5E | S=Macro.Const(Index[,Type])
MCODE_F_STRPAD | 0x80C5F | S=StrPad(V,Cnt[,Fill[,Op]])
MCODE_F_EDITOR_DELLINE | 0x80C60 | N=Editor.DelLine([Line])
MCODE_F_EDITOR_GETSTR | 0x80C61 | S=Editor.GetStr([Line])
MCODE_F_EDITOR_INSSTR | 0x80C62 | N=Editor.InsStr([S[,Line]])
MCODE_F_EDITOR_SETSTR | 0x80C63 | N=Editor.SetStr([S[,Line]])
MCODE_F_GETMACROSRC | 0x80C64 |
MCODE_F_READVARSCONSTS | 0x80C65 |
MCODE_F_LAST | 0x80C66 | marker
MCODE_C_AREA_OTHER | 0x80400 | Режим копирования текста с экрана, вертикальные меню
MCODE_C_AREA_SHELL | 0x80401 | Файловые панели
MCODE_C_AREA_VIEWER | 0x80402 | Внутренняя программа просмотра
MCODE_C_AREA_EDITOR | 0x80403 | Редактор
MCODE_C_AREA_DIALOG | 0x80404 | Диалоги
MCODE_C_AREA_SEARCH | 0x80405 | Быстрый поиск в панелях
MCODE_C_AREA_DISKS | 0x80406 | Меню выбора дисков
MCODE_C_AREA_MAINMENU | 0x80407 | Основное меню
MCODE_C_AREA_MENU | 0x80408 | Прочие меню
MCODE_C_AREA_HELP | 0x80409 | Система помощи
MCODE_C_AREA_INFOPANEL | 0x8040A | Информационная панель
MCODE_C_AREA_QVIEWPANEL | 0x8040B | Панель быстрого просмотра
MCODE_C_AREA_TREEPANEL | 0x8040C | Панель дерева папок
MCODE_C_AREA_FINDFOLDER | 0x8040D | Поиск папок
MCODE_C_AREA_USERMENU | 0x8040E | Меню пользователя
MCODE_C_AREA_SHELL_AUTOCOMPLETION | 0x8040F | Список автодополнения в панелях в ком.строке
MCODE_C_AREA_DIALOG_AUTOCOMPLETION | 0x80410 | Список автодополнения в диалоге
MCODE_C_FULLSCREENMODE | 0x80411 | полноэкранный режим?
MCODE_C_ISUSERADMIN | 0x80412 | Administrator status
MCODE_C_BOF | 0x80413 | начало файла/активного каталога?
MCODE_C_EOF | 0x80414 | конец файла/активного каталога?
MCODE_C_EMPTY | 0x80415 | ком.строка пуста?
MCODE_C_SELECTED | 0x80416 | выделенный блок есть?
MCODE_C_ROOTFOLDER | 0x80417 | аналог MCODE_C_APANEL_ROOT для активной панели
MCODE_C_APANEL_BOF | 0x80418 | начало активного каталога?
MCODE_C_PPANEL_BOF | 0x80419 | начало пассивного каталога?
MCODE_C_APANEL_EOF | 0x8041A | конец активного каталога?
MCODE_C_PPANEL_EOF | 0x8041B | конец пассивного каталога?
MCODE_C_APANEL_ISEMPTY | 0x8041C | активная панель: пуста?
MCODE_C_PPANEL_ISEMPTY | 0x8041D | пассивная панель: пуста?
MCODE_C_APANEL_SELECTED | 0x8041E | активная панель: выделенные элементы есть?
MCODE_C_PPANEL_SELECTED | 0x8041F | пассивная панель: выделенные элементы есть?
MCODE_C_APANEL_ROOT | 0x80420 | это корневой каталог активной панели?
MCODE_C_PPANEL_ROOT | 0x80421 | это корневой каталог пассивной панели?
MCODE_C_APANEL_VISIBLE | 0x80422 | активная панель: видима?
MCODE_C_PPANEL_VISIBLE | 0x80423 | пассивная панель: видима?
MCODE_C_APANEL_PLUGIN | 0x80424 | активная панель: плагиновая?
MCODE_C_PPANEL_PLUGIN | 0x80425 | пассивная панель: плагиновая?
MCODE_C_APANEL_FILEPANEL | 0x80426 | активная панель: файловая?
MCODE_C_PPANEL_FILEPANEL | 0x80427 | пассивная панель: файловая?
MCODE_C_APANEL_FOLDER | 0x80428 | активная панель: текущий элемент каталог?
MCODE_C_PPANEL_FOLDER | 0x80429 | пассивная панель: текущий элемент каталог?
MCODE_C_APANEL_LEFT | 0x8042A | активная панель левая?
MCODE_C_PPANEL_LEFT | 0x8042B | пассивная панель левая?
MCODE_C_APANEL_LFN | 0x8042C | на активной панели длинные имена?
MCODE_C_PPANEL_LFN | 0x8042D | на пассивной панели длинные имена?
MCODE_C_APANEL_FILTER | 0x8042E | на активной панели включен фильтр?
MCODE_C_PPANEL_FILTER | 0x8042F | на пассивной панели включен фильтр?
MCODE_C_CMDLINE_BOF | 0x80430 | курсор в начале cmd-строки редактирования?
MCODE_C_CMDLINE_EOF | 0x80431 | курсор в конце cmd-строки редактирования?
MCODE_C_CMDLINE_EMPTY | 0x80432 | ком.строка пуста?
MCODE_C_CMDLINE_SELECTED | 0x80433 | в ком.строке есть выделение блока?
MCODE_C_MSX | 0x80434 | "MsX"
MCODE_C_MSY | 0x80435 | "MsY"
MCODE_C_MSBUTTON | 0x80436 | "MsButton"
MCODE_C_MSCTRLSTATE | 0x80437 | "MsCtrlState"
MCODE_C_MSEVENTFLAGS | 0x80438 | "MsEventFlags"
MCODE_V_FAR_WIDTH | 0x80800 | Far.Width - ширина консольного окна
MCODE_V_FAR_HEIGHT | 0x80801 | Far.Height - высота консольного окна
MCODE_V_FAR_TITLE | 0x80802 | Far.Title - текущий заголовок консольного окна
MCODE_V_FAR_UPTIME | 0x80803 | Far.UpTime - время работы Far в миллисекундах
MCODE_V_FAR_PID | 0x80804 | Far.PID - содержит ИД текущей запущенной копии Far Manager
MCODE_V_MACRO_AREA | 0x80805 | MacroArea - имя текущей макрос области
MCODE_V_APANEL_CURRENT | 0x80806 | APanel.Current - имя файла на активной панели
MCODE_V_PPANEL_CURRENT | 0x80807 | PPanel.Current - имя файла на пассивной панели
MCODE_V_APANEL_SELCOUNT | 0x80808 | APanel.SelCount - активная панель: число выделенных элементов
MCODE_V_PPANEL_SELCOUNT | 0x80809 | PPanel.SelCount - пассивная панель: число выделенных элементов
MCODE_V_APANEL_PATH | 0x8080A | APanel.Path - активная панель: путь на панели
MCODE_V_PPANEL_PATH | 0x8080B | PPanel.Path - пассивная панель: путь на панели
MCODE_V_APANEL_PATH0 | 0x8080C | APanel.Path0 - активная панель: путь на панели до вызова плагинов
MCODE_V_PPANEL_PATH0 | 0x8080D | PPanel.Path0 - пассивная панель: путь на панели до вызова плагинов
MCODE_V_APANEL_UNCPATH | 0x8080E | APanel.UNCPath - активная панель: UNC-путь на панели
MCODE_V_PPANEL_UNCPATH | 0x8080F | PPanel.UNCPath - пассивная панель: UNC-путь на панели
MCODE_V_APANEL_WIDTH | 0x80810 | APanel.Width - активная панель: ширина панели
MCODE_V_PPANEL_WIDTH | 0x80811 | PPanel.Width - пассивная панель: ширина панели
MCODE_V_APANEL_TYPE | 0x80812 | APanel.Type - тип активной панели
MCODE_V_PPANEL_TYPE | 0x80813 | PPanel.Type - тип пассивной панели
MCODE_V_APANEL_ITEMCOUNT | 0x80814 | APanel.ItemCount - активная панель: число элементов
MCODE_V_PPANEL_ITEMCOUNT | 0x80815 | PPanel.ItemCount - пассивная панель: число элементов
MCODE_V_APANEL_CURPOS | 0x80816 | APanel.CurPos - активная панель: текущий индекс
MCODE_V_PPANEL_CURPOS | 0x80817 | PPanel.CurPos - пассивная панель: текущий индекс
MCODE_V_APANEL_OPIFLAGS | 0x80818 | APanel.OPIFlags - активная панель: флаги открытого плагина
MCODE_V_PPANEL_OPIFLAGS | 0x80819 | PPanel.OPIFlags - пассивная панель: флаги открытого плагина
MCODE_V_APANEL_DRIVETYPE | 0x8081A | APanel.DriveType - активная панель: тип привода
MCODE_V_PPANEL_DRIVETYPE | 0x8081B | PPanel.DriveType - пассивная панель: тип привода
MCODE_V_APANEL_HEIGHT | 0x8081C | APanel.Height - активная панель: высота панели
MCODE_V_PPANEL_HEIGHT | 0x8081D | PPanel.Height - пассивная панель: высота панели
MCODE_V_APANEL_COLUMNCOUNT | 0x8081E | APanel.ColumnCount - активная панель: количество колонок
MCODE_V_PPANEL_COLUMNCOUNT | 0x8081F | PPanel.ColumnCount - пассивная панель: количество колонок
MCODE_V_APANEL_HOSTFILE | 0x80820 | APanel.HostFile - активная панель: имя Host-файла
MCODE_V_PPANEL_HOSTFILE | 0x80821 | PPanel.HostFile - пассивная панель: имя Host-файла
MCODE_V_APANEL_PREFIX | 0x80822 | APanel.Prefix
MCODE_V_PPANEL_PREFIX | 0x80823 | PPanel.Prefix
MCODE_V_APANEL_FORMAT | 0x80824 | APanel.Format
MCODE_V_PPANEL_FORMAT | 0x80825 | PPanel.Format
MCODE_V_ITEMCOUNT | 0x80826 | ItemCount - число элементов в текущем объекте
MCODE_V_CURPOS | 0x80827 | CurPos - текущий индекс в текущем объекте
MCODE_V_TITLE | 0x80828 | Title - заголовок текущего объекта
MCODE_V_HEIGHT | 0x80829 | Height - высота текущего объекта
MCODE_V_WIDTH | 0x8082A | Width - ширина текущего объекта
MCODE_V_EDITORFILENAME | 0x8082B | Editor.FileName - имя редактируемого файла
MCODE_V_EDITORLINES | 0x8082C | Editor.Lines - количество строк в редакторе
MCODE_V_EDITORCURLINE | 0x8082D | Editor.CurLine - текущая линия в редакторе (в дополнении к Count)
MCODE_V_EDITORCURPOS | 0x8082E | Editor.CurPos - текущая поз. в редакторе
MCODE_V_EDITORREALPOS | 0x8082F | Editor.RealPos - текущая поз. в редакторе без привязки к размеру табуляции
MCODE_V_EDITORSTATE | 0x80830 | Editor.State
MCODE_V_EDITORVALUE | 0x80831 | Editor.Value - содержимое текущей строки
MCODE_V_EDITORSELVALUE | 0x80832 | Editor.SelValue - содержит содержимое выделенного блока
MCODE_V_DLGITEMTYPE | 0x80833 | Dlg.ItemType
MCODE_V_DLGITEMCOUNT | 0x80834 | Dlg.ItemCount
MCODE_V_DLGCURPOS | 0x80835 | Dlg.CurPos
MCODE_V_DLGPREVPOS | 0x80836 | Dlg.PrevPos
MCODE_V_DLGINFOID | 0x80837 | Dlg.Info.Id
MCODE_V_DLGINFOOWNER | 0x80838 | Dlg.Info.Owner
MCODE_V_VIEWERFILENAME | 0x80839 | Viewer.FileName - имя просматриваемого файла
MCODE_V_VIEWERSTATE | 0x8083A | Viewer.State
MCODE_V_CMDLINE_ITEMCOUNT | 0x8083B | CmdLine.ItemCount
MCODE_V_CMDLINE_CURPOS | 0x8083C | CmdLine.CurPos
MCODE_V_CMDLINE_VALUE | 0x8083D | CmdLine.Value
MCODE_V_DRVSHOWPOS | 0x8083E | Drv.ShowPos - меню выбора дисков отображено: 1=слева (Alt-F1), 2=справа (Alt-F2), 0="нету его"
MCODE_V_DRVSHOWMODE | 0x8083F | Drv.ShowMode - режимы отображения меню выбора дисков
MCODE_V_HELPFILENAME | 0x80840 | Help.FileName
MCODE_V_HELPTOPIC | 0x80841 | Help.Topic
MCODE_V_HELPSELTOPIC | 0x80842 | Help.SelTopic
MCODE_V_MENU_VALUE | 0x80843 | Menu.Value
MCODE_V_MENUINFOID | 0x80844 | Menu.Info.Id


Экспортируемые функции

главная

Far Manager взаимодействует со своими плагинами через определённый набор функций, которые плагины экспортируют. Плагину не надо экспортировать все ниже перечисленные функции. Достаточно только тех, которые требуются (и которые вы используете).

Функции общего назначения

Функция | Описание
ExitFARW | перед выходом из Far Manager
OpenW | вызывает плагин
ProcessConsoleInputW | предобработка консольных событий плагином
ProcessSynchroEventW | позволяет плагину выполнить код в контексте главного потока Far Manager
SetStartupInfoW | Far Manager передает плагину необходимую информацию

Специфические функции работы с панелью

Функция | Описание
AnalyseW | проанализировать содержимое файла
CloseAnalyseW | освобождение ресурсов
ClosePanelW | перед закрытием открытой панели плагина
CompareW | перекрывает алгоритм сортировки на панели
DeleteFilesW | удаление файлов
FreeFindDataW | освобождает память, запрошенную функцией GetFindDataW
GetFilesW | получить файлы для обработки (копирование/перемещение/просмотр...)
GetFindDataW | получить список элементов для панели
GetOpenPanelInfoW | информация об открываемой панели плагина
MakeDirectoryW | создать каталог
ProcessPanelEventW | обработка событий панели
ProcessHostFileW | выполнить архивную команду Far Manager'a
ProcessPanelInputW | обработка событий клавиатуры и мыши
PutFilesW | поместить файлы на эмулируемую файловую систему
SetDirectoryW | установить текущий каталог на эмулируемой файловой системе
SetFindListW | перемещает найденные в Диалоге поиска файлов файлы в эмулируемую файловую панель

Специфические функции редактора

Функция | Описание
ProcessEditorInputW | обработка событий клавиатуры и мыши
ProcessEditorEventW | обработка событий редактора

Специфические функции программы просмотра

Функция | Описание
ProcessViewerEventW | обработка событий программы просмотра

Специфические функции диалога

Функция | Описание
ProcessDialogEventW | обработка событий диалога

Специфические функции для настройки плагина

Функция | Описание
ConfigureW | конфигурирование плагина

Специфические функции для работы с плагинами

Функция | Описание
GetGlobalInfoW | основная информация о плагине
GetPluginInfoW | дополнительная информация о плагине

Специфические функции для работы с контент-колонками

Функция | Описание
GetContentFieldsW | запрос плагина о поддержке данного списка типов контент-колонок
GetContentDataW | запрос данных для контент-колонок
FreeContentDataW | освобождение памяти, выделенной при вызове GetContentDataW
Смотрите также:
Сервисные функции, Структуры, Типы и определения, Структуры и функции Windows API


GetContentFieldsW

главная | экспортируемые функции | TODO: Content API
Функция GetContentFieldsW вызывается, чтобы узнать, есть ли в заданном списке типов контент-колонок хотя бы один тип, поддерживаемый данным плагином.
Вызов производится один раз перед каждым обновлением панели.
intptr_t WINAPI GetContentFieldsW(
  const struct GetContentFieldsInfo *Info
);

Параметры

Info
Указатель на структуру GetContentFieldsInfo, содержащую список типов колонок.

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

Если плагин поддерживает хотя бы один тип колонок из переданного списка, то верните 1. В противном случае 0.

Пример

FarStandardFunctions FSF; // assuming it is already initialized

const wchar_t *SupportedColumns[] = {
  L"Compression", L"Resolution", L"Original size", L"Current size",
  NULL
};

intptr_t WINAPI GetContentFieldsW(const struct GetContentFieldsInfo *Info)
{
  for(size_t i=0; i<Info->Count; i++)
  {
    for(size_t j=0; SupportedColumns[j]; j++)
    {
      if (!FSF.LStricmp(Info->Names[i], SupportedColumns[j])
        return 1;
    }
  }
  return 0;
}
Смотрите также:
GetContentDataW, FreeContentDataW

ПРИМЕЧАНИЕ

Данное API не является окончательным и может быть изменено или удалено в любой момент.


GetContentDataW

главная | экспортируемые функции | TODO: Content API
Функция GetContentDataW вызывается для получения от плагина данных контент-колонок для заданного файла.
intptr_t WINAPI GetContentDataW(
  struct GetContentDataInfo *Info
);

Параметры

Info
Указатель на структуру GetContentDataInfo.

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

Если плагин устанавливал данные в Info->Values, то верните 1. В противном случае 0.
Смотрите также:
GetContentFieldsW, FreeContentDataW

ПРИМЕЧАНИЕ

Данное API не является окончательным и может быть изменено или удалено в любой момент.


FreeContentDataW

главная | экспортируемые функции | TODO: Content API
Функция FreeContentDataW вызывается для освобождения данных, переданных плагином во время вызова функции GetContentDataW.
void WINAPI FreeContentDataW(
  const struct GetContentDataInfo *Info
);

Параметры

Info
Указатель на структуру GetContentDataInfo.
Это указатель на тот же экземпляр структуры, что использовался при вызове GetContentDataW.

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

Нет.
Смотрите также:
GetContentFieldsW, GetContentDataW

ПРИМЕЧАНИЕ

Данное API не является окончательным и может быть изменено или удалено в любой момент.


Сервисные функции

главная
Следующие функции дают возможность плагину использовать меню, диалоги, языковую поддержку и прочие полезности. Указатели на эти функции плагин получает в функции SetStartupInfoW.

Функции общего назначения

Функция | Описание
AdvControl | дополнительные управляющие функции; работают везде: в панелях/редакторе/просмотре
ColorDialog | диалог изменения цвета
GetMsg | получить строку сообщения из языкового файла
InputBox | позволяет запросить у пользователя текстовую строку
Menu | показывает меню
Message | показывает сообщение
RegExpControl | управляющие функции регулярных выражений
RestoreScreen | восстанавливает предварительно сохранённую область экрана
SaveScreen | сохраняет область экрана
ShowHelp | показывает нужный раздел из файла помощи
Text | выводит текстовую строку на экран

Специфические функции работы с панелью

Функция | Описание
PanelControl | позволяет запрашивать различную информацию и выполнять управляющие действия
FileFilterControl | управляет созданием и применением файловых фильтров
FreeDirList | освобождает память, выделенную для списка файлов функцией GetDirList
FreePluginDirList | освобождает память, выделенную для списка файлов функцией GetPluginDirList
GetDirList | возвращает список файлов в указанной директории
GetPluginDirList | возвращает список файлов в указанной директории эмулируемой файловой системы

Специфические функции редактора

Функция | Описание
Editor | обеспечивает доступ к внутреннему редактору Far Manager
EditorControl | позволяет запрашивать различную информацию о внутреннем редакторе Far Manager и управлять его состоянием

Специфические функции программы просмотра

Функция | Описание
Viewer | обеспечивает доступ к внутренней программе просмотра Far Manager
ViewerControl | позволяет запрашивать различную информацию о встроенной программе просмотра Far Manager и управлять её состоянием

Специфические функции диалога

Функция | Описание
DefDlgProc | вызывает стандартный обработчик диалога
DialogInit | создаёт (инициализирует) диалог
DialogRun | показывает диалог созданный функцией DialogInit
DialogFree | освобождает память, выделенную под внутренние структуры диалога функцией DialogInit
SendDlgMessage | послать сообщение обработчику диалога

Специфические функции для настройки плагина

Функция | Описание
SettingsControl | управляет настройками плагина

Специфические функции для работы с плагинами

Функция | Описание
PluginsControl | управляет сторонними плагинами

Специфические функции для работы с макрокомандами

Функция | Описание
MacroControl | управляет макрокомандами
Смотрите также:
Экспортируемые функции, Структуры, Типы и определения, Структуры и функции Windows API


Стандартные функции

главная

Стандартные C функции и т.п.

Функция | Описание
atoi | конвертирует строку в целое число типа int (32-битное целое)
atoi64 | конвертирует строку в целое число типа __int64 (64-битное целое)
bsearch | осуществляет двоичный поиск в массиве
itoa | конвертирует целое число типа int (32-битное целое) в строку
itoa64 | конвертирует целое число типа __int64 (64-битное целое) в строку
LIsAlpha | проверяет, является ли символ с указанным кодом буквой
LIsAlphanum | проверяет, является ли символ с указанным кодом буквой или цифрой
LIsLower | проверяет, является ли символ с указанным кодом буквой в нижнем регистре
LIsUpper | проверяет, является ли символ с указанным кодом буквой в верхнем регистре
LLower | преобразует символ в нижний регистр
LLowerBuf | преобразует массив символов указанной длины, (который может содержать нулевые символы) в нижний регистр
LStricmp | сравнивает две строки без учёта регистра
LStrlwr | преобразует строку, оканчивающуюся нулём, в нижний регистр
LStrnicmp | сравнивает части двух строк без учёта регистра
LStrupr | преобразует строку, оканчивающуюся нулём, в верхний регистр
LUpper | преобразует символ в верхний регистр
LUpperBuf | преобразует массив символов указанной длины, (который может содержать нулевые символы) в верхнем регистр
qsort | осуществляет сортировку данных с использованием алгоритма QuickSort
snprintf | осуществляет форматированный вывод в строку с заданным размером
sprintf | осуществляет форматированный вывод в строку
sscanf | осуществляет форматированный ввод из строки

Различные функции для работы со строками

Функция | Описание
AddEndSlash | добавляет к строке обратный слеш
PointToName | используется для получения указателя на имя файла в данном имени файла с путём
LTrim | удаляет ведущие пробелы в строке
QuoteSpaceOnly | заключает строку в кавычки, если она содержит хотя бы один пробел
RTrim | удаляет конечные пробелы в строке
Trim | удаляет ведущие и конечные пробелы в строке
TruncPathStr | усекает указанный путь до требуемого размера и вставляет при надобности многоточие вместо отрезанной части
TruncStr | усекает указанную строку до требуемой длины и вставляет в начало строки многоточие вместо отрезанной части
Unquote | убирает из строки все двойные кавычки

Функции для работы с файлами

Функция | Описание
ConvertPath преобразует относительное имя файлового объекта в полное

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

  • Не используйте для этих целей функцию GetFullPathName из Windows API
FarRecursiveSearch | осуществляет рекурсивный поиск файлов
GetCurrentDirectory позволяет узнать внутренний "текущий каталог" Far Manager

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

  • Не используйте для этих целей функцию GetCurrentDirectory из Windows API
GetFileOwner | используется для определения владельца указанного файла
GetNumberOfLinks | возвращает количество жёстких ссылок для заданного файла
GetPathRoot | используется для получения имени корневого каталога из указанного пути
GetReparsePointInfo | позволяет для указанной символической ссылки получить информацию об источнике - путь к исходному каталогу/диску
MkLink | создаёт жёсткие и символические ссылки, связи каталогов, а также монтирует локальные диски на файловую систему
MkTemp | создаёт имя временного файла на основе шаблона
ProcessName | позволяет обработать некое имя файла: сравнить с маской, с масками или сгенерировать по маске новое имя

Различные функции

Функция | Описание
CopyToClipboard | копирует текстовую строку в буфер обмена Windows
FarClock | возвращает время (в микросекундах), истекшее с момента запуска сессии Far Manager
FarInputRecordToName | конвертирует код клавиш из INPUT_RECORD в строку с кодами клавиш во внутреннем представлении Far Manager'а
FarNameToInputRecord | конвертирует строку из кода клавиш с внутренним форматом клавиш Far Manager'а в INPUT_RECORD
FormatFileSize | форматирует число (размер файла) по заданным условиям
PasteFromClipboard | используется для получения данных из буфера Windows
XLat | используется для конвертирования части строки из одного набора символов (например Русский) в другой (например Латиница)
Смотрите также:
PluginStartupInfo


FSF.atoi

atoi

главная | стандартные функции
Функция FSF.atoi преобразует символьную строку в целое число типа int.
int WINAPI atoi(
  const wchar_t *Str
);

Параметры

Str
Указатель на строку, содержащую строковое представление числа.

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

atoi возвращает преобразованное значение входной строки Str. Если строка не может быть преобразована, то функция возвращает 0.

Замечания

Символы в строке Str должны совпадать со следующим форматом:
[ws][sn][ddd] где
ws - табуляция и пробел
sn - знак числа - '+' или '-'
ddd - строка цифр - от '0' до '9'
Преобразование заканчивается, когда функция встречает первый "неправильный" символ. Проверка на переполнение не ведётся (результат неопределённый).

Пример

Вы можете в программе описать указатель на функцию, инициализировать и использовать её:
FARSTDATOI FarAtoi;
...
FarAtoi=Info.FSF->atoi;
...
I=FarAtoi(Str);
...или вызывать непосредственно:
I=Info.FSF->atoi(Str);
Смотрите также:
FSF.atoi64, FSF.itoa, FSF.itoa64


FSF.atoi64

atoi64

главная | стандартные функции
Функция FSF.atoi64 конвертирует строку в целое число типа __int64.
__int64 WINAPI atoi64(
  const wchar_t *Str
);

Параметры

Str
Указатель на строку, содержащую строковое представление числа.

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

atoi64 возвращает преобразованное значение входной строки Str. Если строка не может быть преобразована, то функция возвращает 0i64.

Замечания

Символы в строке Str должны совпадать со следующим форматом:
[ws][sn][ddd] где
ws - табуляция и пробел
sn - знак числа - '+' или '-'
ddd - строка цифр - от '0' до '9'
Преобразование заканчивается, когда функция встречает первый "неправильный" символ. Проверка на переполнение не ведётся (результат неопределённый).

Пример

Вы можете в программе описать указатель на функцию, инициализировать и использовать её:
FARSTDATOI64 FarAtoi64;
...
FarAtoi64=Info.FSF->atoi64;
...
I_64=FarAtoi64(Str);
...или вызывать непосредственно:
I_64=Info.FSF->atoi64(Str);
Смотрите также:
FSF.atoi, FSF.itoa, FSF.itoa64


FSF.bsearch

bsearch

главная | стандартные функции
Функция FSF.bsearch осуществляет двоичный поиск в массиве.
void* WINAPI bsearch(
  const void *Key,
  const void *Base,
  size_t NElem,
  size_t Width,
  int (WINAPI *fcmp)(const void *, const void *,void *),
  void *UserParam
);

Параметры

Key
Указатель на элемент, который хотим найти.
Base
Указатель на начало данных для сортировки. Массив данных должен быть отсортирован.
NElem
Количество сортируемых данных.
Width
Размер одного элемента сортируемых данных.
fcmp
Функция сравнения двух элементов. В процессе сортировки вызывается каждый раз, когда необходимо сравнить пару элементов данных. Функция сравнения fcmp должна иметь декларацию WINAPI.
fcmp получает три аргумента - elem1, elem2 (которые являются указателями на данные) и userparam (то, что было передано в функцию в качестве параметра UserParam), и возвращает результат:
*elem1 < *elem2 | - fcmp возвращает целое меньше 0
*elem1 == *elem2 | - fcmp возвращает 0
*elem1 > *elem2 | - fcmp возвращает целое больше 0
UserParam
Указатель на пользовательские данные, которые функция qsort будет передавать в функцию сравнения fcmp в качестве третьего параметра.

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

Функция возвращает адрес первого вхождения в таблице Base, которое соответствует ключу поиска Key. Если значение не найдено, то функция возвращает 0.

Замечания

Более подробно о функции см. справочное руководство по языку C/C++.

Пример

Смотрите также:
FSF.qsort


FSF.itoa

itoa

главная | стандартные функции
Функция FSF.itoa конвертирует целое число типа int (32-битное целое) в строку.
wchar_t * WINAPI itoa(
  int Value,
  wchar_t *Str,
  int Radix
);

Параметры

Value
Значение для конвертирования.
Str
Указатель на строку-приёмник. Размер строки Str должен быть достаточно большим чтобы включать преобразованную строку (максимальное значение = 32 символа + символ конца строки '\0').
Radix
Определяет базу, которая должна использоваться при преобразовании числа Value. Допустимые значения от 2 до 36.

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

Указатель на строку-приёмник.

Примечание

Если Value отрицательное число и Radix = 10, то первым символом строки будет знак минус '-'.

Пример

Вы можете в программе описать указатель на функцию, инициализировать и использовать её:
FARSTDITOA FarItoa;
...
FarItoa=Info.FSF->itoa;
...
FarItoa(Value,Str,10);
...или вызывать непосредственно:
Info.FSF->itoa(Value,Str,10);
Смотрите также:
FSF.atoi, FSF.atoi64, FSF.itoa64


FSF.itoa64

itoa64

главная | стандартные функции
Функция FSF.itoa64 конвертирует целое число типа __int64 (64-битное целое) в строку. Функция является аналогом стандартной RTL-функции _i64toa.
wchar_t * WINAPI itoa64(
  __int64 Value,
  wchar_t *Str,
  int Radix
);

Параметры

Value
Значение для конвертирования.
Str
Указатель на строку-приёмник. Размер строки Str должен быть достаточно большим чтобы включать преобразованную строку (максимальное значение = 64 символа + символ конца строки '\0').
Radix
Определяет базу, которая должна использоваться при преобразовании числа Value. Допустимые значения от 2 до 36.

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

Указатель на строку-приёмник.

Примечание

Если Value отрицательное число и Radix = 10, то первым символом строки будет знак минус '-'.

Пример

Вы можете в программе описать указатель на функцию, инициализировать и использовать её:
FARSTDITOA64 FarItoa64;
...
FarItoa64=Info.FSF->itoa64;
...
FarItoa64(Value64,Str,10);
...или вызывать непосредственно:
Info.FSF->itoa64(Value64,Str,10);
Смотрите также:
FSF.atoi, FSF.atoi64, FSF.itoa


FSF.LIsAlpha

LIsAlpha

главная | стандартные функции
Функция FSF.LIsAlpha проверяет, является ли символ с указанным кодом буквой.
int WINAPI LIsAlpha(
  wchar_t Ch
);

Параметры

Ch
Код символа для проверки.

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

Если указанный символ является буквой, то вернётся TRUE, иначе - FALSE.

Примечание

Пример


FSF.LIsAlphanum

LIsAlphanum

главная | стандартные функции
Функция FSF.LIsAlphanum проверяет, является ли символ с указанным кодом буквой или цифрой.
int WINAPI LIsAlphanum(
  wchar_t Ch
);

Параметры

Ch
Код символа для проверки.

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

Если указанный символ является буквой или цифрой, то вернётся TRUE, иначе - FALSE.

Примечание

Пример


FSF.LIsLower

LIsLower

главная | стандартные функции
Функция FSF.LIsLower проверяет, является ли символ с указанным кодом буквой в нижнем регистре.
int WINAPI LIsLower(
  wchar_t Ch
);

Параметры

Ch
Код символа для проверки.

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

Если символ с указанным кодом является буквой в нижнем регистре, то вернётся TRUE, иначе - FALSE.

Примечание

Пример


FSF.LIsUpper

LIsUpper

главная | стандартные функции
Функция FSF.LIsUpper проверяет, является ли символ с указанным кодом буквой в верхнем регистре.
int WINAPI LIsUpper(
  wchar_t Ch
);

Параметры

Ch
Код символа для проверки.

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

Если символ с указанным кодом является буквой в верхнем регистре, то вернётся TRUE, иначе - FALSE.

Примечание

Пример


FSF.LLower

LLower

главная | стандартные функции
Функция FSF.LLower преобразует символ в нижний регистр.
wchar_t WINAPI LLower(
  wchar_t UpperChar
);

Параметры

UpperChar
Код символа для преобразования.

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

Возвращается преобразованный символ.

Примечание

Пример


FSF.LLowerBuf

LLowerBuf

главная | стандартные функции
Функция FSF.LLowerBuf преобразует массив символов указанной длины, (который может содержать нулевые символы) в нижний регистр.
void WINAPI LLowerBuf(
  wchar_t *Buf,
  int Length
);

Параметры

Buf
Указатель на обрабатываемый массив.
Length
Размер массива.

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

Нет.

Примечание

Пример


FSF.LStricmp

LStricmp

главная | стандартные функции
Функция FSF.LStricmp сравнивает две строки без учёта регистра.
int WINAPI LStricmp(
  const wchar_t *Str1,
  const wchar_t *Str2
);

Параметры

Str1, Str2
Указатели на строки, которые вы хотите сравнить.

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

Функция возвращает:
-1 - если s1 < s2
1 - если s1 > s2
0 - если s1 == s2

Примечание

Пример


FSF.LStrlwr

LStrlwr

главная | стандартные функции
Функция FSF.LStrlwr преобразует строку, оканчивающуюся нулём, в нижний регистр.
void WINAPI LStrlwr(
  wchar_t *s1
);

Параметры

s1
Указатель на обрабатываемую строку.

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

Нет.

Примечание

Пример


FSF.LStrnicmp

LStrnicmp

главная | стандартные функции
Функция FSF.LStrnicmp сравнивает части двух строк без учёта регистра.
int WINAPI LStrnicmp(
  const wchar_t *Str1,
  const wchar_t *Str2,
  intptr_t Num
);

Параметры

Str1, Str2
Указатели на строки, которые вы хотите сравнить.
Num
Размер части строки для сравнения.

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

Функция возвращает:
-1 - если s1 < s2
1 - если s1 > s2
0 - если s1 == s2

Примечание

Пример


FSF.LStrupr

LStrupr

главная | стандартные функции
Функция FSF.LStrupr преобразует строку, оканчивающуюся нулём, в верхний регистр.
void WINAPI LStrupr(
  wchar_t *Str
);

Параметры

Str
Указатель на обрабатываемую строку.

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

Нет.

Примечание

Пример


FSF.LUpper

LUpper

главная | стандартные функции
Функция FSF.LUpper преобразует символ в верхний регистр.
wchar_t WINAPI LUpper(
  wchar_t LowerChar
);

Параметры

LowerChar
Код символа для преобразования.

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

Возвращается преобразованный символ.

Примечание

Пример


FSF.LUpperBuf

LUpperBuf

главная | стандартные функции
Функция FSF.LUpperBuf преобразует массив символов указанной длины, (который может содержать нулевые символы) в верхнем регистр.
void WINAPI LUpperBuf(
  wchar_t *Buf,
  int Length
);

Параметры

Buf
Указатель на обрабатываемый массив.
Length
Размер массива.

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

Нет.

Примечание

Пример


FSF.qsort

qsort

главная | стандартные функции
Функция FSF.qsort осуществляет сортировку данных с использованием алгоритма QuickSort.
void WINAPI qsort(
  void *Base,
  size_t NElem,
  size_t Width,
  int (WINAPI *fcmp)(const void *, const void *, void *),
  void *UserParam
);

Параметры

Base
Указатель на начало данных для сортировки.
NElem
Количество сортируемых данных.
Width
Размер одного элемента сортируемых данных.
fcmp
Функция сравнения двух элементов. В процессе сортировки вызывается каждый раз, когда необходимо сравнить пару элементов данных. Функция сравнения fcmp должна иметь декларацию WINAPI.
fcmp получает три аргумента - elem1, elem2 (которые являются указателями на данные) и userparam (то, что было передано в функцию в качестве параметра UserParam), и возвращает результат:
*elem1 < *elem2 | - fcmp возвращает целое меньше 0
*elem1 == *elem2 | - fcmp возвращает 0
*elem1 > *elem2 | - fcmp возвращает целое больше 0
UserParam
Указатель на пользовательские данные, которые функция qsort будет передавать в функцию сравнения fcmp в качестве третьего параметра.

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

Нет.

Примечание

Функция реализует нестабильную сортировку. Иными словами, порядок элементов, равных с точки зрения функции сравнения, не определён и может меняться при повторных сортировках уже отсортированного массива.
Смотрите также:
FSF.bsearch


FSF.snprintf

snprintf

главная | стандартные функции
Функция FSF.snprintf осуществляет форматированный вывод в строку заданного размера.
int WINAPI snprintf(
  wchar_t *Buffer,
  size_t Sizebuf,
  const wchar_t *Format,
  ...
);

Параметры

Buffer
Приёмник форматированных данных.
Sizebuf
Максимально-допустимый размер приёмника форматированных данных.
Format
Указатель на строку, содержащую спецификаторы формата
...
Необязательные аргументы.

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

В случае успеха функция возвращает количество записанных в Buffer байт (символ конца строки в это количество не входит).
В случае ошибки возвращается EOF (-1).

Примечание

Более подробно о функции см. справочное руководство по языку C/C++.
Смотрите также:
FSF.sprintf


FSF.sprintf

sprintf

главная | стандартные функции
Функция FSF.sprintf осуществляет форматированный вывод в строку.
int WINAPI sprintf(
  wchar_t *Buffer,
  const wchar_t *Format,
  ...
);

Параметры

Buffer
Приёмник форматированных данных.
Format
Указатель на строку, содержащую спецификаторы формата
...
Необязательные аргументы.

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

В случае успеха функция возвращает количество записанных в Buffer байт (символ конца строки в это количество не входит).
В случае ошибки возвращается EOF (-1).

Примечание

Более подробно о функции см. справочное руководство по языку C/C++.
Смотрите также:
FSF.snprintf


FSF.sscanf

sscanf

главная | стандартные функции
Функция FSF.sscanf осуществляет форматированный ввод из строки.
int WINAPI sscanf(
  const wchar_t *Buffer,
  const wchar_t *Format,
  [address, ...]
);

Параметры

Buffer
Источник данных для ввода.
Format
Указатель на строку, содержащую спецификаторы формата
address
Адреса переменных.

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

В случае успеха функция возвращает количество записанных полей. (символ конца строки в это количество не входит).
В случае ошибки возвращается 0 - ни одного поля не считано.

Примечание

Более подробно о функции см. справочное руководство по языку C/C++.


FSF.AddEndSlash

AddEndSlash

главная | стандартные функции
Функция FSF.AddEndSlash добавляет к строке обратный слеш.
BOOL WINAPI AddEndSlash(
  wchar_t *Path
);

Параметры

Path
Указатель на обрабатываемую строку.

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

  • TRUE - при успешном добавлении/преобразовании строки Path.
  • FALSE - если в качестве параметра Path передали значение NULL.

Замечания

  1. Строка должна иметь достаточный объём, чтобы поместить в неё ещё один символ.
  2. Функция работает с обоими видами слешей - прямым и обратным.
  3. Также происходит изменение уже существующего конечного слеша на тот, который чаще встречается в строке Path.
  4. Если в конце строки уже содержится обратный слеш, то ещё один слеш в конец не добавляется.


FSF.PointToName

PointToName

главная | стандартные функции
Функция FSF.PointToName используется для получения указателя на имя файла в данном имени файла с путём.
const wchar_t* WINAPI PointToName(
  const wchar_t *Path
);

Параметры

Path
Обрабатываемое имя файла с путём.

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

Указатель на имя файла.

Примечание

Пример


FSF.LTrim

LTrim

главная | стандартные функции
Функция FSF.LTrim удаляет ведущие пробелы в строке.
wchar_t* WINAPI LTrim(
  wchar_t *Str
);

Параметры

Str
Указатель на обрабатываемую строку, которая оканчивается нулём. Результат работы будет помещён в неё же.

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

Указатель на результирующую строку.
Смотрите также:
FSF.RTrim, FSF.Trim


FSF.QuoteSpaceOnly

QuoteSpaceOnly

главная | стандартные функции
Функция FSF.QuoteSpaceOnly заключает строку в кавычки, если она содержит хотя бы один пробел.
wchar_t* WINAPI QuoteSpaceOnly(
  wchar_t *Str
);

Параметры

Str
Указатель на обрабатываемую строку.

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

Возвращается указатель на результирующую строку.

Примечание

  1. Помните, что Str должна иметь достаточный размер, чтобы вместить кавычки.
  2. Если строка уже заключена в кавычки - преобразования не происходит.
  3. Функция корректно добавляет недостающие кавычки в начало или в конец строки, если таковых нету.


FSF.RTrim

RTrim

главная | стандартные функции
Функция FSF.RTrim удаляет конечные пробелы в строке.
wchar_t* WINAPI RTrim(
  wchar_t *Str
);

Параметры

Str
Указатель на обрабатываемую строку, которая оканчивается нулём. Результат работы будет помещён в неё же.

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

Указатель на результирующую строку.
Смотрите также:
FSF.LTrim, FSF.Trim


FSF.Trim

Trim

главная | стандартные функции
Функция FSF.Trim удаляет ведущие и конечные пробелы в строке.
wchar_t* WINAPI Trim(
  wchar_t *Str
);

Параметры

Str
Указатель на обрабатываемую строку, которая оканчивается нулём. Результат работы будет помещён в неё же.

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

Указатель на результирующую строку.
Смотрите также:
FSF.LTrim, FSF.RTrim


FSF.TruncPathStr

TruncPathStr

главная | стандартные функции
Функция FSF.TruncPathStr усекает указанный путь до требуемого размера и вставляет при надобности многоточие вместо отрезанной части.
wchar_t* WINAPI TruncPathStr(
  wchar_t *Str,
  intptr_t MaxLength
);

Параметры

Str
Указатель на строку, содержащую путь. Результат работы будет помещён в неё же.
MaxLength
Размер, до которого нужно обрезать путь.

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

Указатель на результирующую строку.
Смотрите также:
FSF.TruncStr


FSF.TruncStr

TruncStr

главная | стандартные функции
Функция FSF.TruncStr усекает указанную строку до требуемой длины и вставляет в начало строки многоточие вместо отрезанной части.
wchar_t* WINAPI TruncStr(
  wchar_t *Str,
  intptr_t MaxLength
);

Параметры

Str
Указатель на обрабатываемую строку. Результат работы будет помещён в неё же.
MaxLength
Размер, до которого нужно обрезать строку.

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

Указатель на результирующую строку.

Примечание

Пример

Смотрите также:
FSF.TruncPathStr


FSF.Unquote

Unquote

главная | стандартные функции
Функция FSF.Unquote убирает из строки все двойные кавычки.
void WINAPI Unquote(
  wchar_t *Str
);

Параметры

Str
Указатель на обрабатываемую строку, которая оканчивается нулём. Результат работы будет помещён в неё же.

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

Нет.

Примечание


FSF.ConvertPath

ConvertPath

главная | стандартные функции
Функция FSF.ConvertPath преобразует относительное имя файлового объекта в полное.

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

  • Не используйте для этих целей функцию GetFullPathName из Windows API.
  • Не передавайте относительные имена файлов в любые функции Windows API, все относительные пути должны быть преобразованы в полные.
  • При передаче имён в функции Windows API используйте префикс "\\?\", чтобы избежать проблемы с длинными и нестандартными именами файлов.

size_t WINAPI ConvertPath(
  enum CONVERTPATHMODES Mode,
  const wchar_t *Src,
  wchar_t *Dest,
  size_t DestSize
);

Параметры

Mode
Указывает на необходимое действие. Может быть следующим (перечисление CONVERTPATHMODES):
Действие | Описание
CPM_FULL | преобразует относительное имя файлового объекта в полное
CPM_REAL | преобразует относительное имя файлового объекта в полное, с учётом символических ссылок.
CPM_NATIVE | преобразует относительное имя файлового объекта в полное, предваряя путь префиксами "\\?\" (для локальных объектов) или "\\?\UNC\" (для сетевых объектов); это преобразование имеет смысл применять для избежания проблем с длинными и нестандартными именами файлов (подробности)
Src
Указатель на источник данных - полное или относительное имя файла/каталога.
Dest
Укзатель на строку назначения, сюда будет помещён полный путь. Установите Dest = NULL для того, чтобы узнать необходимый размер буфера в символах.
DestSize
Максимальное количество символов, которое можно поместить в Dest, с заключительным нулём.

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

Необходимый размер буфера Dest в символах.

Особенности Mode = CPM_REAL:

  • Для монтированных дисков, которые не имеют буквы диска, функция поместит в Dest строку, подобную этой: "\\?\Volume{273872e0-5e49-11d5-b614-0080ad70bb9b}\Foo.bar"
  • Если, например, каталог "D:\Foo\Bar" является симлинком для реально существующего "C:\work\Doc", то функция для файла "D:\Foo\Bar\1092\readme.txt" вернёт "C:\work\Doc\1092\readme.txt"

Замечания

  1. Параметры Src и Dest могут ссылаться на одну и ту же строку.

Пример

Неправильно:

   GetFileAttributes(L"..\\some_file");

Правильно:

   wchar_t *FullName = new wchar_t[MAX_PATH];
   size_t Size = FSF.ConvertPath(CPM_FULL, L"..\\some_file", FullName, Size);
   if (Size > MAX_PATH)
   {
     delete[] FullName;
     FullName = new wchar_t[Size];
     FSF.ConvertPath(CPM_FULL, L"..\\some_file", FullName, Size);
   }
   GetFileAttributes(FullName);
   delete[] FullName;


FSF.FarRecursiveSearch

FarRecursiveSearch

главная | стандартные функции
Функция FSF.FarRecursiveSearch осуществляет рекурсивный поиск файлов.
void WINAPI FarRecursiveSearch(
  const wchar_t *InitDir,
  const wchar_t *Mask,
  FRSUSERFUNC UserFunc,
  FRSMODE Flags,
  void *Param
);

Параметры

InitDir
Указывает на каталог, откуда начинается поиск, например L"c:\far\plugins"
Mask
Указывает на маску файлов. Маска файла может быть стандартного Far Manager вида.
UserFunc
Указывает на функцию типа FRSUSERFUNC, которая будет вызываться для каждого найденного файла. Функция должна вернуть TRUE для продолжения поиска файлов, или FALSE для окончания поиска.
Flags
Указывает на необходимое действие. Может быть следующим (тип FRSMODE):
Флаг | Описание
FRS_RETUPDIR | По окончании поиска параметр FullName функции UserFunc будет содержать имя каталога, в котором обнаружен заданный файл.
FRS_RECUR | Поиск заданного файла в дереве каталогов.
FRS_SCANSYMLINK | Позволяет искать файлы в символических связях наравне с обычными подкаталогами.
Param
Указатель на данные пользователя, Far Manager его никак не обрабатывает, просто передаёт в UserFunc.

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

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

Замечания

  1. Если хотите использовать данные, переданные функции UserFunc по окончании поиска, вы должны скопировать эти данные во внутренние переменные.
  2. Если флаг FRS_SCANSYMLINK не указан, то независимо от настроек Far Manager, символические ссылки обрабатываться не будут.


FSF.GetCurrentDirectory

GetCurrentDirectory

главная | стандартные функции
Функция FSF.GetCurrentDirectory позволяет узнать внутренний "текущий каталог" Far Manager.

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

  • Не используйте для этих целей функцию GetCurrentDirectory из Windows API.

    Far устанавливает "текущий каталог" процесса исключительно в целях совместимости со старыми плагинами, и никто не гарантирует, что он всегда будет соответствовать каталогу, открытому в текущей панели.
size_t WINAPI GetCurrentDirectory(
  size_t Size,
  wchar_t *Buffer
);

Параметры

Size
Размер буфера. Указывает максимальное количество символов, которые могут быть записаны в Buffer, включая заключительный нулевой символ.
Buffer
Указатель на буфер, в который будет помещена строка с текущим каталогом Far Manager. Установите Buffer = NULL для того, чтобы функция вернула необходимый размер буфера в символах.

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

Функция возвращает необходимый размер буфера в символах.

Примечание


FSF.GetFileOwner

GetFileOwner

главная | стандартные функции
Функция FSF.GetFileOwner используется для определения владельца указанного файла.
size_t WINAPI GetFileOwner(
  const wchar_t *Computer,
  const wchar_t *Name,
  wchar_t *Owner,
  size_t Size
);

Параметры

Computer
Имя компьютера, содержащего обрабатываемый файл. Если этот параметр равен NULL, то используется текущий компьютер.
Name
Имя файла, для которого нужно определить владельца.
Owner
Указатель на буфер, который получит имя владельца файла. Установите Owner = NULL для того, чтобы узнать необходмый размер буфера в символах.
Size
Максимальное количество символов, которое можно поместить в Owner, с заключительным нулём.

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

Функция возвращает необходимый размер буфера Owner.

Примечание

Пример


FSF.GetNumberOfLinks

GetNumberOfLinks

главная | стандартные функции
Функция FSF.GetNumberOfLinks возвращает количество жёстких ссылок (hard links) для заданного файла.
size_t WINAPI GetNumberOfLinks(
  const wchar_t *Name
);

Параметры

Name
Имя требуемого файла.

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

В случае успеха функция возвращает количество жёстких ссылок или 0. Для файловых систем, отличных от NTFS это значение всегда равно 1.
Смотрите также:
MkLink


FSF.GetPathRoot

GetPathRoot

главная | стандартные функции
Функция FSF.GetPathRoot используется для получения имени корневого каталога для указанного пути с учётом символических ссылок.
size_t WINAPI GetPathRoot(
  const wchar_t *Path,
  wchar_t *Root,
  size_t DestSize
);

Параметры

Path
Обрабатываемый путь.
Root
Указатель на буфер, в который будет помещено имя корневого каталога. Установите Root = NULL для того, чтобы узнать необходмый размер буфера в символах.
DestSize
Размер буфера Root в символах, включая завершающий нулевой символ.

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

Функция возвращает необходимый размер буфера Root в символах.

Примечание

Получаемая строка:
  • Локальные диски - буква диска, двоеточие, слеш - C:\
  • Reparse point (на файловой системе NTFS 5 - Windows 2000) - нечто похожее на
    \\?\Volume{be877ec2-afd6-11d4-b5e3-806d6172696f}\ или
    \??\D:\
  • UNC-путь - имя хоста и имя расшаренного ресурса - \\host\share\

Пример


FSF.GetReparsePointInfo

GetReparsePointInfo

главная | стандартные функции
Функция FSF.GetReparsePointInfo позволяет для указанной символической ссылки или связи каталогов получить информацию об источнике - путь к исходному файлу/каталогу.
size_t WINAPI GetReparsePointInfo(
  const wchar_t *Src,
  wchar_t *Dest,
  size_t DestSize
);

Параметры

Src
Источник данных. Строка должна содержать полное имя к символической ссылке и заканчиваться слешем ('\').
Dest
Указатель на буфер, куда будет помещен путь. Установите Dest = NULL для того, чтобы узнать необходмый размер буфера в символах.
DestSize
Размер строки назначения Dest в символах с завершающим нулем.

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

Функция возвращает необходимый размер буфера в символах.

0 - в случае ошибки:

  • неверный путь (выставляется системный номер ошибки ERROR_PATH_NOT_FOUND)

Примечание

  1. Адреса Src и Dest могут совпадать.
  2. Возвращаемое функцией значение не несёт никакой практической пользы для сетевых дисков.
  3. В отличии от ConvertPath, функция FSF.GetReparsePointInfo применима только для симлинков.

Пример


FSF.MkLink

MkLink

главная | стандартные функции
Функция FSF.MkLink создаёт жёсткие и символические ссылки, связи каталогов, а также монтирует локальные диски на файловую систему.
BOOL WINAPI MkLink(
  const wchar_t *Target,
  const wchar_t *LinkName,
  enum LINK_TYPE LinkType,
  MKLINK_FLAGS Flags
);

Параметры

Target
Имя файлового объекта, на который создаётся ссылка.
LinkName
Имя создаваемой ссылки.
LinkType
Тип операции. Одно из (перечисление LINK_TYPE):
Операция | Описание
LINK_HARDLINK | создать жёсткую ссылку (hardlink)
LINK_JUNCTION | создать связь каталогов (junction)
LINK_VOLMOUNT | монтировать локальный диск на файловую систему
LINK_SYMLINKFILE | создать символическую ссылку-файл
LINK_SYMLINKDIR | создать символическую ссылку-каталог
LINK_SYMLINK | автоматически выбрать тип создаваемой символической ссылки
Flags
Флаг, одно из (тип MKLINK_FLAGS):
Флаг | Описание
MLF_SHOWERRMSG | выводить сообщения об ошибках
MLF_DONOTUPDATEPANEL | после создания ссылки не обновлять панели
MLF_HOLDTARGET | для символических ссылок не конвертировать Target в полный путь
MLF_NONE | нулевой флаг

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

1 - ссылка создана.

0 - ошибка при создании ссылки:

  • Для жёстких ссылок:
    • Target или LinkName находятся на разных разделах;
    • раздел не NTFS;
    • раздел не локальный;
    • Target не существует или не является файлом.
    • LinkName уже существует;
  • Для связей:
    • Target или LinkName находятся не на локальных разделах;
    • раздел не NTFS 5.0;
    • Target не существует или не является каталогом;
    • LinkName существует, но не пустой каталог.
  • Для монтирования дисков:
    • Target или LinkName находятся не на локальных разделах;
    • раздел для LinkName не NTFS 5.0;
    • Src не существует или диск является не локальным;
    • LinkName существует, но не пустой каталог.

Примечание

  1. Ссылки создаются по следующим правилам:
    • жёсткие ссылки (hardlink) создаются только для файлов в пределах текущего NTFS-раздела;
    • связи (junction) создаются только для каталогов в пределах локальных NTFS-разделов;
    • монтирование локальных дисков на файловую систему только на NTFS-раздел.
  2. Если в качестве Target было передано значение, например L"C:", то вместо связи каталогов будет монтирован диск.
  3. Если для монтирования диска LinkName оканчивается слешем, то в LinkName будет создан каталог "disk_N" (где N - буква диска).
  4. В Windows 2000 напрямую делать связи на папки CD-ROM нельзя, но можно это ограничение обойти, смонтировав CD-ROM диск на папку NTFS-раздела (т.н. Mount Points). И уже из этой папки сделать нужную связь.

Пример

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


FSF.MkTemp

MkTemp

главная | стандартные функции
Функция FSF.MkTemp создаёт имя временного файла на основе шаблона.
size_t WINAPI MkTemp(
  wchar_t *Dest,
  size_t DestSize,
  const wchar_t *Prefix
);

Параметры

Dest
Указатель на буфер, который получит полное имя временного файла в верхнем регистре. Установите Dest = NULL для того, чтобы узнать необходмый размер буфера.
DestSize
Максимальное количество символов, которое можно поместить в Dest, с заключительным нулём.
Prefix
Указывает на оканчивающуюся нулём строку-префикс. Максимум первые четыре символа из этой строки будут использованы в качестве префикса имени файла. Far Manager дополнит символами '0' префикс, если размер Prefix меньше 4.
Если Prefix = NULL или пустой строке, то будет применён стандартный префикс "FTMP"

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

Функция возвращает необходимый размер буфера Dest в символах.

Примечание

  1. Имя временного файла формируется объединением пути к временному каталогу (получаемого через вызов функции GetTempPath ), переданного префикса, набора случайных шестнадцатеричных цифр. Формат:

    PrefXXXP.PTT

    здесь
    Pref - 4-х символьный префикс;
    XXX - три 16-ричных цифры;
    PP - две 16-ричных цифры PID (результат функции GetCurrentProcessId );
    TT - две 16-ричных цифры TID (результат функции GetCurrentThreadId ).

  2. Функция, физически не создаёт файл на диске, только формирует имя.

Пример

wchar_t TempName[MAX_PATH];

FSF.MkTemp(TempName,MAX_PATH,NULL);         -> "FTMP000D.P50"
FSF.MkTemp(TempName,MAX_PATH,L"");          -> "FTMP000D.P50"
FSF.MkTemp(TempName,MAX_PATH,L"MY");        -> "MY00000D.P50"
FSF.MkTemp(TempName,MAX_PATH,L"BaR");       -> "BAR0000D.P50"
FSF.MkTemp(TempName,MAX_PATH,L"TstPlugin"); -> "TSTP000D.P50"


FSF.ProcessName

ProcessName

главная | стандартные функции
Функция FSF.ProcessName позволяет обработать некое имя файла: сравнить с маской, с масками или сгенерировать по маске новое имя.
size_t WINAPI ProcessName(
  const wchar_t *Param1,
  wchar_t *Param2,
  size_t Size,
  PROCESSNAME_FLAGS Flags
);

Параметры

Param1
Зависит от Flags.
Param2
Зависит от Flags.
Size
Зависит от Flags.
Flags
Указывает на необходимое действие. Может быть следующим (тип PROCESSNAME_FLAGS):
Действие | Описание
PN_CMPNAME Сравнить имя файла с маской.
Param1 соответствует Pattern, Param2 соответствует String, Size игнорируется. Параметр Param1 может включать обычные допустимые в именах файлов символы, а также специальные выражения:
Метасимвол | Описание
* | любое количество символов
? | любой символ
[c,x-z] | любой символ из находящихся в квадратных скобках; допускаются и отдельные символы, и их диапазоны.
Например, файлы ftp.exe, fc.exe и f.ext совпадают с маской f*.ex?, маска *co* совпадает с color.ini и edit.com, маске [c-ft]*.txt будут соответствовать config.txt, demo.txt, faq.txt и tips.txt.
В случае успеха функция возвращает TRUE.
PN_CMPNAMELIST | Сравнить имя файла со списком масок, перечисленных через запятую. Аналог предыдущего флага, только Param1 соответствует списку масок. Size игнорируется.
PN_SKIPPATH | Может сочетаться с PN_CMPNAME или PN_CMPNAMELIST - указывает на то, что путь к имени файла при сравнении должен игнорироваться.
PN_GENERATENAME Генерировать имя файла на основе существующего (Param1) и маски (Param2). Результат, длиной Size, записывается в Param2 (учитывайте, что размер буфера Param2 должен быть не менее Size). Возвращается функцией требуемый размер буфера Param2.
Если нужно преобразовать только часть Param1, то можно указать размер этой части (может быть до 65535 символов) в Flags (добавить по принципу OR), например: Param1=L"dir1\\file1", а нам нужно изменить только "dir1", тогда параметр Flags должен быть равен PN_GENERATENAME|4
PN_CHECKMASK | Проверить валидность маски. Param1 соответствует списку масок для проверки.
PN_SHOWERRORMESSAGE | При проверке валидности маски (PN_CHECKMASK) выводить сообщение об ошибке.

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

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


FSF.CopyToClipboard

CopyToClipboard

главная | стандартные функции
Функция FSF.CopyToClipboard копирует текстовую строку в буфер обмена Windows.
BOOL WINAPI CopyToClipboard(
  enum FARCLIPBOARD_TYPE Type,
  const wchar_t *Data
);

Параметры

Type
Тип блока помещаемый в буфер обмена. Может быть следующим (перечисление FARCLIPBOARD_TYPE):
Тип | Описание
FCT_STREAM | потоковый
FCT_COLUMN | вертикальный
Data
Указатель на строку, которую нужно поместить в буфер обмена.
Если нужно очистить буфер обмена, передайте NULL.

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

В случае успеха возвращается TRUE, иначе - FALSE.


FSF.FarClock

FarClock

главная | стандартные функции
Функция FSF.FarClock возвращает время (в микросекундах), истекшее с момента запуска сессии Far Manager.
unsigned __int64 WINAPI FarClock();

Параметры

Нет.

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

Время (в микросекундах), истекшее с момента запуска сессии Far Manager.


FSF.FarInputRecordToName

FarInputRecordToName

главная | стандартные функции
Функция FSF.FarInputRecordToName конвертирует код клавиш из INPUT_RECORD в строку с кодами клавиш во внутреннем представлении Far Manager'а.
size_t WINAPI FarInputRecordToName(
  const INPUT_RECORD *Key,
  wchar_t *KeyText,
  size_t Size
);

Параметры

Key
Указатель на обрабатываемую структуру INPUT_RECORD.
KeyText
Указатель на строку, куда будет помещён результат преобразования. Установите KeyText = NULL для того, чтобы узнать необходимый размер буфера в символах.
Size
Максимальное количество символов, которое можно поместить в KeyText, с заключительным нулём.

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

Функция возвращает необходимый размер буфера KeyText в символах.

Примечание

Пример

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


FSF.FarNameToInputRecord

FarNameToInputRecord

главная | стандартные функции
Функция FSF.FarNameToInputRecord конвертирует строку из кода клавиш с внутренним форматом клавиш Far Manager'а в INPUT_RECORD.
BOOL WINAPI FarNameToInputRecord(
  const wchar_t *Name,
  INPUT_RECORD *Key
);

Параметры

Name
Символьное представление клавиши. Функция ожидает строку по спецификации:
  1. Предопределённые сочетания (см. keyboard.cpp::FKeys1[])
  2. Опциональные модификаторы ("Alt", "RAlt", "Ctrl", "RCtrl", "Shift") и 1 символ, например, "AltD" или "CtrlC"
  3. "Alt" (или "RAlt") и 5 десятичных цифр (с ведущими нулями)
  4. "Spec" и 5 десятичных цифр (с ведущими нулями)
  5. "Oem" и 5 десятичных цифр (с ведущими нулями)
  6. только модификаторы ("Alt", "RAlt", "Ctrl", "RCtrl", "Shift")
Key
Указатель на структуру INPUT_RECORD куда будет помещен результат преобразования.

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

В случае успеха функция возвращает TRUE.

Примечание

  1. Если в комбинации клавиш присутствует Ctrl или Alt и клавиша - "буква", то "буква" принудительно приводится к верхнему регистру. Например, FarNameToInputRecord("CtrlAltz") вернёт KEY_CTRLALTZ.
  2. Если в комбинации клавиш присутствует Ctrl или Alt и клавиша - "буква национального алфавита", то "буква" принудительно заменяется на клавиатурный эквивалент и приводится к верхнему регистру. Например, FarNameToInputRecord("CtrlУ") вернёт KEY_CTRLE.
  3. Комбинации клавиш Shift-"буква" преобразуется к "БУКВА" (т.е. удаляется компонента Shift и "буква" переводится в верхний регистр).

Пример


FSF.FormatFileSize

FormatFileSize

главная | стандартные функции
Функция FSF.FormatFileSize форматирует число (размер файла) по заданным условиям.
size_t WINAPI FormatFileSize(
  unsigned __int64 Size,
  intptr_t Width,
  FARFORMATFILESIZEFLAGS Flags,
  wchar_t *Dest,
  size_t DestSize
);

Параметры

Size
Число для форматирования.
Width
Ширина поля (примером может служить ширина колонки в панели). При значении равном -1 подразумевается - "сколько получится". Отрицательное значение ширины позволяет выравнивать слева.
Flags
Формат представления, может быть комбинацией следующих значений (тип FARFORMATFILESIZEFLAGS):
Флаг | Описание
FFFS_COMMAS | Вставлять разделитель между тысячами - "12 345".
FFFS_FLOATSIZE | Показывать размер файла в стиле Windows Explorer (т.е. "999" байт будут показаны как "999", а "1000" байт как "0.97 K").
FFFS_SHOWBYTESINDEX | Добавлять суффиксы: B - для байт, K - килобайт, M - мегабайт, G - гигабайт, T - терабайт, P - петабайт, E - эксабайт
FFFS_ECONOMIC | Экономичный режим, не показывать пробел перед суффиксом размера файла (т.е. "0.97K").
FFFS_THOUSAND | Использовать 1000 вместо 1024 в качестве делителя.
FFFS_MINSIZEINDEX | Использовать минимально допустимый индекс при форматировании. Индекс указывается в младшем байте и может быть только 0, 1, 2 или 3 (K,M,G,T), например, FFFS_MINSIZEINDEX|1 - "размер как минимум в мегабайтах".
Dest
Указатель на строку, куда будет помещён результат преобразования. Установите Dest = NULL для того, чтобы узнать необходимый размер буфера в символах.
DestSize
Максимальное количество символов, которое можно поместить в Dest, с заключительным нулём.

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

Необходимый размер буфера Dest в символах.

Примечание

Пример


FSF.PasteFromClipboard

PasteFromClipboard

главная | стандартные функции
Функция FSF.PasteFromClipboard используется для получения данных из буфера обмена Windows.
size_t WINAPI PasteFromClipboard(
  enum FARCLIPBOARD_TYPE Type,
  wchar_t *Data,
  size_t Size
);

Параметры

Type
Указывает на тип блока возвращаемый из буфера обмена. Может быть следующим (перечисление FARCLIPBOARD_TYPE):
Тип | Описание
FCT_ANY | любой
FCT_STREAM | потоковый
FCT_COLUMN | вертикальный
Data
Указатель на строку, в которую нужно поместить данные из буфера обмена. Установите Data = NULL для того, чтобы узнать необходмый размер буфера.
Size
Максимальное количество символов, которое можно поместить в Data, с заключительным нулём.

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

Функция возвращает необходимый размер буфера Data, или 0, если указанного типа блока нет в буфере обмена.

Пример

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


FSF.XLat

XLat

главная | стандартные функции
Функция FSF.XLat используется для конвертирования части строки из одного набора символов (например, Русский) в другой (например, Латиница).
wchar_t* WINAPI XLat(
  wchar_t *Line,
  intptr_t StartPos,
  intptr_t EndPos,
  XLAT_FLAGS Flags
);

Параметры

Line
Указатель на строку, часть которой будет перекодирована.
StartPos
Начальная позиция в строке Line.
EndPos
Конечная позиция в строке Line.
Flags
Может быть комбинацией следующих значений (тип XLAT_FLAGS):
Флаг | Описание
XLAT_SWITCHKEYBLAYOUT | Переключает раскладку клавиатуры после обработки строки.
XLAT_SWITCHKEYBBEEP | Выдать звуковой сигнал после переключения раскладки (работает если установлен флаг XLAT_SWITCHKEYBLAYOUT).
XLAT_USEKEYBLAYOUTNAME | Использовать предопределенные именованные правила для "двойных" клавиш. Параметр в базе настроек c именем раскладки, например: "XLat/00000409:reg_sz" обозначает "набирали по-русски в английской раскладке" "XLat/00000419:reg_sz" обозначает "набирали по-английски в русской раскладке" и т.п. Также, если установлен флаг XLAT_SWITCHKEYBLAYOUT, то переключение раскладок происходит только по списку значений, перечисленных в "XLat/Layouts:reg_sz" (перечисление через ';'), независимо от количества установленных в системе раскладок (больше 2).
XLAT_CONVERTALLCMDLINE | Конвертировать всю командную строку при отсутствии выделенного блока.
XLAT_NONE | Нулевой флаг.

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

Эта функция возвращает указатель на преобразованную строку.


Структуры

главная

Структуры общего назначения

Структура | Описание
ExitInfo | при закрытии плагина
FAR_CHAR_INFO | экранная символьная ячейка
FarColor | цвет и атрибуты текста и фона
FarKey | код клавиши
FarMenuItem | элемент меню
FarSetColors | изменение цветовой схемы Far Manager
FarStandardFunctions | указатели на стандартные функиции Far Manager
OpenInfo | информация о том, откуда открыт плагин
PluginStartupInfo | различная важная информация
ProcessConsoleInputInfo | информация о консольном событии Far Manager
ProcessSynchroEventInfo | информация о событии, которое будет исполнено в контексте основного потока Far Manager
ProgressValue | установка статуса операции на кнопке Far Manager в панели задач
RegExpMatch | используется в структуре RegExpSearch
RegExpSearch | используется в регулярных выражениях Far Manager
WindowInfo | информация об окне Far Manager
WindowType | информация о типе окна Far Manager

Специфические структуры панели

Структура | Описание
AnalyseInfo | информация для анализа файла
CloseAnalyseInfo | информация для освобождения ресурсов
ClosePanelInfo | информация о закрываемой панели
CmdLineSelect | выделение или сброс выделения блока в командной строке
CompareInfo | информация о сравниваемых элементах
DeleteFilesInfo | информация об удаляемых элементах
FarGetPluginPanelItem | элемент с панели
FarPanelDirectory | задание каталога панели
FarPanelItemFreeInfo | освобождение ресурсов у элемента панели
FarSetKeyBarTitles | переопределяет названия функциональных клавиш
FreeFindDataInfo | информация об удаляемой памяти
GetFilesInfo | информация о запрашиваемых файлах
GetFindDataInfo | информация о запрашиваемых файлах
InfoPanelLine | одна линия информационной панели
KeyBarLabel | переопределяет названия функциональных клавиш в полоске клавиш
KeyBarTitles | переопределяет названия функциональных клавиш в полоске клавиш
MakeDirectoryInfo | информация о создаваемом каталоге
OpenAnalyseInfo | данные после анализа файла
OpenCommandLineInfo | данные о командной строке
OpenPanelInfo | данные о создаваемой панели
OpenShortcutInfo | данные о шорт-кате
PanelInfo | информация о панели
PanelMode | определяет режим просмотра панели
PanelRedrawInfo | используется при перерисовке панели
PluginPanelItem | информация об одном элементе в эмулируемой файловой системе
ProcessHostFileInfo | информация при обработке архива
ProcessPanelEventInfo | информация о событии в панели
ProcessPanelInputInfo | информация о событии в панели
PutFilesInfo | информация о помещаемых на панель элементах
SetDirectoryInfo | информация о новом каталоге на панели
SetFindListInfo | информация о найденных элементах
SortingPanelItem | информация об одном элементе в эмулируемой файловой системе, используемая при пользовательской сортировке в панели

Специфические структуры редактора

Структура | Описание
EditorBookmarks | информация о закладках текущего редактируемого файла
EditorChange | информирует о том, как изменился текст в редакторе
EditorColor | установить или получить информацию о цветовых областях строк
EditorConvertPos | преобразование между реальным и экранным положением курсора в редакторе
EditorDeleteColor | удалить цветовую область в редакторе
EditorGetString | запрос строки из редактора
EditorInfo | текущее состояние редактора
EditorSaveFile | сохранение редактируемого файла
EditorSelect | выделение или сброс выделения блока в редакторе
EditorSetParameter | установка параметров редактора
EditorSetPosition | установка позиции в редакторе
EditorSetString | установка или вставка строки в редакторе
EditorUndoRedo | управление поведением операции Отмена-Возврат действия, т.н. Undo-Redo
EditorSubscribeChangeEvent | подписка на EE_CHANGE события
ProcessEditorEventInfo | информация о событии в редакторе
ProcessEditorInputInfo | информация о событии в редакторе

Специфические структуры программы просмотра

Структура | Описание
ViewerInfo | информации о текущем состоянии программы просмотра
ViewerMode | информация о режимах программы просмотра
ViewerSelect | выделение области в программе просмотра
ViewerSetMode | изменение режима программы просмотра
ViewerSetPosition | изменение текущей позиции в файле
ProcessViewerEventInfo | информация о событии в программе просмотра

Специфические структуры диалога

Структура | Описание
DialogInfo | информация о диалоге
FarDialogEvent | информация о событии диалога
FarDialogItem | элемент диалога
FarDialogItemColors | изменение цветовых атрибутов элементов диалога
FarDialogItemData | передача данных элементу диалога
FarGetDialogItem | запрос элемента диалога
FarList | список DI_LISTBOX
FarListDelete | параметры удаления элементов из DI_COMBOBOX и DI_LISTBOX
FarListFind | поиск элемента из DI_COMBOBOX и DI_LISTBOX
FarListGetItem | получение одного элемента списка из DI_COMBOBOX и DI_LISTBOX
FarListInfo | получить информацию о списках DI_COMBOBOX и DI_LISTBOX
FarListInsert | вставка элемента в DI_COMBOBOX и DI_LISTBOX
FarListItem | элемент списка
FarListItemData | ассоциация данных с элементом списка
FarListPos | позиционирование в списке
FarListTitles | установка/получение заголовков для списка
FarListUpdate | данные для обновления элемента списка
OpenDlgPluginData | информация о вызванном плагине из диалога
ProcessDialogEventInfo | информацию о событии диалога

Специфические структуры для настройки плагина

Структура | Описание
ConfigureInfo | информация о настраиваемом плагине
FarSettingsCreate | управление настройками плагина
FarSettingsEnum | управление настройками плагина
FarSettingsHistory | управление настройками плагина
FarSettingsItem | управление настройками плагина
FarSettingsName | управление настройками плагина
FarSettingsValue | управление настройками плагина

Специфические структуры для работы с плагинами

Структура | Описание
FarGetPluginInformation | получение информации о любом плагине
GlobalInfo | основная информация о плагине
PluginInfo | информация о модуле плагина
PluginMenuItem | информация о добавляемых в меню плагинов элементах
VersionInfo | информация о версии плагина

Специфические структуры для работы с макрокомандами

Структура | Описание
FarGetValue | запрошенная макропеременная
FarMacroCall | возврат данных в макрос
FarMacroLoad | загрузка макрофайлов
FarMacroValue | макропеременная
MacroAddMacro | добавить макропоследовательность в память
MacroExecuteString | передать исполняемый скрипт в Far Manager
MacroParseResult | результат проверки макропоследовательности
MacroSendMacroText | описание макропоследовательности
OpenMacroInfo | значения, передаваемые плагину из макропоследовательности

Специфические структуры для работы с контент-колонками

Структура | Описание
GetContentFieldsInfo | передача плагину списка типов контент-колонок в панели
GetContentDataInfo | получение от плагина данных для контент-колонок; освобождение данных
Смотрите также:
Экспортируемые функции, Сервисные функции, Типы и определения, Структуры и функции Windows API


SortingPanelItem

главная | структуры
Структура SortingPanelItem описывает элемент файловой системы. Она используется при пользовательской сортировке элементов панели.
struct SortingPanelItem
{
  FILETIME CreationTime;
  FILETIME LastAccessTime;
  FILETIME LastWriteTime;
  FILETIME ChangeTime;
  unsigned __int64 FileSize;
  unsigned __int64 AllocationSize;
  const wchar_t *FileName;
  const wchar_t *AlternateFileName;
  const wchar_t *Description;
  const wchar_t *Owner;
  const wchar_t * const *CustomColumnData;
  size_t CustomColumnNumber;
  PLUGINPANELITEMFLAGS Flags;
  struct
  {
    void *Data;
    FARPANELITEMFREECALLBACK FreeData;
  } UserData;
  uintptr_t FileAttributes;
  uintptr_t NumberOfLinks;
  uintptr_t CRC32;
  intptr_t Position;
  intptr_t SortGroup;
  uintptr_t NumberOfStreams;
  unsigned __int64 StreamsSize;
};

Элементы

Элементы, общие со структурой PluginPanelItem
Первые 17 элементов структуры (по CRC32 включительно) совпадают с элементами структуры PluginPanelItem.
Position
Позиция элемента во внутреннем списке. Эта величина не может быть одинаковой для двух разных элементов списка.
SortGroup
Идентификатор группы сортировки. Если элемент не входит ни в одну группу сортировки, данная величина равна 0.
NumberOfStreams
Количество потоков для данного элемента (NTFS).
StreamsSize
Суммарный размер потоков данного элемента (NTFS).
Смотрите также:
структуры, PluginPanelItem


GetContentFieldsInfo

главная | структуры | TODO:Content API
Структура GetContentFieldsInfo передает плагину список типов контент-колонок в функции GetContentFieldsW.
struct GetContentFieldsInfo
{
  size_t StructSize;
  size_t Count;
  const wchar_t* const *Names;
  void* Instance;
};

Элементы

StructSize
Размер структуры GetContentFieldsInfo.
Count
Количество элементов в массиве Names.
Names
Указывает на массив типов колонок.
Смотрите также:
структуры

ПРИМЕЧАНИЕ

Данное API не является окончательным и может быть изменено или удалено в любой момент.


GetContentDataInfo

главная | структуры | TODO:Content API
Структура GetContentDataInfo используется для передачи плагину списка типов контент-колонок и получения от плагина данных по всем или некоторым из этих колонок для заданного файла в функции GetContentDataW.
struct GetContentDataInfo
{
  size_t StructSize;
  const wchar_t *FilePath;
  size_t Count;
  const wchar_t* const *Names;
  const wchar_t **Values;
  void* Instance;
};

Элементы

StructSize
Размер структуры GetContentDataInfo.
FilePath
Полное имя файла или папки, для которых запрашиваются данные.
Count
Количество элементов в каждом из массивов Names и Values.
Names
Указывает на массив типов колонок. Заполняется Far Manager'ом.
Values
Указывает на массив значений. Заполняется плагином.
Массив поступает от Far Manager'а, инициализированный нулями.
Плагин должен заполнить его только по индексам, соответствующим индексам типов в массиве Names, поддерживаемых плагином.
Смотрите также:
структуры

ПРИМЕЧАНИЕ

Данное API не является окончательным и может быть изменено или удалено в любой момент.


Языки и файлы помощи

главная

Использование данного раздела позволит вам с лёгкостью подстраивать ваши плагины под любой язык (в известных пределах) - достаточно создать пару файлов и всё готово.

Все *.lng и *.hlf файлы в каталоге с Far Manager`ом, во всех подкаталогах папки Plugins считаются как языковые файлы и файлы подсказки.
Файлы создаются в кодировке UTF-8. Управляющий элемент .Language задаёт язык.

Формат | Описание
Управляющие элементы | описание управляющих элементов в языковых файлах и в файлах подсказки
Языковые файлы | описание синтаксиса языковых файлов
Файлы помощи | описание синтаксиса файлов подсказки


Управляющие элементы

главная | языковая поддержка
В начале языковых файлов и в файлах подсказки могут содержаться следующие управляющие элементы, начинающиеся с точки.
Управляющий элемент Описание
.Language
.Language=<Language name>,<Language description>
Этим элементом должен начинаться любой файл помощи или поддержки языка.
<Language name>
описывает файловый язык и должен быть стандартным языковым именем (на английском). Все файлы с тем же языком должны иметь то же значение <Language name>.
<Language description>
может содержать языковое описание в любой форме. Эта строка отобразится в меню Languages (Языки).
.PluginContents
.PluginContents=<Contents topic name>

Это дополнительное утверждение может использоваться для добавления <Contents topic name> в список помощи плагинов (отображается в помощи Far Manager нажатием Shift+F2). После выбора этого пункта будет показана тема Contents (см. раздел "Файлы помощи" относительно темы Contents).

.Options
.Options <KeyName>=<Value>
Это дополнительное утверждение может использоваться для указания дополнительных опций в файлах помощи. Таких утверждений может быть несколько.
<KeyName>
Одно из следующих значений:
  • CtrlColorChar
    Значение <Value> содержит символ, с помощью которого будет указан цветовой атрибут (см. раздел "Файлы помощи" относительно темы CtrlColorChar). Например, утверждение:
    .Options CtrlColorChar=\
    говорит о том, что для спецсимвола, указывающего на цветовые атрибуты будет использоваться символ \.

  • TabSize
    <Value> указывает на размер табуляции в HLF-файле. Может быть от 1 до 16. По умолчанию равно 8.

  • CtrlStartPosChar
    Значение <Value> содержит символ, с помощью которого будет указано с какой позиции начинать последующие строки. Например, утверждение:
    .Options CtrlStartPosChar=&
    говорит о том, что спецсимволом позиции переноса будет символ '&', тогда
    пункт 1 - &папа у Васи силён в математике, учится папа за Васю весь год.
    выравнивается так:
    _пункт 1 - папа у Васи силён в математике, учится папа
           за Васю весь год.

Пример:

.Language=Russian,Russian (Русский)
.PluginContents=FTP клиент
@Contents
$ #FTP клиент#
   ~Подключение к FTP серверу~@FTPConnect@

   ~Работа с именами серверов~@FTPNames@

   ~Команды FTP клиента~@FTPCmd@

   ~Конфигурация FTP клиента~@FTPCfg@

   ~Режимы панели FTP клиента~@FTPPanel
Смотрите также:
Языковая поддержка, Файлы помощи


Языковые файлы

главная | языковая поддержка | GetMsg

Языковой файл (текстовый файл в кодировке UTF-8 с расширением .LNG) предназначен для хранения строковых ресурсов, используемых плагином для вывода сообщений в диалогах и меню.

Сообщения в языковых файлах должны заключаться в двойные кавычки. Символ кавычки также может использоваться в сообщениях.

Все сообщения, не начинающиеся с двойной кавычки или точки считаются комментариями и игнорируются. Ведущие пробелы перед строкой игнорируются.

.Language=Russian,Russian (Русский)
"Пожалуйста зарегистрируйте вашу копию"
"Зарегистрирован"
"Да"
"Нет"
:
//functional keys - 6 characters max
"Помощь"
"ПользМ"
:
"Группы"
"Выбран"
//End of functional keys

Примечание

  1. При использовании кавычек в сообщениях не обязательно ставить обратный слеш и дублировать кавычки. Far Manager, обрабатывая каждую строку из языкового файла, смотрит только на начальную и заключительную кавычки. Например,
    "Option "Autodetect character table" is off."
"Copy \"%.55s\" to"
    обе строки являются корректными;
  2. длина строки - не более 1000 символов;
  3. строку нельзя разбивать на подстроки;
  4. допускается применение следующих управляющих символов: '\n', '\r', '\\', '\b', '\t'
Смотрите также:
Управляющие элементы, Языковая поддержка, GetMsg


Файлы помощи

главная | языковая поддержка

Синтаксис Help-файла.

В файлах подсказки могут содержаться следующие управляющие элементы.
Управляющий элемент | Описание
@Topic (в начале строки) Начать определение темы Topic. Существуют 4 предопределённых темы:
  1. Тема с именем Contents имеет специальное назначение. Она вызывается при нажатии клавиши F1 из командной строки Far Manager или при выборе пункта из списка помощи плагинов.
  2. Если плагин "умеет настраиваться", то желательно в качестве имени темы помощи для диалога настройки указать Config. Эта тема будет также вызываться , когда пользователь нажмёт клавишу F1 в меню конфигурации плагинов (Options|Plugins configuration)
  3. Если плагин умеет работать и в панелях и в редакторе/программе просмотра, но при этом выполняет разные действия, то имеет смысл в HLF-файлах использовать две предопределённых темы: Editor и Viewer (для редактора и программы просмотра, соответственно). В этом случае Shift+F1 в списке плагинов в редакторе/программе просмотра покажет тему помощи Editor/Viewer.
@Topic=RealTopic (в начале строки)

Задает псевдоним для темы. В случае вызова Topic будет открыта тема RealTopic.

Управляющий элемент необходимо указывать в начале файла помощи до определения первой темы.

$Text (в начале строки) | Определяет непрокручиваемую область помощи. Можно указывать несколько идущих подряд строк для не прокручиваемой области, но все эти строки должны идти сразу после определения темы (символа '@').
~Text~@Topic@ Ссылка на тему. Если вы желаете поставить ссылку на тему из основного файла помощи Far Manager, то перед именем темы поставьте символ ':'.
Ссылка должна располагаться в одной строке.
~Text~@<FullPath>Topic@ Абсолютная или относительная ссылка на тему в файле помощи, находящемся в каталоге FullPath. Путь задаётся c заключительным слешем.
Ссылка должна располагаться в одной строке.
Например, плагин Foo располагается в каталоге 'D:\FAR\Plugins\Foo' и нам надо показать тему помощи 'FooInfo' из хелпа по этому плагину.
~Информации о плагине Foo~@<D:\FAR\Plugins\Foo\>FooInfo@
~Text~@<FullModuleName>Topic@ Абсолютная или относительная ссылка на тему в файле помощи, находящемся в том же каталоге, где находится плагин FullModuleName.
Ссылка должна располагаться в одной строке.
Например, для плагина Foo 'D:\FAR\Plugins\Foo\Foo.dll' необходимо показать тему помощи 'FooInfo' из хелпа по этому плагину.
~Информации о плагине Foo~@<D:\FAR\Plugins\Foo\Foo.dll>FooInfo@
~Text~@URL@ URL-активатор - запуск приложений, поддерживающих URL-протоколы. Под URL-приложениями понимаются такие приложения, которые поддерживают протоколы, подобные этим:
~доступ к файлам~@file://C:\Program Files\Far\License.xUSSR.txt@
~передача файлов по FTP~@ftp://ftp.kgb.ru/WinUtil/Rar/@
~HTTP~@http://plugring.farmanager.com/@
~MailTo~@mailto:vskirdin@@mail.ru@
~News~@news://fido7.far.support@
~Telnet~@telnet://fido7.far.support@
Должно располагаться в одной строке.
#Text# | Выделенный текст Text.
^ (в начале строки или после $) | Центрирование строки.
@- (в начале строки) | Отключает автоформатирование текста. По умолчанию Far Manager форматирует все строки, которые в тексте начинаются с первой позиции. Должен находится в отдельной строке.
@+ (в начале строки) | Включает автоформатирование текста. Должен находится в отдельной строке.
@=Symbol (в начале строки) Рисует горизонтальную линию из символов Symbol цветом обычного текста. Линия рисуется на всю ширину окна Помощи с отступами по одному символу слева и справа. Если Symbol не указан, будет отрисована горизонтальная одинарная линия. Остаток строки игнорируется.
Например, "@=*" в начале строки рисует линию из символов '*'
<CtrlColorChar>XX Задаёт цветовые атрибуты, которыми будет отрисован следующий за этой конструкцией текст. Цветовые атрибуты XX - две шестнадцатеричных цифры (0-9A-F).
Например, в качестве управляющего кода <CtrlColorChar> был задан символ '\'. Тогда конструкция \4F заставит менеджер помощи рисовать следующий за приведённой конструкцией текст белыми буквами на тёмно-красном фоне.
(см. CtrlColorChar)
<CtrlColorChar>- Устанавливает цветовые атрибуты в предустановленный цвет.
(см. CtrlColorChar)
<!Macro:ИмяМакроОбласти!> | Эта макроподстановка в тексте статьи выводит доступные в текущей сессии Far Manager макрокоманды (сочетания и описание макроса).

Замечания:

  1. Длина каждой строки в hlf-файле не должна превышать 300 символов.
  2. Если Вам необходимо показать символы ~, # или @, то продублируйте их.
  3. Для URL-активаторов в ссылке (поле <URL>) символы ~ и # могут дублироваться или не дублироваться, символ @ - - всегда дублируется. Если в ссылке должно присутствовать два идущих подряд символа ~ или #, то укажите последовательность из 3 или 4 символов (например, ~~~ или ~~~~ будет восприниматься как ~~)
  4. Не используйте внутри ссылки (если ссылка не URL-активатор!) служебные символы (~, # и @).

Пример:

Данный пример взят из файла FarRus.hlf.
@FolderShortcuts
$ #Ссылки на папки#
    Ссылки на папки позволяют обеспечить быстрый доступ к часто
используемым папкам. Для создания ссылки на текущую папку нужно
нажать Ctrl-Shift-<N>, где N - '0'..'9'. После этого, чтобы перейти
в папку, записанную в ссылке, достаточно нажать ПравыйCtrl-<N>.

    Пункт #Ссылки на папки# в ~Меню команд~@CmdMenu@ позволяет
просматривать, устанавливать, редактировать и удалять ссылки на папки.
Это выглядит так:

Следующие примеры показывают оформление URL-активаторов.
Активизация E-mail клиента:

~vskirdin@@mail.ru~@mailto:vskirdin@@mail.ru@

Активизация браузера:

~http://plugring.farmanager.com/~@plugring.farmanager.com/@
или
~http://www.uic.nnov.ru/~~ruiv/plugring/~@http://www.uic.nnov.ru/~ruiv/plugring/@

Следующие примеры показывают использование цветовых атрибутов:

.Language=Russian,Russian (Русский)
.PluginContents=Игра Реверси
.Options CtrlColorChar=\

...

@-
         Реверси, также известная как Othello, является игрой
 \70 B \-\2F W \-  стратегией, в которую играют два игрока:  Чёрный и
 \2F W \-\70 B \-  #Белый#.  Игра происходит на поле 8х8 клеток с
         применением 64-х двухцветных фишек.
@+
Это выглядит так:
Смотрите также:
Управляющие элементы, Языковые файлы


Типы и определения

главная

Типы

Тип | Описание
FARPANELITEMFREECALLBACK | CALLBACK-функция для PluginPanelItem.UserData
FARWINDOWPROC | функция-обработчик окна диалога
FRSUSERFUNC | CALLBACK-функция для FSF.FarRecursiveSearch

Определения

Определение | Описание
DlgProc | пользовательский шаблон функции обработки диалога, используется в DialogInit

Константы

Константа | Описание
COL_* | индексы цветов в цветовой схеме (файл farcolor.hpp)
MACROOPCODE | коды операций макродвижка
FARMANAGERVERSION | номер версии Far Manager
OPM_* | дополнительная информация о режиме функции и месте, откуда она была вызвана
SM_* | метод сортировки
ERROR_* | типы ошибок, возвращаемые функцией GetLastError, известные Far Manager

Макросы

Макрос | Описание
MAKEFARVERSION | генерация требуемой версии Far Manager

Прочее

Предмет | Описание
GUID | известные GUID объектов Far Manager
Смотрите также:
Экспортируемые функции, Сервисные функции, Структуры, Структуры и функции Windows API


FARPANELITEMFREECALLBACK

главная | типы и определения
Тип FARPANELITEMFREECALLBACK описывает CALLBACK-функцию, вызываемую из PluginPanelItem.UserData для очистки неиспользуемых ресурсов.
typedef void (WINAPI *FARPANELITEMFREECALLBACK)(
  void *UserData,
  const struct FarPanelItemFreeInfo *Info
);

Параметры

UserData
Указатель на освобождаемые данные, поле PluginPanelItem.UserData.Data файлового объекта.
Info
Указатель на структуру FarPanelItemFreeInfo.

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

Нет.

Замечания

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


FARWINDOWPROC

главная | типы и определения
Тип функции FARWINDOWPROC описывает функцию-обработчик диалогового окна.
typedef intptr_t (WINAPI *FARWINDOWPROC)(
  HANDLE      hDlg,
  intptr_t    Msg,
  intptr_t    Param1,
  void       *Param2
);

Замечания

Подробное описание параметров см. в разделах "Сообщения Dialog API" и "События Dialog API".
Смотрите также:
DlgProc


FRSUSERFUNC

главная | типы и определения
Тип FRSUSERFUNC описывает CALLBACK-функцию, вызываемую из функции FSF.FarRecursiveSearch для каждого найденного файла.
typedef int  (WINAPI *FRSUSERFUNC)(
  const struct PluginPanelItem *FData,
  const wchar_t *FullName,
  void *Param
);

Параметры

FData
Указатель на структуру PluginPanelItem для очередного найденного файлового объекта.
FullName
Полный путь к найденному файловому объекту.
Param
Указатель на данные пользователя (параметр Param фунции FSF.FarRecursiveSearch).

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

Пользовательская функция должна вернуть TRUE для продолжения сканирования файловой системы, или FALSE, если необходимо прервать процесс сканирования.

Замечания

FData и FullName определены только в контексте данной функции, плагин не должен сохранять эти указатели. Для сохранения данных, плагин должен скопировать эти значения в свои стуктуры. Param - те данные, которые плагин передал функции FSF.FarRecursiveSearch.
Смотрите также:
FSF.FarRecursiveSearch


Индексы цветов

главная | типы и определения

В этой таблице приведены индексы цветов в цветовой схеме Far Manager, расположенной в базе %FARHOME%\Profile\colors.db (файл farcolor.hpp, перечисление PaletteColors).

В колонке "Цвет" указаны шестнадцатеричные значения цвета, принятые в цветовой схеме по умолчанию.

Константа | Цвет |  | Описание
COL_DIALOGBOXTITLE | Text | 0x70 | Диалог.Рамка.Заголовок
COL_DIALOGHIGHLIGHTBOXTITLE | Text | 0x7E | Диалог.Рамка.Выделенный заголовок
COL_DIALOGBOX | Text | 0x70 | Диалог.Рамка.Обычный текст
COL_DIALOGTEXT | Text | 0x70 | Диалог.Обычный текст
COL_DIALOGHIGHLIGHTTEXT | Text | 0x7E | Диалог.Выделенный текст
COL_DIALOGDISABLED | Text | 0x78 | Диалог.Блокированный элемент диалога
COL_DIALOGSELECTEDBUTTON | Text | 0x30 | Диалог.Кнопка.Выбранный текст
COL_DIALOGHIGHLIGHTSELECTEDBUTTON | Text | 0x3E | Диалог.Кнопка.Выбранный выделенный текст
COL_DIALOGHIGHLIGHTBUTTON | Text | 0x7E | Диалог.Кнопка.Выделенный текст
COL_DIALOGBUTTON | Text | 0x70 | Диалог.Кнопка.Обычный текст
COL_DIALOGEDITUNCHANGED | Text | 0x37 | Диалог.Поле ввода.Неизмененный текст
COL_DIALOGEDITSELECTED | Text | 0x0F | Диалог.Поле ввода.Выделенного текст
COL_DIALOGEDITDISABLED | Text | 0x38 | Диалог.Поле ввода.Блокированное поле ввода
COL_DIALOGEDIT | Text | 0x30 | Диалог.Поле ввода.Обычный текст
COL_DIALOGLISTTITLE | Text | 0x70 | Диалог.Список.Заголовок
COL_DIALOGLISTSELECTEDTEXT | Text | 0x0F | Диалог.Список.Выбранный элемент
COL_DIALOGLISTSELECTEDHIGHLIGHT | Text | 0x0E | Диалог.Список.Выбранный выделенный элемент
COL_DIALOGLISTHIGHLIGHT | Text | 0x7E | Диалог.Список.Выделенный элемент
COL_DIALOGLISTBOX | Text | 0x70 | Диалог.Список.Рамка
COL_DIALOGLISTDISABLED | Text | 0x78 | Диалог.Список.Блокированный элемент
COL_DIALOGLISTSCROLLBAR | Text | 0x70 | Диалог.Список.Полоса прокрутки
COL_DIALOGLISTTEXT | Text | 0x70 | Диалог.Список.Обычный текст
COL_DIALOGCOMBOTITLE | Text | 0x3F | Диалог.Комбинированный список.Заголовок
COL_DIALOGCOMBOSELECTEDTEXT | Text | 0x0F | Диалог.Комбинированный список.Выбранный элемент
COL_DIALOGCOMBOSELECTEDHIGHLIGHT | Text | 0x0E | Диалог.Комбинированный список.Выбранный выделенный элемент
COL_DIALOGCOMBOHIGHLIGHT | Text | 0x3E | Диалог.Комбинированный список.Выделенный элемент
COL_DIALOGCOMBOBOX | Text | 0x3F | Диалог.Комбинированный список.Рамка
COL_DIALOGCOMBODISABLED | Text | 0x38 | Диалог.Комбинированный список.Блокированный элемент
COL_DIALOGCOMBOSCROLLBAR | Text | 0x3F | Диалог.Комбинированный список.Полоса прокрутки
COL_DIALOGCOMBOTEXT | Text | 0x3F | Диалог.Комбинированный список.Обычный текст элемента
COL_MENUDISABLEDTEXT | Text | 0x38 | Меню.Недоступный пункт
COL_MENUTITLE | Text | 0x3F | Меню.Заголовок
COL_MENUSELECTEDHIGHLIGHT | Text | 0x0E | Меню.Выбранный выделенный текст пункта
COL_MENUSELECTEDTEXT | Text | 0x0F | Меню.Выбранный пункт
COL_MENUHIGHLIGHT | Text | 0x3E | Меню.Выделенный пункт
COL_MENUBOX | Text | 0x3F | Меню.Рамка
COL_MENUSCROLLBAR | Text | 0x3F | Меню.Полоса прокрутки
COL_MENUTEXT | Text | 0x3F | Меню.Обычный текст пункта
COL_HMENUSELECTEDTEXT | Text | 0x0F | Горизонтальное меню.Выбранный текст
COL_HMENUSELECTEDHIGHLIGHT | Text | 0x0E | Горизонтальное меню.Выбранный выделенный текст
COL_HMENUHIGHLIGHT | Text | 0x3E | Горизонтальное меню.Выделенный текст
COL_HMENUTEXT | Text | 0x30 | Горизонтальное меню.Обычный текст
COL_KEYBARTEXT | Text | 0x30 | Линейка клавиш.Названия клавиш
COL_KEYBARNUM | Text | 0x07 | Линейка клавиш.Номера клавиш
COL_KEYBARBACKGROUND | Text | 0x07 | Линейка клавиш.Фон
COL_WARNDIALOGBOXTITLE | Text | 0x4F | Предупреждение.Заголовок рамки
COL_WARNDIALOGHIGHLIGHTTEXT | Text | 0x4E | Предупреждение.Выделенный текст
COL_WARNDIALOGLISTTITLE | Text | 0x4F | Предупреждение.Список.Заголовок
COL_WARNDIALOGLISTSELECTEDTEXT | Text | 0x70 | Предупреждение.Список.Выбранный элемент
COL_WARNDIALOGLISTSELECTEDHIGHLIGHT | Text | 0x7E | Предупреждение.Список.Выбранный выделенный элемент
COL_WARNDIALOGLISTHIGHLIGHT | Text | 0x4E | Предупреждение.Список.Выделенный элемент
COL_WARNDIALOGLISTBOX | Text | 0x4F | Предупреждение.Список.Рамка
COL_WARNDIALOGLISTDISABLED | Text | 0x48 | Предупреждение.Список.Блокированный элемент
COL_WARNDIALOGLISTSCROLLBAR | Text | 0x4F | Предупреждение.Список.Полоса прокрутки
COL_WARNDIALOGLISTTEXT | Text | 0x4F | Предупреждение.Список.Обычный текст
COL_WARNDIALOGHIGHLIGHTBOXTITLE | Text | 0x4E | Предупреждение.Рамка.Выделенный заголовок
COL_WARNDIALOGBOX | Text | 0x4F | Предупреждение.Рамка.Обычный текст
COL_WARNDIALOGDISABLED | Text | 0x48 | Предупреждение.Блокированный элемент диалога
COL_WARNDIALOGSELECTEDBUTTON | Text | 0x70 | Предупреждение.Кнопка.Выбранный текст
COL_WARNDIALOGHIGHLIGHTSELECTEDBUTTON | Text | 0x7E | Предупреждение.Кнопка.Выбранный выделенный текст
COL_WARNDIALOGHIGHLIGHTBUTTON | Text | 0x4E | Предупреждение.Кнопка.Выделенный текст
COL_WARNDIALOGBUTTON | Text | 0x4F | Предупреждение.Кнопка.Обычный текст
COL_WARNDIALOGEDITUNCHANGED | Text | 0x37 | Предупреждение.Поле ввода.Неизмененный текст
COL_WARNDIALOGEDITSELECTED | Text | 0x0F | Предупреждение.Поле ввода.Выделенного текст
COL_WARNDIALOGEDITDISABLED | Text | 0x38 | Предупреждение.Поле ввода.Блокированное поле ввода
COL_WARNDIALOGEDIT | Text | 0x30 | Предупреждение.Поле ввода.Обычный текст
COL_WARNDIALOGCOMBOTITLE | Text | 0x3F | Предупреждение.Комбинированный список.Заголовок
COL_WARNDIALOGCOMBOSELECTEDTEXT | Text | 0x0F | Предупреждение.Комбинированный список.Выбранный элемент
COL_WARNDIALOGCOMBOSELECTEDHIGHLIGHT | Text | 0x0E | Предупреждение.Комбинированный список.Выбранный выделенный элемент
COL_WARNDIALOGCOMBOHIGHLIGHT | Text | 0x3E | Предупреждение.Комбинированный список.Выделенный элемент
COL_WARNDIALOGCOMBOBOX | Text | 0x3F | Предупреждение.Комбинированный список.Рамка
COL_WARNDIALOGCOMBODISABLED | Text | 0x38 | Предупреждение.Комбинированный список.Блокированный элемент
COL_WARNDIALOGCOMBOSCROLLBAR | Text | 0x3F | Предупреждение.Комбинированный список.Полоса прокрутки
COL_WARNDIALOGCOMBOTEXT | Text | 0x3F | Предупреждение.Комбинированный список.Обычный текст элемента
COL_WARNDIALOGTEXT | Text | 0x4F | Предупреждение.Обычный текст
COL_VIEWERSELECTEDTEXT | Text | 0x30 | Просмотрщик.Выбранный текст
COL_VIEWERARROWS | Text | 0x1E | Просмотрщик.Стрелки сдвига экрана
COL_VIEWERSTATUS | Text | 0x30 | Просмотрщик.Статус
COL_VIEWERSCROLLBAR | Text | 0x1B | Просмотрщик.Полоса прокрутки
COL_VIEWERTEXT | Text | 0x1B | Просмотрщик.Обычный текст
COL_PANELHIGHLIGHTTEXT | Text | 0x17 | Панель.(не используется)
COL_PANELCOLUMNTITLE | Text | 0x1E | Панель.Заголовок колонки
COL_PANELSELECTEDTEXT | Text | 0x1E | Панель.Выбранный текст
COL_PANELSELECTEDTITLE | Text | 0x30 | Панель.Выделенный заголовок
COL_PANELSELECTEDCURSOR | Text | 0x3E | Панель.Выделенный курсор
COL_PANELINFOTEXT | Text | 0x1E | Панель.Выделенная информация
COL_PANELBOX | Text | 0x1B | Панель.Рамка
COL_PANELDRAGTEXT | Text | 0x3E | Панель.Перетаскиваемый текст
COL_PANELTOTALINFO | Text | 0x1B | Панель.Количество файлов
COL_PANELSCREENSNUMBER | Text | 0x0B | Панель.Количество фоновых экранов
COL_PANELSELECTEDINFO | Text | 0x3E | Панель.Количество выбранных файлов
COL_PANELSCROLLBAR | Text | 0x1B | Панель.Полоса прокрутки
COL_PANELTEXT | Text | 0x1B | Панель.Обычный текст
COL_PANELTITLE | Text | 0x1B | Панель.Обычный заголовок
COL_PANELCURSOR | Text | 0x30 | Панель.Обычный курсор
COL_EDITORSELECTEDTEXT | Text | 0x30 | Редактор.Выбранный текст
COL_EDITORSTATUS | Text | 0x30 | Редактор.Статус
COL_EDITORTEXT | Text | 0x1B | Редактор.Обычный текст
COL_COMMANDLINESELECTED | Text | 0x30 | Командная строка.Выделенный текст
COL_COMMANDLINEPREFIX | Text | 0x07 | Командная строка.Текст префикса
COL_COMMANDLINE | Text | 0x07 | Командная строка.Обычный текст
COL_HELPBOXTITLE | Text | 0x30 | Помощь.Заголовок рамки
COL_HELPSELECTEDTOPIC | Text | 0x0F | Помощь.Выбранная ссылка
COL_HELPHIGHLIGHTTEXT | Text | 0x3F | Помощь.Выделенный текст
COL_HELPTOPIC | Text | 0x3E | Помощь.Ссылка
COL_HELPBOX | Text | 0x30 | Помощь.Рамка
COL_HELPSCROLLBAR | Text | 0x30 | Помощь.Полоса прокрутки
COL_HELPTEXT | Text | 0x30 | Помощь.Обычный текст
COL_VIEWERCLOCK | Text | 0x30 | Часы.Просмотрщик
COL_EDITORCLOCK | Text | 0x30 | Часы.Редактор
COL_CLOCK | Text | 0x30 | Часы.Панель
COL_DIALOGLISTARROWS | Text | 0x30 | Диалог.Список.Указатели длинных строк
COL_DIALOGLISTARROWSDISABLED | Text | 0x30 | Диалог.Список.Указатели длинных строк.Блокированный элемент
COL_DIALOGLISTARROWSSELECTED | Text | 0x0E | Диалог.Список.Указатели длинных строк.Выбранный элемент
COL_DIALOGCOMBOARROWS | Text | 0x3E | Диалог.Комбинированный список.Указатели длинных строк
COL_DIALOGCOMBOARROWSDISABLED | Text | 0x38 | Диалог.Комбинированный список.Указатели длинных строк.Блокированный элемент
COL_DIALOGCOMBOARROWSSELECTED | Text | 0x0E | Диалог.Комбинированный список.Указатели длинных строк.Выбранный элемент
COL_WARNDIALOGLISTARROWS | Text | 0x4E | Предупреждение.Список.Указатели длинных строк
COL_WARNDIALOGLISTARROWSDISABLED | Text | 0x48 | Предупреждение.Список.Указатели длинных строк.Блокированный элемент
COL_WARNDIALOGLISTARROWSSELECTED | Text | 0x7E | Предупреждение.Список.Указатели длинных строк.Выбранный элемент
COL_WARNDIALOGCOMBOARROWS | Text | 0x3E | Предупреждение.Комбинированный список.Указатели длинных строк
COL_WARNDIALOGCOMBOARROWSDISABLED | Text | 0x38 | Предупреждение.Комбинированный список.Указатели длинных строк.Блокированный элемент
COL_WARNDIALOGCOMBOARROWSSELECTED | Text | 0x0E | Предупреждение.Комбинированный список.Указатели длинных строк.Выбранный элемент
COL_MENUARROWS | Text | 0x3E | Меню.Указатели длинных строк
COL_MENUARROWSDISABLED | Text | 0x38 | Меню.Указатели длинных строк.Недоступный пункт
COL_MENUARROWSSELECTED | Text | 0x0E | Меню.Указатели длинных строк.Выбранный текст пункта
COL_COMMANDLINEUSERSCREEN | Text | 0x07 | Командная строка.Пользовательский экран
COL_EDITORSCROLLBAR | Text | 0x1B | Редактор.Полоса прокрутки
COL_MENUGRAYTEXT | Text | 0x38 | Меню.Серый текст
COL_MENUSELECTEDGRAYTEXT | Text | 0x07 | Меню.Выбранный серый текст
COL_DIALOGCOMBOGRAY | Text | 0x38 | Диалог.Комбинированный список.Серый текст
COL_DIALOGCOMBOSELECTEDGRAYTEXT | Text | 0x07 | Диалог.Комбинированный список.Выбранный серый текст
COL_DIALOGLISTGRAY | Text | 0x78 | Диалог.Список.Серый цвет
COL_DIALOGLISTSELECTEDGRAYTEXT | Text | 0x07 | Диалог.Список.Выбранный серый текст
COL_WARNDIALOGCOMBOGRAY | Text | 0x38 | Предупреждение.Комбинированный список.Серый текст
COL_WARNDIALOGCOMBOSELECTEDGRAYTEXT | Text | 0x07 | Предупреждение.Комбинированный список.Выбранный серый текст
COL_WARNDIALOGLISTGRAY | Text | 0x48 | Предупреждение.Список.Серый текст
COL_WARNDIALOGLISTSELECTEDGRAYTEXT | Text | 0x70 | Предупреждение.Список.Выбранный серый текст
COL_RESERVED0 | Text | 0x00 | (зарезервировано для внутренних нужд)


FARMANAGERVERSION

главная | типы и определения
Константа FARMANAGERVERSION определяет текущий номер версии Far Manager и имеет следующий формат:
#define FARMANAGERVERSION_MAJOR 3
#define FARMANAGERVERSION_MINOR 0
#define FARMANAGERVERSION_REVISION 0
#define FARMANAGERVERSION_BUILD 2188
#define FARMANAGERVERSION_STAGE VS_RELEASE

#define FARMANAGERVERSION MAKEFARVERSION(FARMANAGERVERSION_MAJOR,FARMANAGERVERSION_MINOR, FARMANAGERVERSION_REVISION, FARMANAGERVERSION_BUILD, FARMANAGERVERSION_STAGE)

Константа FARMANAGERVERSION формируется с помощью макроса MAKEFARVERSION

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


Operation mode

главная | типы и определения
Параметр OpMode передаёт плагину дополнительную информацию о режиме функции и месте, откуда она была вызвана. OpMode может быть комбинацией следующих констант (тип OPERATION_MODES):
Метод | Описание
OPM_SILENT | Плагин должен минимизировать запросы пользователя по возможности, так как вызываемая функция - это часть более комплексной операции.
OPM_FIND | Функция плагина была вызвана из Диалога поиска файлов, или другой команды, сканирующей каталоги. Экранный вывод должен быть минимизирован.
OPM_VIEW | Функция плагина вызвана как часть операции просмотра файла. Если файл просматривается на панели быстрого просмотра, то OPM_VIEW используется совместно с OPM_QUICKVIEW.
OPM_QUICKVIEW | Функция плагина вызвана как часть операции просмотра файла на панели быстрого просмотра (пользователь нажал Ctrl+Q в панелях).
OPM_EDIT | Функция плагина вызвана как часть операции редактирования файла.
OPM_DESCR | Функция была вызвана для запроса или для изменения файла и его описания.
OPM_TOPLEVEL | Все файлы в плагине будут обработаны. Этот флаг устанавливается во время обработки команд Shift+F2 и Shift+F3 вне базового файла плагина. Переданный в функцию плагина список также содержит всю необходимую информацию, поэтому плагин может игнорировать этот флаг, или же повысить скорость операции.
OPM_PGDN | Функция плагина вызвана после нажатия Ctrl+PgDn в панелях.
OPM_COMMANDS | Функция плагина вызвана из меню архивных команд Shift+F3.
OPM_NONE | Нулевая константа.
Смотрите также:
SetDirectoryW, PutFilesW, ProcessHostFileW, GetFilesW, DeleteFilesW, GetFindDataW, MakeDirectoryW


Метод сортировки

главная | типы и определения

Метод сортировки может принимать одно из следующих значений (перечисление OPENPANELINFO_SORTMODES):
Метод | Описание
SM_DEFAULT | Сортировка по умолчанию.
SM_UNSORTED | Без сортировки.
SM_NAME | По имени.
SM_EXT | По расширению.
SM_MTIME | По дате последней записи в файл.
SM_CTIME | По дате создания файла.
SM_ATIME | По дате последнего доступа.
SM_SIZE | По размеру.
SM_DESCR | По описанию.
SM_OWNER | По владельцу.
SM_COMPRESSEDSIZE | По сжатому размеру.
SM_NUMLINKS | По количеству ссылок файлов.
SM_NUMSTREAMS | По количеству потоков.
SM_STREAMSSIZE | По размеру данных во всех потоках.
SM_FULLNAME | По полному имени (полному пути) файла.
SM_CHTIME | По дате изменения файла.

Смотрите также:
CompareW, OpenPanelInfo, PanelInfo


ERROR_*

главная | типы и определения
Перечислены типы ошибок, возвращаемые функцией GetLastError, известные Far Manager (см. FMSG_ERRORTYPE):

Константа из winerror.h | Строковые константы из Far*.lng
ERROR_INVALID_FUNCTION | "Некорректная функция" "Incorrect function"
ERROR_BAD_COMMAND, ERROR_CALL_NOT_IMPLEMENTED | "Команда не распознана" "Command not recognized"
ERROR_FILE_NOT_FOUND | "Файл не найден" "File not found"
ERROR_PATH_NOT_FOUND | "Путь не найден" "Path not found"
ERROR_TOO_MANY_OPEN_FILES | "Слишком много открытых файлов" "Too many open files"
ERROR_ACCESS_DENIED | "Доступ запрещён" "Access denied"
ERROR_NOT_ENOUGH_MEMORY, ERROR_OUTOFMEMORY | "Недостаточно памяти" "Not enough memory"
ERROR_WRITE_PROTECT | "Попытка записи на защищённый от записи диск" "Cannot write to write protected disk"
ERROR_NOT_READY | "Устройство не готово" "The device is not ready"
ERROR_NOT_DOS_DISK | "Доступ к диску невозможен" "Disk cannot be accessed"
ERROR_SECTOR_NOT_FOUND | "Сектор не найден" "Sector not found"
ERROR_OUT_OF_PAPER | "В принтере нет бумаги" "The printer is out of paper"
ERROR_WRITE_FAULT | "Ошибка записи" "Write fault error"
ERROR_READ_FAULT | "Ошибка чтения" "Read fault error"
ERROR_GEN_FAILURE | "Общая ошибка устройства" "Device general failure"
ERROR_SHARING_VIOLATION, ERROR_LOCK_VIOLATION | "Нарушение совместного доступа к файлу" "File sharing violation"
ERROR_BAD_NETPATH | "Сетевой путь не найден" "The network path was not found"
ERROR_NETWORK_BUSY | "Сеть занята" "The network is busy"
ERROR_NETWORK_ACCESS_DENIED | "Сетевой доступ запрещён" "Network access is denied"
ERROR_NET_WRITE_FAULT | "Ошибка записи в сети" "A write fault occurred on the network"
ERROR_DRIVE_LOCKED | "Диск используется или заблокирован другим процессом" "The disk is in use or locked by another process"
ERROR_ALREADY_EXISTS | "Файл или папка уже существует" "File or folder already exists"
ERROR_BAD_PATHNAME, ERROR_INVALID_NAME | "Указанное имя неверно" "The specified name is invalid"
ERROR_DISK_FULL, ERROR_HANDLE_DISK_FULL | "Нет места на диске" "Insufficient disk space"
ERROR_DIR_NOT_EMPTY | "Папка не пустая" "The folder is not empty"
ERROR_INTERNET_INCORRECT_USER_NAME | "Неверное имя пользователя" "Incorrect user name"
ERROR_INTERNET_INCORRECT_PASSWORD | "Неверный пароль" "Incorrect password"
ERROR_INTERNET_LOGIN_FAILURE | "Ошибка регистрации" "Login failure"
ERROR_INTERNET_CONNECTION_ABORTED | "Соединение разорвано" "Connection aborted"
ERROR_CANCELLED | "Операция отменена" "Operation cancelled"
ERROR_NO_NETWORK | "Сеть отсутствует" "No network present"
ERROR_DEVICE_IN_USE | "Устройство используется и не может быть отсоединено" "Device is in use and cannot be disconnected"
ERROR_OPEN_FILES | "На сетевом диске есть открытые файлы" "This network connection has open files"
ERROR_ALREADY_ASSIGNED | "Имя локального устройства уже использовано" "The local device name is already in use"
ERROR_DEVICE_ALREADY_REMEMBERED | "Имя локального устройства уже находится в профайле пользователя" "The local device is already in the user profile"
ERROR_NOT_LOGGED_ON | "Пользователь не зарегистрирован в сети" "User has not logged on to the network"
ERROR_INVALID_PASSWORD | "Неверный пароль пользователя" "The user password is invalid"
ERROR_NO_RECOVERY_POLICY | "Для этой системы отсутствует политика надёжного восстановления шифрования" "There is no valid encryption recovery policy configured for this system"
ERROR_ENCRYPTION_FAILED | "Ошибка при попытке шифрования файла" "The specified file could not be encrypted"
ERROR_DECRYPTION_FAILED | "Ошибка при попытке расшифровки файла" "The specified file could not be decrypted"
ERROR_FILE_NOT_ENCRYPTED | "Указанный файл не зашифрован" "The specified file is not encrypted"
Смотрите также:
Message


MAKEFARVERSION

главная | типы и определения
Макрос MAKEFARVERSION предназначен для возврата минимально требуемой для плагина версии Far Manager в функции GetGlobalInfoW.
struct VersionInfo MAKEFARVERSION(DWORD Major, DWORD Minor, DWORD Revision, DWORD Build, enum VERSION_STAGE Stage);

Замечания

В АПИ дополнительно определена функция CheckVersion, которая предназначена для проверки соответсвия версий:
BOOL CheckVersion(const struct VersionInfo *Current, const struct VersionInfo *Required);
Смотрите также:
GetGlobalInfoW, VersionInfo


GUID объектов

главная | типы и определения

Ниже перечислены известные GUID объектов Far Manager (см. DlgGuid.hpp в исходных кодах Far Manager):
GUID | Имя | Описание
{8C9EAD29-910F-4b24-A669-EDAFBA6ED964} | FindFileId | диалог поиска (Alt+F7)
{536754EB-C2D1-4626-933F-A25D1E1D110A} | FindFileResultId | диалог результатов поиска (после Alt+F7)
{F63B558F-9185-46BA-8701-D143B8F62658} | HelpSearchId | система помощи: диалог поиска (F7)
{FAD00DBE-3FFF-4095-9232-E1CC70C67737} | MakeFolderId | диалог создания каталога (F7)
{1D07CEE2-8F4F-480a-BE93-069B4FF59A2B} | FileOpenCreateId | диалог создания нового файла в редакторе (Shift+F4)
{9162F965-78B8-4476-98AC-D699E5B6AFE7} | FileSaveAsId | диалог сохранения файла с новым именем в редакторе (Shift+F2)
{80695D20-1085-44d6-8061-F3C41AB5569C} | FileAttrDlgId | диалог изменения файловых атрибутов (Ctrl+A)
{9FBCB7E1-ACA2-475d-B40D-0F7365B632FF} | CopyOverwriteId | диалог перезаписи файла
{879A8DE6-3108-4beb-80DE-6F264991CE98} | CopyReadOnlyId | диалог перезаписи ReadOnly-файла
{FCEF11C4-5490-451d-8B4A-62FA03F52759} | CopyFilesId | диалог копирования файла (F5)
{431A2F37-AC01-4ecd-BB6F-8CDE584E5A03} | MoveFilesId | диалог перемещения файла (F6)
{5EB266F4-980D-46af-B3D2-2C50E64BCA81} | HardSymLinkId | диалог создания связи (Alt+F6)
{3F9311F5-3CA3-4169-A41C-89C76B3A8C1D} | EditorSavedROId | редактор: диалог перезаписи файла только для чтения
{85532BD5-1583-456D-A810-41AB345995A9} | EditorSaveF6DeletedId | редактор: диалог сохранения файла при переключение во вьювер, если файл (или каталог, где был файл) был удален.
{2D71DCCE-F0B8-4E29-A3A9-1F6D8C1128C2} | EditorSaveExitDeletedId | редактор: диалог сохранения файла и выход из редактора, если файл (или каталог, где был файл) был удален.
{4109C8B3-760D-4011-B1D5-14C36763B23E} | EditorAskOverwriteId | редактор: диалог запроса на перезапись файла
{D8AA706F-DA7E-4BBF-AB78-6B7BDB49E006} | EditorOpenRSHId | редактор: диалог запроса открытия файла с атридутами RSH
{40A699F1-BBDD-4E21-A137-97FFF798B0C8} | EditAskSaveExtId | редактор: диалог сохранения файла, при изменении его внешней программой (и при удалении)
{F776FEC0-50F7-4E7E-BDA6-2A63F84A957B} | EditAskSaveId | редактор: диалог сохранения файла при закрытии
{AFDAD388-494C-41E8-BAC6-BBE9115E1CC0} | EditorReloadId | реактор: диалог переоткрытия файла
{D6F557E8-7E89-4895-BD75-4D3F2C30E382} | EditorReloadModalId | редактор: диалог-предупреждение переоткрытия открытого файла в модальном редакторе
{8BCCDFFD-3B34-49F8-87CD-F4D885B75873} | EditorReplaceId | редактор: диалог замены (Alt+F7)
{5D3CBA90-F32D-433C-B016-9BB4AF96FACC} | EditorSearchId | редактор: диалог поиска (F7)
{15568DC5-4D6B-4C60-B43D-2040EE39871A} | EditorSwitchUnicodeCPDisabledId | редактор: диалог "Нельзя изменить юникодную кодовую страницу" (попытка сменить кодовую таблицу при редактировании файла в Unicode (например, 1200)
{78A4A4E3-C2F0-40BD-9AA7-EAAC11836631} | CodePagesMenuId | меню выбора кодовой страницы в редакторе и программе просмотра (Shift+F8)
{CCA2C4D0-8705-4FA1-9B10-C9E3C8F37A65} | EditorCanNotEditDirectoryId | редактор: предупреждение о попытке редактировать каталог
{E3AFCD2D-BDE5-4E92-82B6-87C6A7B78FB6} | EditorFileLongId | редактор: предупреждение о превышении размера редактируемого файла (см. настройку Editor.FileSizeLimit и Editor.FileSizeLimitHi)
{6AD4B317-C1ED-44C8-A76A-9146CA8AF984} | EditorFileGetSizeErrorId | редактор: невозможно получить размер редактируемого файла (если заданы Editor.FileSizeLimit и Editor.FileSizeLimitHi)
{9BD3E306-EFB8-4113-8405-E7BADE8F0A59} | EditorFindAllListId | редактор: список всех найденных вхождений строки поиска (F7 [All]).
{72E6E6D8-0BC6-4265-B9C4-C8DB712136AF} | FarAskQuitId | диалог подтверждения закрытия Far Manager
{A204FF09-07FA-478C-98C9-E56F61377BDE} | AdvancedConfigId | диалог редактора конфигурации (far:config)
{4CD742BC-295F-4AFA-A158-7AA05A16BEA1} | FolderShortcutsId | меню выбора быстрых ссылок на папки
{DC8D98AC-475C-4F37-AB1D-45765EF06269} | FolderShortcutsDlgId | диалог редактирования быстрой ссылки на папку
{601DD149-92FA-4601-B489-74C981BC8E38} | FolderShortcutsMoreId | дополнительное меню быстрых ссылок на папки (если на ссылку назначено несколько путей)
{72EB948A-5F1D-4481-9A91-A4BFD869D127} | ScreensSwitchId | меню переключение между окнами (F12)
{B8B6E1DA-4221-47D2-AB2E-9EC67D0DC1E3} | SelectSortModeId | меню выбора сортировки панели (Ctrl+F12)
{880968A6-6258-43E0-9BDC-F2B8678EC278} | HistoryCmdId | меню истории введенных команд (Alt+F8)
{FC3384A8-6608-4C9B-8D6B-EE105F4C5A54} | HistoryFolderId | меню истории перехода по папкам (Alt+F12)
{E770E044-23A8-4F4D-B268-0E602B98CCF9} | HistoryEditViewId | меню истории просмотра и редактирования файлов (Alt+F11)
{B56D5C08-0336-418B-A2A7-CF0C80F93ACC} | PanelViewModesId | меню редактирования режимов отображения панелей
{98B75500-4A97-4299-BFAD-C3E349BF3674} | PanelViewModesEditId | диалог редактирования режима памели
{5B87B32E-494A-4982-AF55-DAFFCD251383} | FiltersMenuId | меню фильтров
{D8AF7A38-8357-44A5-A44B-A595CF707549} | DescribeFileId | диалог ввода описаний (Ctrl+Z)
{29C03C36-9C50-4F78-AB99-F5DC1A9C67CD} | SelectDialogId | диалог установки выделения файлов (Add)
{34614DDB-2A22-4EA9-BD4A-2DC075643F1B} | UnSelectDialogId | диалог снятия выделения файлов (Subtract)
{252CE4A3-C415-4B19-956B-83E2FDD85960} | ChangeDiskMenuId | меню выбора дисков (Alt+F1, Alt+F2)
{F3D46DC3-380B-4264-8BF8-10B05B897A5E} | ChangeDriveCannotReadDiskErrorId | диалог ошибки смены диска
{F87F9351-6A80-4872-BEEE-96EF80C809FB} | ChangeDriveModeId | диалог "Настройка меню выбора диска"
{A1BDBEB1-2911-41FF-BC08-EEBC44040B50} | DisconnectDriveId | диалог "Отключение сетевого устройства" (Del на сетевом диске в меню выбора дисков)
{C9439386-9544-49BF-954B-6BEEDE7F1BD0} | RemoteDisconnectDriveError1Id | диалог ошибки отключения Net-дисков
{F06953B8-25AA-4FC0-9899-422FC1D49F7A} | RemoteDisconnectDriveError2Id | диалог ошибки отключения Net-дисков
{75554EEB-A3A7-45FD-9795-4A85887A75A0} | SUBSTDisconnectDriveId | диалог "Отключение SUBST-диска"
{FF18299E-1881-42FA-AF7E-AC05D99F269C} | SUBSTDisconnectDriveError1Id | диалог ошибки удаления SUBST-дисков
{43B0FFC2-70BE-4289-91E6-FE9A3D54311B} | SUBSTDisconnectDriveError2Id | диалог ошибки удаления SUBST-дисков
{629A8CA6-25C6-498C-B3DD-0E18D1CC0BCD} | VHDDisconnectDriveId | диалог "Отключение VHD-диска"
{B890E6B0-05A9-4ED8-A4C3-BBC4D29DA3BE} | VHDDisconnectDriveErrorId | диалог ошибки отключения VHD-диска
{D6DC3621-877E-4BE2-80CC-BDB2864CE038} | EjectHotPlugMediaErrorId | диалог ошибки извлечения HotPlug-устройств
{F6D2437C-FEDC-4075-AA56-275666FC8979} | FileAssocMenuId | меню редактирования ассоциаций
{D2BCB5A5-6B82-4EB5-B321-1AE7607A6236} | SelectAssocMenuId | меню выбора из списка ассоциаций
{6F245B1A-47D9-41A6-AF3F-FA2C8DBEEBD0} | FileAssocModifyId | диалог редактирования очередной ассоциации
{937F0B1C-7690-4F85-8469-AA935517F202} | PluginsMenuId | меню выбора плагина (F11)
{B4C242E7-AA8E-4449-B0C3-BD8D9FA11AED} | PluginsConfigMenuId | меню конфигурирования плагинов (Alt+Shift+F9)
{CD2AC546-9E4F-4445-A258-AB5F7A7800E0} | GetNameAndPasswordId | диалог запроса пароля при переходе на примапленный диск из меню выбора дисков
{4406C688-209F-4378-8B7B-465BF16205FF} | SelectFromEditHistoryId | открытая история в строках ввода в диалогах
{9C054039-5C7E-4B04-96CD-3585228C916F} | DeleteWipeId | основной диалог уничтожения файлов/папок
{85A5F779-A881-4B0B-ACEE-6D05653AE0EB} | DeleteRecycleId | основной диалог удаления файлов/папок в корзину
{85A5F779-A881-4B0B-ACEE-6D05653AE0EB} | DeleteFileFolderId | основной диалог удаления файлов/папок
{B1099BC3-14BD-4B22-87AC-44770D4189A3} | DeleteLinkId | диалог "Удаление ссылки"
{4E714029-11BF-476F-9B17-9E47AA0DA8EA} | DeleteFolderId | диалог удаления папки (System.DeleteToRecycleBin = fasle)
{A318CBDC-DBA9-49E9-A248-E6A9FF8EC849} | DeleteFolderRecycleId | диалог удаления папки в корзину (System.DeleteToRecycleBin = true)
{E23BB390-036E-4A30-A9E6-DC621617C7F5} | WipeFolderId | диалог уничтожения папки
{8D4E84B3-08F6-47DF-8C40-7130CD31D0E6} | DeleteAskDeleteROId | подтверждение удаления ReadOnly-файла
{6792A975-57C5-4110-8129-2D8045120964} | DeleteAskWipeROId | подтверждение уничтожения ReadOnly-файла
{5297DDFE-0A37-4465-85EF-CBF9006D65C6} | WipeHardLinkId | диалог-предупреждение об уничтожении файла с несколькими хардлинками
{26A7AB9F-51F5-40F7-9061-1AE6E2FBD00A} | RecycleFolderConfirmDeleteLinkId | предупреждение о том, что папка содержит символические ссылки и при очистке корзины данные будут потеряны и нужно разорвать связи (см. MRecycleFolderConfirmDeleteLink?)
{52CEB5A5-06FA-43DD-B37C-239C02652C99} | CannotRecycleFileId | не удалось удалить файл в корзину
{BBD9B7AE-9F6B-4444-89BF-C6124A5A83A4} | CannotRecycleFolderId | не удалось удалить папку в корзину


ВНИМАНИЕ:

РАЗДЕЛ МАКРОСОВ ЯВЛЯЕТСЯ УСТАРЕВШИМ И СОДЕРЖИТ МНОГО НЕСООТВЕТСТВИЙ.
СМ. ДОКУМЕНТ Encyclopedia\macroapi_manual.ru.chm ДЛЯ ПОЛУЧЕНИЯ АКТУАЛЬНОЙ ИНФОРМАЦИИ.

Макросы

главная

Клавиатурные макрокоманды (или макросы) в общем случае - это записанная последовательность нажатий клавиш. Макрос позволяет многократно выполнять одну и ту же последовательность действий за одно нажатие горячей клавиши.

Макросы, чаще всего, используются для:

  1. совершения одинаковых действий несколько раз, используя для вызова последовательности этих действий одно сочетание кнопок;
  2. выполнения специальных функций, которые задаются специальными командами в тексте макроса;
  3. переопределение стандартных сочетаний клавиш, которые использует FAR для совершения тех или иных действий.

Основным применением макросов является определение кнопок для быстрого вызова внешних плагинов и переопределение действий Far Manager.

Подробнее о макросах:

  • Общие замечания
  • Работа с макросами
  • Макроязык
  • Технические подробности
  • Примеры


Общие замечания - Макросы

Общие замечания

главная | Макросы

Каждый макрос имеет:

  • горячую клавишу, при нажатии на которую будет выполнена записанная последовательность;
  • набор дополнительных параметров, которые влияют на способ и место воспроизведения FAR записанной последовательности.

ВНИМАНИЕ! ВНИМАНИЕ!

  • Следует иметь в виду, что макросы разделяются по областям действия, т. е. тем областям в FAR, где макрос будет выполняться.

Макросы могут содержать специальные команды, реализующие сервисные функции, условное и циклическое воспроизведение последовательностей и т. д.

Замечания

  • При старте FAR Manager загружает весь комплект описанных в реестре макрокоманд в память.
  • Макросы имеющие ошибки в названии макроклавиши и в последовательности "Sequence" игнорируются.
  • Регистр макрокоманд не имеет значения.
  • Макроклавиша, название которой в реестре начинается с символа '~', считается неактивной.
  • FAR Manager преобразует прокрутку колеса мыши в псевдоклавиши:
    • прокрутка на одно значение вверх - "MsWheelUp"
    • прокрутка на одно значение вниз - "MsWheelDown"
    Эти псевдоклавиши можно применять в сочетании с модификаторами Ctrl, Shift и Alt.

  • Если вы вводите символ при помощи Alt+цифры, то в макросе сохраняется именно эта комбинация, а не введённый символ.

    Например, Alt-151 будет храниться как "Alt00151".

  • Специфические клавиши, у которых виртуальный код отличен от 0xFF, но имена которых FAR не знает, будут хранится как "OemXXXXX" (здесь XXXXX - десятичное значение виртуального кода клавиши с ведущими нулями).
  • Специфические клавиши, у которых виртуальный код равен 0xFF, будут хранится как "SpecXXXXX" (здесь XXXXX - десятичное значение сканкода клавиши с ведущими нулями).
  • Для манипулирования макрокомандами можно воспользоваться плагином "FAR macro browser" (включён в дистрибутив).
  • Значение параметра "NoSendKeysToPlugins" зависит от способа, которым начиналась запись макропоследовательности.

  • Ctrl+Break прерывает выполнение макроса.

    Если на Ctrl+Break назначен макрос, то он при этом не срабатывает.

Смотрите также:
Работа с макросами, Макроязык, Технические подробности, Примеры


Работа с макросами - Макросы

Работа с макросами

главная | Макросы
  • Запись макроса
  • Удаление макроса
  • Кнопки назначения
  • Параметры макрокоманды

FAR может выполнять макросы в двух основных режимах:

  1. Общий режим: нажимаемые клавиши при записи и воспроизведении будут передаваться плагинам.

  2. Специальный режим: нажимаемые клавиши при записи и воспроизведении не будут передаваться плагинам, перехватывающим события в редакторе.

    Например, если какой-то плагин обрабатывает сочетание клавиш Ctrl+A, то при специальном режиме работы макросов этот плагин не получит управления и не выполнит действия, которые он обычно выполняет при реакции на это сочетание клавиш.

Смотрите также:
Общие замечания, Макроязык, Технические подробности, Примеры


Макроязык - Макросы

Макроязык

главная | Макросы

В Far Manager реализован примитивный макроязык, который позволяет в простую последовательность клавиш ввести логику, что делает макросы (вместе с плагинами) мощным средством, помогающим в работе с Far Manager. Макроязык узкоспециализированный, привязанный к функционалу Far Manager, поэтому его нельзя рассматривать как универсальный язык.

Функциональные возможности макроязыка:

  • Макрокоманды
  • Условные операторы
  • Операции
  • Переменные
  • Константы
  • Свойства и функции: по областям

Замечания

  1. Для использования элементов макроязыка завершите запись макроса при помощи сочетания Ctrl-Shift-. и отредактируйте строковое представление макроса в диалоге.

  2. Именованные клавиши (например, CtrlK) могут участвовать в любых выражениях; в этом случае они считаются как числа.
Смотрите также:
Общие замечания, Работа с макросами, Технические подробности, Примеры


Технические подробности - Макросы

Технические подробности

главная | Макросы

Хранение макросов

Все макрокоманды хранятся в SQLite базе macros.db

Макрокоманды делятся на 17 областей действий (см. Области действия) и 2 области для хранения глобальных переменных и констант:

Область | Назначение
Shell | Файловые панели
Info | Информационная панель
QView | Панель быстрого просмотра
Tree | Панель дерева папок
Search | Быстрый поиск в панелях
FindFolder | Панель поиска папок
Viewer | Внутренняя программа просмотра
Editor | Редактор
Dialog | Диалоги
Menu | Прочие меню
MainMenu | Основное меню
UserMenu | Пользовательское меню
Disks | Меню выбора диска
Shell.AutoCompletion | Список автодополнения в панелях
Dialog.AutoCompletion | Список автодополнения в диалогах
Help | Система помощи
Other | Режим копирования текста с экрана
Common | Макросы из этой области работают везде. Far Manager просматривает эту область последней.
Vars | Область для глобальных переменных, которые Far Manager считывает при старте. В эту область можно писать с помощью функции msave().
Consts | Область для глобальных констант, которые Far Manager считывает при старте.

Если Far Manager запущен с ключами /e или /v, то не грузятся макросы из следующих макрообластей: Shell, Info, QView, Tree, Search, FindFolder, MainMenu, Disks, Shell.AutoCompletion, Dialog.AutoCompletion.

На каждую макрокоманду в базе заводится отдельная запись со следующими полями:

Поле | Описание
area | Имя макрообласти
key | Назначенная клавиша
flags Флаги для макрополедовательности (перечисленные через символ '|'):
Флаг | Default | Описание
DisableOutput | 0 | Запретить на время выполнения вывод на экран. При записи нового макроса значение этого параметра выставляется в 1 (запретить вывод на экран). Если параметр отсутствует, то вывод на экран во время исполнения макроса разрешён.
RunAfterFARStart | 0 | Выполнять после запуска Far Manager. Флаг актуален только для макросов, стартующих в области Shell.
EmptyCommandLine | 0 | Выполнять, только если командная строка пуста
NotEmptyCommandLine | 0 | Выполнять, только если командная строка не пуста
NoFilePanels | 0 | Не выполнять для файловой панели
NoFilePPanels | 0 | Не выполнять если пассивная панель - файловая
NoPluginPanels | 0 | Не выполнять для плагиновой панели
NoPluginPPanels | 0 | Не выполнять если пассивная панель - плагиновая
NoFolders | 0 | Не выполнять если текущий элемент - папка
NoPFolders | 0 | Не выполнять если текущий элемент - папка (пассивная панель)
NoFiles | 0 | Не выполнять если текущий элемент - файл
NoPFiles | 0 | Не выполнять если текущий элемент - файл (пассивная панель)
Selection | 0 | Выполнять, только если на панели есть отмеченные файлы/папки или есть выделенный блок в редакторе/программе просмотра
PSelection | 0 | Выполнять, только если на панели есть отмеченные файлы/папки (пассивная панель)
NoSelection | 0 | Выполнять, если нет отмеченных файлов/папок
NoPSelection | 0 | Выполнять, если нет отмеченных файлов/папок (пассивная панель)
EVSelection | 0 | Выполнять, если отмечен блок в редакторе, программе просмотра, в строках ввода в диалогах.
NoEVSelection | 0 | Выполнять, если не отмечен блок в редакторе, программе просмотра, в строках ввода в диалогах.
NoSendKeysToPlugins | 0 | Специальный режим: нажимаемые клавиши при записи и воспроизведении не будут передаваться плагинам.
Например: DisableOutput|Selection - не выводить на экран и если есть выделенные файлы/блок.
description | Описание макроса
sequence | Макропоследовательность

При импорте каждая запись в XML-файле имеет вид:

<macro area="%AREA%" key="%KEY%" flags="%FLAGS%" description="%DESC%">%SEQUENCE%</macro>

В значениях area, key и description символы "<>& должны быть заменены на &quot; &lt; &gt; и &amp;, соответственно.

Если макропоследовательность %SEQUENCE% содержит символы <>&, то последовательность должна быть обрамлена в "скобки": <![CDATA[%SEQUENCE%]]>

Обязательными являются параметры area и key, остальные могут отсутствовать и принимать значение по умолчанию.

Если %SEQUENCE% отсутствует, то при импорте xml-файла макрос, заданный параметрами area и key будет удален из базы.

Последовательность "sequence" содержит строковое представление макрокоманды. Каждая клавиша имеет свой строковый эквивалент, разделителем клавиш является пробел, табуляция, или символы конца строки.

При старте Far Manager компилирует последовательность "sequence" во внутренний байткод. Если в процессе компиляции обнаружена ошибка, то макрос "отбрасывается".

Условия запуска макроса

Перед исполнением макроса Far Manager проверяет условия запуска в следующей последовательности:

  1. NoSendKeysToPlugins
  2. EmptyCommandLine + NotEmptyCommandLine
  3. NoFilePanels + NoPluginPanels
  4. NoFilePPanels + NoPluginPPanels
  5. NoFolders + NoFiles
  6. NoPFolders + NoPFiles
  7. если не в Viewer, Editor и Dialog:
    • Selection + NoSelection
    • PSelection + NoPSelection
  8. если в Viewer, Editor и Dialog:
    • EVSelection + NoEVSelection

Дополнительные параметры

Все дополнительные параметры хранятся в SQLite-базе generalconfig.db (key="KeyMacros").

Имя | Тип | Default | Описание
DateFormat | TEXT | %a %b %d %H:%M:%S %Z %Y | Формат вывода даты/времени по умолчанию (см. date())
CONVFMT | TEXT | %.6g | Формат преобразования чисел (констант и переменных) с плавающей точкой в строку.
KeyRecordCtrlDot | TEXT | Ctrl. | Имя комбинации клавиш для записи макроса в общем режиме (см. "Запись макроса").
KeyRecordCtrlShiftDot | TEXT | CtrlShift. | Имя комбинации клавиш для записи макроса в специальном режиме (см. "Запись макроса").
Смотрите также:
Общие замечания, Работа с макросами, Макроязык, Примеры


Примеры - Макросы

Примеры

главная | Макросы

<macro
  area="Disks"
  key="Tab"
  flags="DisableOutput"
  description="Переход в меню выбора дисков на противоположной панели включение видимости панели в которой будет происходить смена диска, если её не было"><text>
Esc
$If (!PPanel.Visible)
  $If (APanel.Left)
    CtrlF2
  $Else
    CtrlF1
  $End
$End
Tab F9 Enter End Enter
</text></macro>

<macro
  area="Editor"
  key="RAlt"
  flags="DisableOutput"
  description="выделить/(снять выделение) слово(а) под курсором"><text>
RCtrl9 CtrlRight CtrlLeft
$If (!Selected)
  CtrlShiftRight
$Else
  CtrlU
$End
Ctrl9
</text></macro>

<macro
  area="Shell"
  key="CtrlShiftF7"
  flags="DisableOutput|NoPluginPanels"
  description="создание папки с именем = текущей дате"><text>
%folder=date("%d.%m0.%Y");
$If (!panel.fexist(0,%folder))
  F7
  CtrlY
  $Text %folder
  Enter
$End
</text></macro>

<!--
искать тот же файл на другой панели что и на активной
F5 ShiftEnter CtrlIns - применено чтобы получить имя файла вне зависимости
пусто/непусто в cmdline и сколько выделено на панели файлов
-->
<macro
  area="Shell"
  key="CtrlAltLeft"
  flags="DisableOutput"
  description="искать тот же файл на другой панели что и на активной"><text>
<![CDATA[
clip(5)
$If (((Bof && APanel.Root) || !Bof) && PPanel.Visible)
  $If (fexist(PPanel.Path+@"\\"+APanel.Current) == 1)
    F5 ShiftEnter
    CtrlIns Esc Tab Home
    Alt< ShiftIns Esc
  $End
$End
]]></text></macro>

<macro
  area="Shell"
  key="CtrlAltRight"
  flags="DisableOutput"
  description="искать тот же файл на другой панели что и на активной"><text>
<![CDATA[
clip(5)
$If (((Bof && APanel.Root) || !Bof) && PPanel.Visible)
  $If (fexist(PPanel.Path+@"\\"+APanel.Current) == 1)
    F5 ShiftEnter CtrlIns
    Esc Tab Home Alt<
    ShiftIns Esc
  $End
$End
]]></text></macro>

<macro
  area="Shell"
  key="CtrlDown"
  flags="DisableOutput"
  description="Выделение следующих нижних 30 файлов"><text>
$If (!Eof)
  $Rep (30)
    $If (Eof)
      Ins
      $Exit
    $Else
      Ins
    $End
  $End
$End
</text></macro>

<macro
  area="Shell"
  key="CtrlUp"
  flags="DisableOutput"
  description="Выделение следующих верхних 30 файлов"><text>
<text>
Up
$If (Bof)
  $If (!APanel.Root)
    Down
  $End
  $Exit
$Else
  Down
$End
$If (Eof)
  Ins
$Else
  Ins Up
$End
$Rep (29)
  Up
  Ins
  Up
  $If (Bof)
    $If (!APanel.Root)
      Down
    $End
    $Exit
  $End
$End
Up
</text></macro>

<macro
  area="Dialog"
  key="AltP"
  flags="DisableOutput"
  description="сграбить весь экран в текстовый файл far-screen.out работает в области Dialog"><text>
<![CDATA[

clip(5) AltIns CtrlHome ShiftEnd ShiftPgDn Enter Esc
$If (!Shell) Esc $End
$If (Shell && !APanel.Plugin) ShiftF4 CtrlY
print("far-screen.out") Enter ShiftIns Enter Enter F2 Esc $End

]]></text></macro>

<!--
удаление файла/папки по клавише Del
если стояли на элементе .. то пытаемся удалить вышестоящую папку
если не в конце ком строки то удаляем символы в ней
-->
<macro
  area="Shell"
  key="Del"
  flags="DisableOutput"
  description="удаление файла/папки по клавише Del"><text>
<![CDATA[

$If (!CmdLine.Eof) Del $Exit $Else
$If ((APanel.Bof && !APanel.Selected) &&
(!APanel.Root || APanel.Plugin)) CtrlPgUp $End F8 $End

]]></text></macro>

<!--
перед вызовом быстрого просмотра сделать пассивную панель
максимально большего размера.
для обратной операции восстановить панели.
-->
<macro
  area="Shell"
  key="CtrlQ"
  flags="DisableOutput"
  description=""><text>
<![CDATA[

Tab $If (QView) Tab Ctrl2 Tab CtrlClear $Else Tab Ctrl6 Tab
$If (APanel.Left) $Rep (APanel.width) CtrlRight $End $Else
$Rep (APanel.width) CtrlLeft $End $End $End Tab CtrlQ

]]></text></macro>

<constants>
 <constant name="FSPLIT_EXT" type="qword"><text>8</text></constant>
 <constant name="FSPLIT_NAME" type="qword"><text>4</text></constant>
 <constant name="ACTIVEPANEL" type="qword"><text>0</text></constant>
 <constant name="PANELITEM_SELECTED" type="qword"><text>8</text></constant>
</constants>
<keymacros>
<!--
При непустой командной строке макрос не вызывается чтобы можно пользоваться первоначальной
функцией сочетания CtrlShiftIns - Поместить помеченные имена в Буфер Обмена
-->
<macro
  area="Shell"
  key="CtrlShiftIns"
  flags="DisableOutput|EmptyCommandLine"
  description="Пометить вместе с htm-файлом и парную ему папку"><text>
<![CDATA[

%Current=APanel.Current;
%Ext=substr(%Current,len(%Current)-6);
$If (%Ext=="_files")
  %Name=substr(%Current,0,len(%Current)-6);
$Else
  %Ext=fsplit(%Current,FSPLIT_EXT);
  %Name=fsplit(%Current,FSPLIT_NAME);
$End
$if (%Ext==".htm" || %Ext==".html")
  panel.setpos(ACTIVEPANEL,%Name+".files")
  panel.setpos(ACTIVEPANEL,%Name+"_files")
$end
$if (%Ext==".files" || %Ext=="_files")
  panel.setpos(ACTIVEPANEL,%Name+".htm")
  panel.setpos(ACTIVEPANEL,%Name+".html")
$End
$if (APanel.Current!=%Current)
  $If(!panel.item(ACTIVEPANEL,0,PANELITEM_SELECTED)) Ins $End
  panel.setpos(ACTIVEPANEL,%Current)
  $If(!panel.item(ACTIVEPANEL,0,PANELITEM_SELECTED)) Ins $End
$End
mmode(1,2)
]]></text></macro>
</keymacros>

Скроллинг текста по горизонтали:

При включённом ScrollLock клавиши Left/Right выполняют скроллинг текста по горизонтали

[HKEY_CURRENT_USER\Software\far2\KeyMacros\Editor\Right]
"Sequence"="$if(flock(2,-1) == 1) editor.pos(1,5,editor.pos(0,5)+1); $else Right $end"
"DisableOutput"=dword:00000001

[HKEY_CURRENT_USER\Software\far2\KeyMacros\Editor\Left]
"Sequence"="$if(flock(2,-1) == 1) editor.pos(1,5,editor.pos(0,5)-1); $else Left $end"
"DisableOutput"=dword:00000001

Пример использования eval():

Требуется по F10 запускать окно проводника для папки на активной панели, содержимое командной строки должно сохраняться.
В области Vars задаём 2 строковых переменных макропроцедуры, описывающие сохранение и восстановление содержимое командной строки:

%%CmdSave=$If (!CmdLine.Empty) %Flg_Cmd=1;
          %CmdCurPos=CmdLine.ItemCount-CmdLine.CurPos+1;
          %CmdVal=CmdLine.Value; Esc $End

%%CmdRestore=$If (%Flg_Cmd==1) $Text %CmdVal
          %Flg_Cmd=0; %Num=%CmdCurPos;
          $While (%Num!=0) %Num=%Num-1; CtrlS $End $End
далее на F10 вешаем макрос:
$If (APanel.Visible && (!APanel.Plugin || (!APanel.Bof &&(APanel.OPIFlags & 0x20))))
  Eval(%%CmdSave)
  $If (APanel.Current == "..")
    .
    ShiftEnter
  $Else
    "%SystemRoot%\\explorer.exe /select,"
    $If (Apanel.LFN)
      CtrlN
    $End
    CtrlEnter
    $If (!Apanel.LFN)
      CtrlN
    $End
    Enter
  $End
  Eval(%%CmdRestore)
$End
Смотрите также:
Общие замечания, Работа с макросами, Макроязык, Технические подробности


"Правила хорошего тона"

Спецификация плагинов...

главная

...или "Правила хорошего тона". Рекомендации. Версия от 30.04.2001

Этот документ является попыткой создания спецификации (а вернее рекомендаций) на плагины к Far Manager. Пока весь материал будет идти сплошным текстом (впоследствии разгребём по разделам).

Данный документ - для программистов, пишущих плагины для Far Manager.

Добавляйте, уточняйте, рекомендуйте и...

  1. Дистрибутив плагина рекомендуется упаковывать в архив ZIP (однозначно, т.к. некоторые сервера RAR-архивы "отдают" как text/plain, что в результате приводит к т.н. "битому" архиву).

  2. Обязательно сопровождать дистрибутив файлом file_id.diz, в котором описывать название плагина, версию, дату выпуска, краткое описание для чего предназначен плагин (языки русский, английский) и координаты разработчика. Файл file_id.diz должен быть обязательно в коpне аpхива.

  3. Также имеет смысл сопровождать дистрибутив файлом whatsnew.txt (или history.txt), в котором описывать, что было изменено (с указанием версии и даты).

  4. Одинаковые названия для плагинов в диалогах их вызова и настройки:
    Если плагин добавляет в меню строку "поиск и замена", то и в меню "Параметры внешних модулей" должна быть добавлена строка, начинающаяся с "поиск и замена", но уж никак не "а вот это настройки для поиска и замены" или просто "настройки", тогда пользователю не придётся ломать голову над тем, как называются настройки для вашего супер-пупер плагина.

  5. Если вы добавляете в дистрибутив плагина какие-либо макросы в виде reg-файлов, то не забывайте заполнять переменную "Description".

  6. Стоит исключить добавление нескольких строк в меню одним плагином. Лучше плагину показывать своё меню со всеми требуемыми функциями:
    Не надо добавлять в меню строки "поиск", "замена", "поиск в выделенном", не думайте, что ваш плагин - единственный, в этом меню разных строк уже и без вас хватает, в подобном случае лучше добавьте одну строчку "поиск и замена", а при старте плагина показывайте меню со строками "поиск", "замена" и т.д.

  7. Плагин ДОЛЖЕH чистить все временные файлы/каталоги по окончании своей работы.

  8. Если плагин предусматривает обработку определённой группы файлов (по маске), то должна быть возможность задать эту маску, а не обрабатывать все файлы подряд.

    Пример.

    Trucer удаляет конечные пробелы из редактируемого файла. Он позволяет задать маску исключений. Это хорошо. Если бы он обрабатывал всё подряд, было б плохо. Вывод: если мы хотим обрабатывать не все файлы, то это должно быть предусмотрено путём маски исключений или включений и, желательно, настраиваемо пользователем.

  9. Если плагин позволяет совершить несколько различных действий с такими файлами, то следует предусмотреть возможность доступа к каждому действию из командной строки/меню пользователя/ассоциаций.

    Пример.

    Плагин "shell link..." (про версию 1.20!) позволяет юзеру редактировать свойства ярлыка и переходить по нему к конкретному файлу. Это делается из меню плагинов. Это не есть хорошо. Лучше было б, если Оскар (автор) добавил работу с префиксом для командной строки. Тогда, например, можно было бы сделал ассоциацию на *.lnk по f4 - редактирование свойств, enter - переход по ссылке. Это интуитивно понятнее.

  10. Все сообщения, выдаваемые плагином на экран (в диалогах или в меню), должны содержаться в LNG-файлах. Это позволит сделать плагин языконезависимым.

  11. При длительных операциях дать возможность пользователю прервать процесс. То есть, примерно то, о чём говорится в статье "Обработка нажатия ESC или "Авторам долгодумающих плагинов посвящается...". Это однозначно должно быть. Даже в таких плагинах как colorer. Hельзя, чтоб Far Manager умирал из-за того что colorer не может провести парсинг строки в 200 кил.

  12. В файлах помощи рекомендуется:
    • размещать всю необходимую для работы информацию: "зачем хранить на винте всякие ридми? Они у меня есть, но лежат в архиве. Какой смысл мне лезть в архив за доп.информацией? Imho, можно и hlf помещать всё, что нужно для работы, просто следует отделять обычные сведения от advanced и ставить ссылочки типа "подробнее", "расширенное", "advanced"... Тогда не придётся в самый неподходящий момент закрывать плагин и искать этот отдельный текстовый файл. Всё это "IMHO", естественно."
    • на главной странице
      1. указывать назначение плагина и версию
      2. ссылки на прочие разделы
    • желательно иметь раздел "Alphabetical list", где перечислены все существующие разделы.
    • в любом разделе помощи предусмотреть линки на главную страницу.
    • обязательно нужно проверить то, как будет выглядеть любая из страниц помощи при размере консоли 80x25. Многие об этом забывают, в результате, помощь показывается нормально только у авторов, а у других строчки "съезжают". Помочь в проверке может плагин HlfViewer.

  13. Вызов плагина на текущем файле через F11 в любом случае нужно сделать из соображений хорошего тона, равно как и дать возможность пользователю отключить в настройках плагина функциональность AnalyseW.

  14. И про вызов из командной строки через префикс не забыть бы :-). Хорошо бы, чтобы этот префикс был настраиваемым в конфигурации плагина, во избежание пересечения с чем-нибудь ещё.

  15. Плагин в своём меню может и не иметь средств изменения порядка элементов меню, но уж если имеет, то это должно делаться по Ctrl-Up/Down.

  16. Старайтесь всегда при показе меню использовать флаг FMENU_WRAPMODE, его отсутствие причиняет лишние неудобства пользователям.

  17. Про меню.
    1. Если его текст заканчивается многоточием ("...") - получу диалоговое окно
    2. Если в тексте, выровненный по правому краю, имеется значок ">" - получу подменю
    3. В противном случае, будет сразу выполнена выбранная мной команда.
    Пример:
    Только что понадобилось отпечатать текст, первый раз решил сделать это из Far Manager. Через Print Manager. Ставлю курсор на файл, F11 / Print Manager. В полученном меню вижу "Print selected files" и не знаю, что будет, если я этот пункт выберу - сразу печать или что-то ещё из настроек. Аналогично дальше то же самое в списке принтеров. В итоге жутко неудобно.

  18. Если Ваш плагин использует компоненты (DLL, OCX, etc), не входящие в состав Windows, не поленитесь указать это в разделе "Инсталляция" своего readme.txt.

    Идеально, если вы протестируете установку своего плагина на "голую" (только что установленную в минимальной конфигурации) Windows 2000.

  19. Обрабатывая клавиатурные события редактора, не забывайте о том, что к клавишам перемещения курсора относятся не только общеупотребительные (Left, Right, Up, Down, PgUp, PgDn, Home, End), но и такие сочетания как Ctrl-N, Ctrl-E и Ctrl-S.

  20. Если вы прилагаете к своему плагину для редактора комплект макросов для обеспечения быстрой и удобной работы, а ваш плагин не является универсальным и указанные макросы имеют смысл, например, только при редактировании исходных текстов программ на С++ или только для текстовых файлов, то не следует использовать обычные макросы, хранящиеся в реестре, т.к. они будут действовать на все редакторы и только занимать лишние клавиши в файлах другого типа. Вместо этого можно предлагать пользователю комплект макросов для плагина [ESC] (тут в скобках должно быть имя автора, прямая ссылка на плагин или просто на домашнюю страницу автора, т.к. плагин может меняться и урл будет меняться тоже) или аналогичного другого плагина (на момент написания этих строк таковой не известен), которые практически ничем не отличаются от макросов Far Manager, но лишены перечисленных недостатков (действуют только на указанные пользователем типы файлов и не занимают место в реестре).


Примеры

главная
В данном разделе перечислены примеры плагинов, которые находятся на официальном SVN репозитории.

Работа в редакторе:

Align
Выравнивание блока в редакторе.
Простой плагин из разряда "Вызвали, отработал, завершился" - пример работы с сервисной функцией EditorControl.
Auto wrap
Auto wrap в редакторе - пример установки "хука" для внутреннего редактора Far Manager.
Во включённом состоянии плагин пропускает через себя все события от клавиатуры и мыши. Используется функция ProcessEditorInputW:
int WINAPI _export ProcessEditorInputW(const INPUT_RECORD *Rec)
{
  // обработка очередного KEY_EVENT
}
Brackets
Поиск и выделение парных скобок в редакторе.
Плагин из разряда "Вызвали, отработал, завершился".
Поиск ведётся с помощью ECTL_GETSTRING, установка курсора на найденную парную скобку - ECTL_SETPOSITION, выделение блока - ECTL_SELECT.
DrawLine
Рисование линий.
Вариант "хука" из разряда "Вызвали, работает, пользователь сам останавливает работу плагина".
Используется "бесконечный цикл" с вызовом команд ECTL_READINPUT и ECTL_PROCESSINPUT:
HANDLE WINAPI _export OpenPluginW(int OpenFrom,INT_PTR Item)
{
  ...
  while (!Done)
  {
    Info.EditorControl(ECTL_READINPUT,&rec);
    ...
    Info.EditorControl(ECTL_PROCESSINPUT,&rec);
  }
  ...
}
EditCase
Изменение начертания символов (верхний/нижний регистр).
Плагин из разряда "Вызвали, отработал, завершился".
Строка берётся с помощью команды ECTL_GETSTRING, преобразуется и заменяется в редакторе с помощью команды ECTL_SETSTRING.
HlfViewer
Плагин HlfViewer создан для помощи тем людям, которые создают или изменяют hlf-файлы, а также просто хотят просмотреть тот или иной hlf-файл помощи (обработка клавиши F1 с последующим вызовом редактируемого HLF-файла, обработка перфикса "hlf:").

Прочее:

HelloWorld
"Здравствуй, Мир!" Этот модуль Far Manager предназначен исключительно для учебных целей.
Как повелось - изучение любого языка программирования начинается с программы "Hello, World!". Именно это и делает данный плагин.
FAR Commands
Плагин FAR Commands (или FARCmd) предоставляет дополнительные возможности, которые можно использовать в меню пользователя, ассоциаций файлов или командной строке. Показана работа с несколькими префиксами.
FileCase
Эта команда позволяет изменить регистр отмеченных имён файлов в соответствии с любым из нескольких доступных форматов. Это - простой плагин, воспользуйтесь им как шаблоном для создания новых команд для Far Manager.
Network
С помощью модуля просмотра сети вы можете перемещаться по сети, переходить на сетевые диски, отображать их на локальные диски и отменять такое отображение. Нажмите F5, чтобы отобразить выбранные диски на следующие доступные буквы или F6, если вы хотите выбрать буквы сами. F8 отменяет уже существующее отображение.
TmpPanel
Временная панель поддерживает аналогичный панели файлов интерфейс и предназначена для облегчения одновременной обработки групп файлов из различных папок. Плагин позволяет использовать до 10 временных панелей, каждая из которых содержит отдельный список файлов.


Статьи и заметки

главная
В этом разделе опубликованы статьи и заметки на околопрограммистские темы. Мы будем рады, если материалы из данного раздела помогут Вам найти решение в процессе создания плагина. Собственно для этого и создавалась Энциклопедия!
  • Упаковщики - ЗА и ПРОТИВ
    Jordan Russell. 21.04.2000
  • Обработка нажатия ESC или "Авторам долгодумающих плагинов посвящается..."
    Иван Синтюрин. 13.12.1999, Rev. 06.09.2000
Если у вас есть несекретные "маленькие секреты" или, в процессе работы над плагинами, вы сталкивались с некоторыми особенностями, "подводными камнями" и с успехом преодолели эти самыми трудности, то расскажите о них, оформите в виде небольшой статьи, и мы с удовольствием разместим ваш материал в этой Энциклопедии...

Возможно Вам поможет статья "Для авторов" :-)

Смотрите также:
Для авторов


Упаковщики - ЗА и ПРОТИВ

главная | статьи
Jordan Russell

Многие посетители моей страницы часто спрашивают следующее:

"Если я хочу уменьшить размер своей программы, то почему бы ни использовать EXE компрессор? Это позволит сделать размер EXE значительно меньше, чем использование StripReloc! Почему вы против этого"

Многие не понимают (или просто не знают), что при использовании Компрессоров типа ASPack и UPX они многое теряют. По моему мнению EXE компрессоры это не то, что следует применять бездумно. Позвольте разъяснить.

В DOS, когда вы запускаете программу, весь её код загружается с диска В оперативную память и остаётся в ней до конца. Если не хватает памяти для загрузки всей программы, то вы получите сообщение об ошибке "out of memory".

Современные многозадачные Операционные Системы (ОС), такие как Windows 95/98 и NT используют метод названный "Виртуальная память" (virtual memory). Когда программа загружается, то в память сразу не грузится весь код, как в случае DOS программ. Вместо этого загружается только часть кода, которая требуется для исполнения. Например, ваша программа имеет пункт меню "Print" и код назначенный, который исполняется при выборе этого пункта. Этот код загружается в память только когда пользователь выбирает данный пункт. И если после загрузки кода в память он не используется некоторое время, то код выгружается из памяти, память освобождается и может быть использована другими программами. Данный процесс называется "paging" и полностью прозрачно для программы.

Другой путь экономии использования памяти - это использование одной и той же области памяти для нескольких экземпляров программы (или DLL). Другими словами, нет реальной разницы между одним экземпляром программы или сотней экземпляров программы в количестве используемой физической памяти выделенной для кода.

Если бы Win32 вели бы себя как DOS программы, то есть загрузка всего кода в память и оставались бы там до завершения и также бы не разделяли память для разных экземпляров программы, вы бы быстро исчерпали всю доступную память.

Вот именно это и делают текущие Win32 EXE компрессоры! Они полностью блокирую работу метода "paging" разжимая весь код в память и сохраняя его там до конца работы программы. И поскольку код в упакованном EXE файле хранится не в обычном "raw" формате (то есть в том виде какой он в памяти), то ОС не в состоянии разделять тот же блок памяти для нескольких экземпляров программы. Многие используют EXE компрессоры как сильное оружие для уменьшения потерь под размер на диске, но я хочу спросить: Что более накладно - мегабайты на диске или мегабайты оперативной памяти? Действительно ли стоит увеличивать требования вашей программы на оперативную память за счёт сохранения несколько килобайт дискового пространства?

Тест

Я слышал, что многие сжимаю свои EXE из MS Office, поэтому я решил провести тест по реальному использованию памяти именно на MSACCESS.EXE. Я сжал MSACCESS.EXE из Office 2000 с помощью UPX и сравнил использование памяти с помощью NT 4.0's Task Manager...
Ниже приведены (удивительные) результаты теста.

 | File Size | Process "Mem Usage" 1 instance | "Commit Charge Total" 1 instance difference | "Commit Charge Total" 20 instances difference
uncompressed | 4,677,686 | 2580 KB | 1084 KB | 25396 KB
UPX 0.82 | 2,436,096 | 6852 KB | 6192 KB | 126968 KB

Опираясь на 1 экземпляр результаты показанные выше, показываю что: сжатый MSACCESS.EXE забирает на 5MB больше памяти. Ну не так уж плохо, но уже ощутимо.

Но вот уже для 20 экземпляров результат следующий. Да вы читаете правильно. Это не типографская ошибка!!! Для 20 экземпляров сжатого MSACCESS.EXE требуют на 100 Мб больше, чем не сжатый.

Мой тест был сделан на машине с 256MB оперативной памяти, желаю удачи при проведении теста на машине с 64 Мб память. Для запуска 20 экземпляров MSACCESS.EXE я использовал 20 строчный bat файл, каждая строка которого содержала следующий тест: "START MSACCESS.EXE". Плохая весть: запуск 20 экземпляров MSACCESS.EXE немного больше времени (4 секунды против 1.5), которое я отношу на счёт взаимного использования кода между экземплярами и времени требуемым на распаковку программы. Это показывает, что малый размер файла не гарантирует более быструю загрузку.

Поскольку я делал фокус на тестирования кода, я использовал следующие ключи для UPX: --compress-exports=0 --compress-icons=0 --compress-resources=0. Я планировал протестировать и ASPack, но запустить сжатый MSACCESS.EXE не удалось. Но я думаю, что результат был бы сравним с UPX, также я не пробовал тестировать другие упаковщики.

Заключение

Цель данной статьи не является принизить авторов EXE компрессоров, а только отражает факты, о которых они предпочитают умалчивать. Да EXE компрессоры могут быть хорошим выбором когда нужно. Но в то же время много причин не получения нужного результата, как это показывает мой тест.

Дополнение от 20 апреля 2000

  1. Другой недостаток использования EXE компрессоров, не отмеченный выше, это то что многие старые сканеры вирусов считаю, что в эти упакованные файлы заражены вирусом, (некоторые из них докладывают "неизвестный вирус", некоторые "Win32.BackDoor"). Это было основной причиной для отказа использования в моём инсталляторе "Inno Setup", а не по причине расточительного использования памяти. Я был очень огорчён ругательными письмами, которые я стал получать по поводу распространения вирусов. Я даже был обозван лжецом, когда пытался объяснить это. Пришлось даже увидеть предупреждение на некоторых сайтах, о том, что "Inno Setup" может содержать вирус. Как результат, использование EXE компрессоров может привести к потере бизнеса или подрыву репутации.
  2. Я конечно не думаю, что кто то будет запускать 20 экземпляров MS Access одновременно. Это было сделано с целью иллюстрации, что затраты на память возрастаю экспоненциально при запуске нескольких экземпляров. В большинстве случаев не запускают нескольких экземпляров программ, но DLL часто загружаются и используются одновременно несколькими программами. Взаимное использование кода относится и к DLL также, о чём я забыл упомянуть в статье.
  3. Многие люди спрашивают, "а как насчёт Shrinker?" Blink, Inc. преподносит, что Shrinker "единственный продукт, который распаковывает EXE блоками по требованию (ON DEMAND), а не при запуске программы", и это объясняет почему распаковщик занимает примерно 30 килобайт для каждой программы. Мои начальные тесты со Shrinker были неполными и проведу дополнительное тестирование Shrinker в будущем.

Примечание переводчика:
Джордан Рассел (Jordan Russell) автор программ и компонент Inno Setup, StripReloc, ToolBar97, ToolBar 2000
Оригинал находится http://www.jordanr.dhs.org/striprlc.htm

Перевод: Анатолий Подгорецкий
anatoly@podgoretsky.com
http://nps.vnet.ee

21.04.2000
См. также статью Криса Касперски "Паковать или не паковать?"
(http://www.programme.ru/index.phtml?arch/102001/102001_1.htm) .

наверх


Обработка нажатия ESC или "Авторам долгодумающих плагинов посвящается..."

главная | статьи
Иван Синтюрин spinoza@mail.ru

Очередное воззвание к народу:

ДЕЛАЙТЕ ПЛАГИНЫ ИНТЕРАКТИВНЫМИ!

Это в общем, а в частном...

Написали вы свой супер-пупер-мега-плагин. Замечательно! Если он делает своё тёмное/светлое :-) дело быстро, за доли секунды, то можете дальше не читать. А если некоторые операции, осуществляемые плагином, требуют определённого времени, то следует обязательно обрабатывать в плагине нажатие ESC (или чего-нибудь ещё).

Зачем? Пользователь - существо странное, вдруг он запустил ваш плагин по ошибке (или тот самостоятельно запустился, что не меняет сути дела) или сознательно, но резко передумал. Как ему быть в данной ситуации? FAR убивать? А плагин думает, работает, а пользователь волосы на себе рвёт и проклинает Вас. Выход прост - плагин должен реагировать (интерактивность!) на нажатие клавиши «ESC» (Escape - бегство, бурж.). Для этого можно использовать, например, следующую функцию (за основу взята функция из файла Examples\MultiArc\ARCMIX.CPP):

bool CheckForEsc(void)
{
 bool EC=false;
 INPUT_RECORD rec;
 static HANDLE hConInp=GetStdHandle(STD_INPUT_HANDLE);
 DWORD ReadCount;
 while (1)
 {
  PeekConsoleInput(hConInp,&rec,1,&ReadCount);
  if (ReadCount==0) break;
  ReadConsoleInput(hConInp,&rec,1,&ReadCount);
  if (rec.EventType==KEY_EVENT)
     if (rec.Event.KeyEvent.wVirtualKeyCode==VK_ESCAPE &&
         rec.Event.KeyEvent.bKeyDown) EC=true;
 }
 return(EC);
}

Дальше, где нужно, пишем что-то типа:

...
if(CheckForEsc()) ... //реакция на нажатие ESC, например, выход из плагина
else ... //работаем дальше
...

That's all, folks :-)

дополнения от Василия Мошнинова

13.12.1999
Rev. 06.09.2000
наверх


"Обработка нажатия ESC или . . ."

главная | статьи | статья
Василий Мошнинов vmoshninov@newmail.ru

Я бы предложил переписать функцию проверки на ESC по-другому. В своё время у меня были замечания по поводу того, что плагин ProxyFtp чистит буфер и нельзя делать «упреждающие нажатия» :)) клавиш. Поэтому такая функция была мной переписана вот так:

function CheckForKey(vKey: word): boolean;
const
  DELTA = 16;
Type
  TInputRecArr = array[0..Pred(MaxInt div SizeOf(TInputRecord))] of TInputRecord;
Var
  Console: THandle;
  InputRec: ^TInputRecArr;
  InputSize: DWORD;
  ReadSuccess: boolean;
  ReadCnt,i: DWORD;
Begin
  result:= false;
  Console:= GetStdHandle(STD_INPUT_HANDLE);
  InputSize:= 0;
  InputRec:= nil;

  try
    repeat
      Inc(InputSize, DELTA);
      MemRealloc(InputRec,InputSize*SizeOf(TInputRecord));
      ReadSuccess:= PeekConsoleInput(Console,InputRec^[0],InputSize,ReadCnt);
    until (not ReadSuccess) or (ReadCnt < InputSize);
    if ReadSuccess and (ReadCnt > 0) then
    begin
      for i:= 0 to Pred(ReadCnt) do
        if (InputRec^[i].EventType = KEY_EVENT) and
           (InputRec^[i].Event.KeyEvent.bKeyDown) and
           (InputRec^[i].Event.KeyEvent.wVirtualKeyCode = vKey) then
        begin
         result:= true;
         ReadConsoleInput(Console,InputRec^[0],Succ(i),ReadCnt);
         Break;
        end; { if }
    end; { if }
  finally
    MemRealloc(InputRec,0);
  end;
end;

Эта функция не чистит буфер клавиатуры, если искомого кода там нет.

Вариант функции на C/C++:

BOOL CheckForKey(WORD vKey)
{
  INPUT_RECORD *InputRec;
  DWORD NumberOfEvents, ReadCnt,i;
  BOOL result = FALSE;
  HANDLE Console = GetStdHandle(STD_INPUT_HANDLE);

  if(GetNumberOfConsoleInputEvents(Console,&NumberOfEvents))
  {
    if((InputRec=(INPUT_RECORD *)GlobalAlloc(GPTR,
                             NumberOfEvents*sizeof(INPUT_RECORD))) != NULL)
    {
      if(PeekConsoleInput(Console,InputRec,NumberOfEvents,&ReadCnt))
        if(ReadCnt <= NumberOfEvents)
          for(i=0; i < NumberOfEvents; ++i)
          {
            if (InputRec[i].EventType == KEY_EVENT &&
                InputRec[i].Event.KeyEvent.bKeyDown &&
                InputRec[i].Event.KeyEvent.wVirtualKeyCode == vKey)
            {
              result=TRUE;
              if(i > 0)
                ReadConsoleInput(Console,InputRec,i,&ReadCnt);
              break;
            }
          }
      GlobalFree((HGLOBAL)InputRec);
    }
  }
  return result;
}

15.04.2000
наверх


Для авторов

главная | статьи
Здесь описываются некоторые моменты оформления и организации статей для Энциклопедии.
  1. Ссылка "внутрь" Энциклопедии (например, для структуры PluginStartupInfo):

    <a href="mk:@MSITStore:pluginsr.chm::/html/structures/pluginstartupinfo.html">PluginStartupInfo</a>

    Здесь следует учесть структуры каталогов pluginsr.chm и принципы наименования статей:

    • имена html-файлов в основном соответствуют названиям функций и структур;
    • все html-файлы внутри pluginsr.chm в нижнем регистре;
    • html-файлы раскиданы по подкаталогам в соответствии со своими функциональными назначениями, например, основные структуры располагаются в pluginsr.chm::/html/structures/, структуры Dialog API в pluginsr.chm::/html/dialogapi/structures/ и т.п.

  2. Ссылка на WinAPI функцию (не описанную в Энциклопедии) для Вашей статьи (например, для функции GetLastError):

    <a href="win32/GetLastError">GetLastError</a>

    специальным скриптом такая ссылка преобразуется в <object>, как указано ниже.

  3. Ссылка на WinAPI функцию (не описанную в Энциклопедии) для самостоятельного CHM-файла (например, для функции GetLastError):

    <a href=JavaScript:linkXXXX.Click()>GetLastError</a>
    <object id=linkXXXX type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
    <param name="Command" value="KLink">
    <param name="DefaultTopic" value="">
    <param name="Item1" value="">
    <param name="Item2" value="GetLastError">
    </object>

    Здесь linkXXXX - уникальный ID объекта в пределах одной HTML-страницы.

    При этом, если CHM-файл, то выбор ссылки приведёт к открытию соответствующей статьи из MSDN. Если MSDN`а поблизости нет, то пользователь получит сообщение:

  4. Ссылка на WinAPI функцию (не описанную в Энциклопедии) для Интернета (например, для функции GetLastError):

    <a href="msdn.html?GetLastError">GetLastError</a>

    Предполагается, что "msdn.html" располагается в "корне" проекта и браузер пользователя MSIE 4.x и выше.
    Содержимое файла:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<title>Внешняя ссылка</title>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
<link rel="stylesheet" type="text/css" href="../styles/styles.css">
</head>

<body>

<h1>Внешняя ссылка</h1>
<div class="navbar">
  <a href="index.html">главная</a>
</div>

<div class="descr">
Запрашиваемая информация <span id="msdn"></span> находится где-то в дебрях
<b><a href="http://msdn.microsoft.com/library/" target="_blank">MSDN Library</a></b>.

<script language="javascript" type="text/javascript"><!--
if (document.images != null && navigator.userAgent.indexOf("Mozilla", 0) != -1)
{
  var f=document.location.href.indexOf("?");
  if(f > 0)
  {
    var qu=document.location.href.substring(f+1);
    msdn.innerHTML=" по <a href='http://social.msdn.microsoft.com/Search/?query=" +
        qu + "' target='_blank' style='font-weight:bold;'>" +qu+ "</a> "
  }
}
//--></script>

</body>

</html>


Краткое описание - Basic API

главная

коротенько описать....


Краткое описание - Dialog API

главная | Dialog API

DialogAPI выделен в отдельное API, для максимального контроля над созданным диалогом.

Менеджер диалогов поддерживает только так называемые Модальные Диалоги (Modal Dialog). Модальный диалог представляет собой окно, запрещающее пользователю взаимодействовать с любым объектом FAR Manager вне данного диалога. Модальный диалог отсекает поток сообщений, идущих от мыши или клавиатуры к другим объектам FAR Manager.

Подробности

Плагин полностью управляет поведением диалога:
  • диалог имеет функцию-обработчик, которая реагирует на массу событий, приходящих от Менеджера диалогов;
  • функция-обработчик общается с Менеджером Диалогов путём посылки сообщений, используя функцию SendDlgMessage;
  • функция-обработчик может передать управление Менеджеру Диалогов используя функцию DefDlgProc;
  • окончанием обработки диалога управляет плагин.
Если в обработчике диалога просто передать управление ядру посредством функции DefDlgProc, то получим... простой, неуправляемый диалог (такие же диалоги можно получить при вызове функции DialogInit с параметром DlgProc, равным NULL):
// минимальный обработчик диалога
intptr_t WINAPI MyDlgProc(HANDLE hDlg, intptr_t Msg, intptr_t Param1, void *Param2)
{
  return Info.DefDlgProc(hDlg,Msg,Param1,Param2);
}

Итак. Dialog API:

Сервисные функции и cтруктуры
Макросы и типы
Элементы диалога
Флаги элементов диалога
События
Сообщения

Смотрите также:
Экспортируемые функции, Сервисные функции, Структуры


Элементы диалога - Dialog API

главная | Dialog API
Dialog API поддерживает определённое множество управляющих элементов (перечисление FARDIALOGITEMTYPES). Каждый элемент управления описывается структурой FarDialogItem. Массив этих структур передаётся в функции DialogInit для инициализации диалога.
Элемент | Значение | Описание
DI_BUTTON | 7 | кнопка (Push Button)
DI_CHECKBOX | 8 | контрольный переключатель (Check Box)
DI_COMBOBOX | 10 | комбинированный список
DI_DOUBLEBOX | 3 | двойная рамка
DI_EDIT | 4 | поле ввода
DI_FIXEDIT | 6 | поле ввода фиксированного размера
DI_LISTBOX | 11 | окно списка
DI_PSWEDIT | 5 | поле ввода пароля
DI_RADIOBUTTON | 9 | селекторная кнопка (Radio Button)
DI_SINGLEBOX | 2 | одиночная рамка
DI_TEXT | 0 | текстовая строка
DI_USERCONTROL | 255 | элемент управления, определяемый программистом
DI_VTEXT | 1 | вертикальная текстовая строка

Замечания

При описании всех элементов использовалось схематичное представление структуры FarDialogItem.
Смотрите также:
Флаги элементов диалога


Сообщения - Dialog API

главная | Dialog API
Сообщение | Описание
DM_ADDHISTORY | добавить строку в историю
DM_CLOSE | сигнал на закрытие диалога
DM_EDITUNCHANGEDFLAG | управление состоянием "неизмененный текст" строки редактирования
DM_ENABLE | переключение/получение состояния Enable/Disable элемента
DM_ENABLEREDRAW | отключение/включение перерисовки всего диалога
DM_GETCHECK | получить состояние элементов DI_CHECKBOX и DI_RADIOBUTTON
DM_GETCOMBOBOXEVENT | получить состояние посылки событий для открытого combo box
DM_GETCONSTTEXTPTR | получить указатель на внутренний буфер Far Manager, содержащий строку ввода
DM_GETCURSORPOS | получить позицию курсора
DM_GETCURSORSIZE | получить размеры курсора
DM_GETDIALOGINFO | получить информацию о диалоге Far Manager или другого плагина
DM_GETDIALOGTITLE | получить заголовок диалога
DM_GETDLGDATA | получить данные, ассоциированные с диалогом
DM_GETDLGITEM | получение полной информации о элементе
DM_GETDLGITEMSHORT | получение информации о элементе
DM_GETDLGRECT | получить координаты диалогового окна
DM_GETDROPDOWNOPENED | определить - есть ли в диалоге раскрытый комбобокс или история
DM_GETEDITPOSITION | получить позицию курсора в строках ввода
DM_GETFOCUS | получить индекс элемента, имеющего фокус ввода
DM_GETITEMDATA | получить данные, ассоциированные с элементом диалога
DM_GETITEMPOSITION | получить позицию и размер элемента
DM_GETSELECTION | получить параметры выделения в строках редактирования диалога
DM_GETTEXT | получение строки ввода или заголовка элементов
DM_KEY | передать массив клавиш обработчику диалога
DM_LISTADD | добавить в список новый элемент
DM_LISTADDSTR | добавить в список строку
DM_LISTDELETE | удалить элементы списка
DM_LISTFINDSTRING | найти элемент списка
DM_LISTGETCURPOS | получить текущую позицию в списке
DM_LISTGETDATA | получить данные, ассоциированные с элементом списка
DM_LISTGETDATASIZE | получить размер данных, ассоциированных с элементом списка
DM_LISTGETITEM | получить один элемент списка
DM_LISTGETTITLES | получить заголовки списка
DM_LISTINFO | получить информацию о списке
DM_LISTINSERT | вставить элемент в список
DM_LISTSET | добавление элементов в список с удалением предыдущих элементов
DM_LISTSETCURPOS | установить позицию в списке
DM_LISTSETDATA | установить данные, ассоциированные с элементом списка
DM_LISTSETTITLES | установить заголовки списка
DM_LISTSORT | сортировать элементы списка
DM_LISTUPDATE | обновить элемент в списке
DM_MOVEDIALOG | переместить диалог
DM_REDRAW | перерисовать весь диалог
DM_RESIZEDIALOG | изменить размеры диалога
DM_SET3STATE | изменить стиль DI_CHECKBOX
DM_SETCHECK | установить состояние элементов DI_CHECKBOX и DI_RADIOBUTTON
DM_SETCOMBOBOXEVENT | включить или отключить посылку сообщений DN_INPUT или DN_CONTROLINPUT для открытого combo box
DM_SETCURSORPOS | позиционировать курсор
DM_SETCURSORSIZE | установить размер курсора
DM_SETDLGDATA | ассоциировать данные с диалогом
DM_SETDLGITEM | для изменения информации о заданном элементе
DM_SETDLGITEMSHORT | для изменения информации о заданном элементе
DM_SETDROPDOWNOPENED | программное раскрытие/закрытие комбобокса или истории
DM_SETEDITPOSITION | управление позицией курсора в строках ввода
DM_SETFOCUS | устанавливает клавиатурный фокус на заданный элемент диалога
DM_SETHISTORY | управление наличием истории.
DM_SETINPUTNOTIFY | управление первичным событием консоли
DM_SETITEMDATA | ассоциировать данные с элементом диалога
DM_SETITEMPOSITION | изменить позицию элемента
DM_SETMAXTEXTLENGTH | задать максимальный размер редактируемой строки или заголовка элемента
DM_SETSELECTION | выделить блок в строках редактирования диалога
DM_SETTEXT | установить строку ввода или заголовок элемента
DM_SETTEXTPTR | установить строку ввода или заголовок элемента
DM_SHOWDIALOG | показать/спрятать диалоговое окно
DM_SHOWITEM | показать/спрятать элемент диалога
DM_USER | отправная точка для пользовательских сообщений
Смотрите также:
События Dialog API


События - Dialog API

главная | Dialog API
Событие | Описание
DN_BTNCLICK | изменилось состояние кнопок
DN_CLOSE | сигнал о закрытии диалога
DN_CONTROLINPUT | пользователь нажал клавишу или кликнул клавишей мыши
DN_CTLCOLORDIALOG | запрос цвета на прорисовку подложки окна диалога
DN_CTLCOLORDLGITEM | запрос цвета для конкретного элемента диалога
DN_CTLCOLORDLGLIST | запрос цвета на отрисовку списка
DN_DRAGGED | информация о перемещениях диалога
DN_DRAWDIALOG | перед прорисовкой всего диалога
DN_DRAWDIALOGDONE | прорисовка диалога закончена
DN_DRAWDLGITEM | перед отрисовкой элемента диалога
DN_DRAWDLGITEMDONE | после отрисовки элемента диалога
DN_DROPDOWNOPENED | изменение состояние combobox и history (открыт/закрыт)
DN_EDITCHANGE | изменение состояния элемента редактирования
DN_ENTERIDLE | холостое состояние
DN_GETVALUE | запрос на изменение информации для макросов
DN_GOTFOCUS | элемент диалога получил клавиатурный фокус ввода
DN_HELP | вывод темы помощи
DN_HOTKEY | пользователь нажал Alt-буква
DN_INITDIALOG | инициализация диалога
DN_INPUT | возможность перехватить сообщение мыши до его обработки ядром
DN_KILLFOCUS | перед потерей клавиатурного фокуса элементом диалога
DN_LISTCHANGE | изменение состояния элемента списка
DN_LISTHOTKEY | выбор элемента списка с помощью горячей клавиши
DN_RESIZECONSOLE | нотификационное сообщение "Изменились размеры консоли"
Смотрите также:
Сообщения Dialog API


Флаги элементов диалога - Dialog API

главная | элементы диалога | Dialog API
Поведением и внешним видом управляющих элементов Dialog API можно управлять посредством флагов. О том, какие флаги на какие элементы воздействуют читайте в описаниях к элементам управления.
Флаг | Описание
DIF_3STATE | элемент DI_CHECKBOX будет иметь 3 состояния
DIF_BOXCOLOR | текст элемента будет иметь цвет рамок
DIF_BTNNOCLOSE | для кнопки - не завершать диалог
DIF_CENTERGROUP | центрирование группы элементов
DIF_CENTERTEXT | центрирование текста в статических элементах
DIF_DEFAULTBUTTON | элемент является "элементом по умолчанию"
DIF_DISABLE | элемент является недоступным
DIF_DROPDOWNLIST | задаёт стиль не редактируемого списка
DIF_EDITEXPAND | "расширение" переменных среды в строках ввода
DIF_EDITOR | последовательно определённые поля ввода
DIF_EDITPATH | строка ввода будет содержать имена реальных файловых объектов
DIF_EDITPATHEXEC | ограничивает автодополнение только исполнимыми файлами
DIF_FOCUS | элемент получает клавиатурный фокус ввода
DIF_GROUP | группировка RadioButtons
DIF_HIDDEN | элемент диалога не виден
DIF_HISTORY | позволяет вести историю редактирования для поля ввода
DIF_LEFTTEXT | выравнивать заголовки рамок по левому краю
DIF_LISTAUTOHIGHLIGHT | автоматическое назначение горячих клавиш в списке
DIF_LISTNOAMPERSAND | позволяет показывать горячие клавиши в списке
DIF_LISTNOBOX | показывать список без рамки
DIF_LISTNOCLOSE | не закрывать диалог при выборе элемента из списка
DIF_LISTTRACKMOUSE | реагировать на движение мыши в списке
DIF_LISTTRACKMOUSEINFOCUS | реагировать на движение мыши в списке только если элемент находится в фокусе
DIF_LISTWRAPMODE | "заворачивает" список при навигации по списку
DIF_MANUALADDHISTORY | обработчик диалога сам будет добавлять строки в историю
DIF_MASKEDIT | задаёт маску в строках ввода
DIF_MOVESELECT | изменить выбор внутри группы radio-кнопок при изменении фокуса ввода
DIF_NOAUTOCOMPLETE | отключить автодополнение для строк редактирования
DIF_NOBRACKETS | показывает заголовок кнопки без скобок
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_NONE | нулевой флаг
DIF_READONLY | переводит строки редактирования в состояние "только для чтения"
DIF_RIGHTTEXT | выравнивать текст по правому краю
DIF_SELECTONENTRY | при получении фокуса ввода содержимое строки редактирования будет выделяться
DIF_SEPARATOR | текстовая строка отображается как разделитель диалога (одинарная горизонтальная линия)
DIF_SEPARATOR2 | текстовая строка отображается как разделитель диалога (двойная горизонтальная линия)
DIF_SEPARATORUSER | текстовая строка отображается как разделитель диалога (формат линии задается плагином)
DIF_SETSHIELD | размещает на кнопке аналог "иконки со щитом" Microsoft UAC
DIF_SHOWAMPERSAND | показывать в текстовой строке амперсанд не используя его для определения горячей клавиши
DIF_USELASTHISTORY | начальное значение берётся из истории
DIF_WORDWRAP | усекает очередное слово, если оно не вмещается по ширине элемента


Краткое описание - Editor API

главная

коротенько описать....


Синтаксис тем помощи

главная | Файлы помощи
Параметр HelpTopic, описывающий тему помощи, может имеет один из следующих форматов:
Формат | Описание
"Topic" | Ссылка на тему в файле помощи плагина.
":Topic" | Ссылка на тему из основного файла помощи Far Manager.
"<FullPath>Topic" Абсолютная ссылка на тему в файле помощи, находящемся в каталоге FullPath. Путь задаётся c заключительным слешем. Например, плагин Foo располагается в каталоге 'D:\FAR\Plugins\Foo' и нам надо показать тему помощи 'FooInfo' из хелпа по этому плагину:
"<D:\FAR\Plugins\Foo\>FooInfo"
"<FullModuleName>Topic" Абсолютная ссылка на тему в файле помощи, находящемся в том же каталоге, где находится плагин с именем DLL-модуля FullModuleName. Например, для плагина Foo 'D:\FAR\Plugins\Foo\Foo.dll' необходимо показать тему помощи 'FooInfo' из хелпа по этому плагину:
"<D:\FAR\Plugins\Foo\Foo.dll>FooInfo"
Смотрите также:
ShowHelp, DialogInit, DN_HELP, InputBox, Menu, Message


Области действия - Макросы

Области действия

главная | Макросы | Общие сведения

FAR позволяет создавать независимые макросы (макросы, у которых совпадает сочетание клавиш запуска) для различных областей.

ВНИМАНИЕ! ВНИМАНИЕ!

  • Область, к которой будет принадлежать макрос, определяется тем местом, где его начали записывать.

В настоящий момент такими независимыми областями являются:

  • файловые панели (Shell);
  • информационная панель (Info);
  • панель быстрого просмотра (QView);
  • панель дерева папок (Tree);
  • быстрый поиск в панелях (Search);
  • поиск папок (FindFolder);
  • внутренняя программа просмотра (Viewer);
  • редактор (Editor);
  • диалоги (Dialog);
  • прочие меню (Menu);
  • основное меню (MainMenu);
  • меню пользователя (UserMenu);
  • меню выбора диска (Disks);
  • список автодополнения в панелях (Shell.AutoCompletion);
  • список автодополнения в диалогах (Dialog.AutoCompletion);
  • система помощи (Help);
  • остальное: режим копирования текста с экрана (Other).

Нельзя назначить на какое-либо сочетание клавиш в одной области несколько различных действий (это ограничение иногда можно обойти, воспользовавшись примитивным макроязыком). При попытке назначить для нового макроса уже используемое сочетание предыдущий макрос будет удалён.

Таким образом, вы можете иметь по одному макросу с одинаковым сочетанием клавиш запуска в каждой из перечисленных областей.

Имеется также область Common. Макрос из этой области будет работать везде. При этом приоритет отдаётся перечисленным выше областям. Макрос из этой области нельзя создать интерактивно, но можно удалить.

Смотрите также:
Общие замечания, Технические подробности


$AKey - Макросы

$AKey

главная | Макросы | Макроязык | Макрокоманды
Оператор $AKey предназначен для вставки во входной буфер клавиши, вызвавшей макрос (реально нажатое сочетание, которым вызывался макрос).
$AKey

Пример

Макрос для переключения между экранами. В разделе Common вводятся 10 однотипных макросов AltЦифра:

$If ( Dialog || MainMenu || Menu || UserMenu || Search )
  $AKey
$Else
  %s = AKey ( 1 );
  %c = substr ( %s, len ( %s ) - 1, 1 );
  F12
  $If ( CheckHotkey ( %c ) )
    eval ( %c )
  $Else
    Esc
    $AKey
  $End
$End
Смотрите также:
akey(), Примеры


Условные операторы - Макросы

Условные операторы

главная | Макросы | Макроязык

В макрокомандах $If и $While в качестве условия Expr могут использоваться операции сравнения:

Оператор | Описание
== | Равно
!= | Не равно
< | Меньше
> | Больше
<= | Меньше или равно
>= | Больше или равно

ВНИМАНИЕ! ВНИМАНИЕ!

  • Операции сравнения для строковых переменных регистрозависимы.

Булевое выражение Expr может быть сложным. В этом случае простые выражения объединяются с помощью следующих операторов:

Оператор | Описание
&& | Логическое И (А И B)
|| | Логическое ИЛИ (А ИЛИ B)
^^ | Исключающее ИЛИ (А ИЛИ B, но не оба сразу)

Простые выражения могут заключаться в круглые скобки.


$Break - Макросы

$Break

главная | Макросы | Макроязык | Макрокоманды
Оператор $Break завершает текущий цикл $While или $Rep. Управление передается на оператор, следующий за $End соответствующего цикла.
$Break

Замечания

Применяется только в циклах $Rep и $While.

Смотрите также:
$Rep, $While, $Continue, Примеры


Макрокоманды - Макросы

Макрокоманды

главная | Макросы | Макроязык

В макроязыке используются специальные макрокоманды.

Команды, используемые в тексте макросов

Макрокоманда | Описание
$AKey | Клавиша вызова макроса.
$Break | Выйти из текущего цикла.
$Continue | Перейти на следующую итерацию цикла.
$Exit | Прерывает выполнение макропоследовательности.
$If (Expr) TruePart [$Else FalsePart] $End | Позволяет организовать в макросах процесс ветвления макропоследовательности.
$Rep (Expr) Sequence $End | Позволяет организовать в макросах циклический процесс - "Выполнить Expr раз последовательность Sequence".
$SelWord | Выделить слово под курсором.
$Text "string" | Предназначена для вставки произвольного текста.
$While (Expr) Sequence $End | Позволяет организовать в макросах циклический процесс - "Пока условие Expr истинно выполнять последовательность Sequence".
$XLat | Вызывает функцию транслитерации.


Константы - Макросы

Константы

главная | Макросы | Макроязык
Константы позволяют задавать имена значениям и обращаться к ним позже.

Именование

Имена константам можно задавать произвольные, но при этом соблюдать следующие правила:

  1. Имя начинается с буквы латинского алфавита, дальше в произвольном порядке идут буквы латинского алфавита, цифры и символ '_'.
  2. Имена констант не должны совпадать с названиями клавиш и именами предопределённых свойств и макрофункций.

Типы

Константы могут быть трех типов - целое число, вещественное (разделитель целой и дробной частей - точка) или строка.

Целочисленные константы: NNN - 10-ричная константа, 0NNN - 8-ричная константа, 0xNNN - 16-ричная константа.

Целочисленные константы 64-разрядные.

Константы с плавающей точкой - двойной точности 64-разрядные (double).

Область действия

При старте FAR считывает константы из базы macros.db (таблица constants).

Представление в базе

В базе константы располагаются в таблице constants.

Каждая константа имеет имя, значение и тип. Значение в базе всегда хранится в виде текста. Поле type уточняет тип содержимого в поле value:

  • text - строковые константы
  • real - константы с плавающей точкой
  • integer - целочисленные константы

Преобразование чисел с плавающей точкой в строку осуществляется по формату "KeyMacros/CONVFMT". По умолчанию "%.6g"

Пример

Пример описания вещественной константы PI и применения константы FIB_PASSWORD (0x00000002) для функции prompt().
<constants>
  <constant name="FIB_PASSWORD", value="0x00000002", type="integer"/>
  <constant name="PI" value="3.14159265358979323846" type="real"/>
</constants>

<keymacros>
  <macro area="Editor" key="CtrlP" flags="DisableOutput">
    %s=prompt("Password","Input password:",FIB_PASSWORD);
    $Text %s
  </macro>
</keymacros>
Смотрите также:
Переменные


$Continue - Макросы

$Continue

главная | Макросы | Макроязык | Макрокоманды
Оператор $Continue приводит к началу следующей итерации текущего цикла: для цикла $While переход к выполнению проверочной части, для цикла $Rep управление передаётся на шаг реинициализации.
$Continue

Замечания

Применяется только в циклах $Rep и $While.

Смотрите также:
$Rep, $While, $Break, Примеры


$Exit - Макросы

$Exit

главная | Макросы | Макроязык | Макрокоманды
Оператор $Exit прерывает выполнение макропоследовательности.
$Exit

Пример

REGEDIT4

;удаление выделенных символов в командной строке

[HKEY_CURRENT_USER\Software\Far2\KeyMacros\Common\ShiftDel]
"Sequence"="$If (Qview || Shell)
$If (!APanel.Visible) ShiftDel $Exit $End CtrlO ShiftDel CtrlO
$Else ShiftDel $End"
"DisableOutput"=dword:00000001
"NotEmptyCommandLine"=dword:00000001
Смотрите также:
Примеры


$If - Макросы

$If

главная | Макросы | Макроязык | Макрокоманды
Условный оператор $If позволяет организовать в макросах процесс ветвления макропоследовательности.
$If (Expr) TruePart [$Else FalsePart] $End

Элементы

Expr
Выражение
TruePart
Выполняется, если выражение Expr истинно.
FalsePart
Выполняется, если выражение Expr ложно.

Замечания

  1. Часть $Else можно не указывать.
  2. Если Expr строка и она не пуста, то выполняется TruePart, иначе FalsePart.

Пример

REGEDIT4

;для удобной навигации с нажатым Alt'oм

[HKEY_CURRENT_USER\Software\Far2\KeyMacros\Common\AltUp]
"Sequence"="$If (Viewer || Qview) Up $Else AltUp $End"
"DisableOutput"=dword:00000001
Будет напечатано "false":

$If ("") print("true") $else print("false") $End
$If (0) print("true") $else print("false") $End
Будет напечатано "true":

$If (123) print("true") $else print("false") $End
$If ("0") print("true") $else print("false") $End
$If ("abc") print("true") $else print("false") $End
Смотрите также:
iif(), Примеры


Операции - Макросы

Операции

главная | Макросы | Макроязык

Введение

Над значениями можно производить следующие операции:

Операция | Описание
+ | Числовое сложение или сцепление строк
- | Числовое вычитание или унарный минус
* | Числовое умножение
/ | Числовое деление. FAR прерывает исполнение макроса, если происходит деление на 0
& | Битовое умножение
^ | Битовое Исключающее ИЛИ (XOR)
| | Битовое сложение
<< | Битовый сдвиг влево
>> | Битовый сдвиг вправо
! | Логическое отрицание
~ | Битовое отрицание

Детальное описание

Для разбора операций определимся с определениями:

  • Int - целое число;
  • Dbl - вещественное число;
  • StrInt - строка, которая полностью преобразуется в Int;
  • StrDbl - строка, которая полностью преобразуется в Dbl;
  • Str - строка, которая не может быть полностью преобразована в Int или Dbl (собственно, просто набор символов).

В соответствии с этими определениями, там, где это возможно, происходит преобразование строки в число и выполнение операции.

Далее приведены таблицы, показывающие результаты работы операций над значениями A и B:

+ | B.Int | B.Dbl | B.StrInt | B.StrDbl | B.Str
A.Int | Int | Dbl | Int | Dbl | Str
A.Dbl | Dbl | Dbl | Dbl | Dbl | Str
A.StrInt | Int | Dbl | Int | Dbl | Str
A.StrDbl | Dbl | Dbl | Dbl | Dbl | Str
A.Str | Str | Str | Str | Str | Str

Здесь Str обозначает конкатенацию двух операндов.

- * / % | B.Int | B.Dbl | B.StrInt | B.StrDbl | B.Str
A.Int | Int | Dbl | Int | Dbl | A.Str
A.Dbl | Dbl | Dbl | Dbl | Dbl | A.Str
A.StrInt | Int | Dbl | Int | Dbl | A.Str
A.StrDbl | Dbl | Dbl | Dbl | Dbl | A.Str
A.Str | A.Str | A.Str | A.Str | A.Str | A.Str

Здесь A.Str - возвращается значение операнда A.

Для бинарных операций операнды Dbl или StrDbl предварительно преобразуется к Int.

| & ^ << >> | B.Int | B.Dbl | B.StrInt | B.StrDbl | B.Str
A.Int | Int | Int | Int | Int | A.Str
A.Dbl | Int | Int | Int | Int | A.Str
A.StrInt | Int | Int | Int | Int | A.Str
A.StrDbl | Int | Int | Int | Int | A.Str
A.Str | A.Str | A.Str | A.Str | A.Str | A.Str

Здесь A.Str - возвращается значение операнда A.

В операциях сравнения (==, !=, <, <=, >, >=) операнды преобразуются (там, где это возможно) и сравниваются.

В логических OR и AND операнды сравниваются как есть, строки не преобразуются в StrInt и StrDbl, а проверяются на не пустую строку.

Приоритеты операций в выражениях

Операция | Описание
! ~ - | Унарные (R->L)
* / | арифметические
+ - | арифметические
<< >> | Битовый сдвиг
< <= > => | Логическое сравнение
== != | Логическое сравнение
& | Битовая (and)
^ | Битовая (xor)
| | Битовая (or)
&& | Логическая (and)
^^ | Логическая (xor)
|| | Логическая (or)


$Rep - Макросы

$Rep

главная | Макросы | Макроязык | Макрокоманды
Оператор цикла $Rep позволяет организовать в макросах циклический процесс - "Выполнить Expr раз последовательность Sequence".
$Rep (Expr) Sequence $End

Элементы

Expr
Выражение, вычисляется однократно при инициализации цикла.
Sequence
Выполняется Expr раз.

Замечания

Цикл завершается, когда внутренний счётчик становится равным 0. Текущее значение счётчика содержится в константе RCounter.

Пример

<macro area="Common" key="AltX" flags="NotEmptyCommandLine|DisableOutput"
   description="выход из FAR'a">

<![CDATA[

$If (Editor && (Editor.State & 0x8)) F2 $End
$Rep (2)
  $If (!Shell) Esc $End
$End
F10

]]>

</macro>
Смотрите также:
$While, RCounter, $Break, $Continue, Примеры


$SelWord - Макросы

$SelWord

главная | Макросы | Макроязык | Макрокоманды
Оператор $SelWord позволяет выделить слово под курсором.
$SelWord
Смотрите также:
Примеры


$Text - Макросы

$Text

главная | Макросы | Макроязык | Макрокоманды
Оператор $Text предназначена для вставки произвольного текста.
$Text "string"

Элементы

string
Допускается применение следующих escape-последовательностей:
Формат | Описание
\" | Символ "
\' | Символ '
\\ | Символ '\'
\n | Переводу строки `\n'
\t | Табуляции `\t'
\a | bell
\b | `\b'
\f | `\f'
\v | `\v'
\N \NN \NNN | 8-ричный код символа
\xNN | 16-ричный код символа

Замечания

  1. Макрокоманда '$Text' позволяет сократить расход памяти при хранении длинной макропоследовательности, вставляющей некоторый текст, и сделать её более наглядной.
  2. Фразу "$Text" можно не указывать, т. е. произвольный текст в двойных кавычках макродвижок воспримет как $Text. Исключение составляет ситуация, когда после двойной кавычки идёт пробел - в этом случае "$Text" указывать обязательно.

Пример

<macro area="Shell" key="CtrlShiftF7" flags="NotEmptyCommandLine|DisableOutput"
   description="создание папки с именем = текущей дате">

%Folder=date("%d.%m0.%Y"); $If (!panel.fexist(0,%Folder)) F7 $Text %Folder Enter $End

</macro>
Смотрите также:
print(), Примеры


Переменные - Макросы

Переменные

главная | Макросы | Макроязык
Переменные позволяют вам задавать имена значениям и обращаться к ним позже. В макропоследовательности можно применять локальные и глобальные переменные.

Именование

Имя локальной переменной начинается с символа '%', за которым следуют буквы латинского алфавита, цифры и символ '_'.

Имя глобальной переменной начинается с двух символов '%%', за которым следуют буквы латинского алфавита, цифры, и символ '_'.

Имена регистронезависимые: '%myStr' и '%MYstr' - одна и та же переменная.

Присвоение значения переменной должно заканчиваться символом ';'

Типы

Переменные могут быть трёх типов - целое число, вещественное (разделитель целой и дробной частей - точка) или строка.

Целочисленные переменные: NNN - 10-ричная переменная, 0NNN - 8-ричная переменная, 0xNNN - 16-ричная переменная.

Целочисленные переменные 64-разрядные.

Переменные вещественные (с плавающей точкой) - двойной точности 64-разрядные (double).

Область действия

Область действия локальной переменной - текущая макропоследовательность.

Область действия глобальной переменной - текущий сеанс FAR.

Глобальные переменные можно записывать в специальную область Vars.

Из этой области FAR считывает глобальные переменные при старте.

Представление в базе

В базе глобальные переменные располагаются в таблице variables.

Каждая переменная имеет имя, значение и тип. Значение в базе всегда хранится в виде текста. Поле type уточняет тип содержимого в поле value:

  • text - строковые переменные
  • real - переменные с плавающей точкой
  • integer - целочисленные переменные

Преобразование чисел с плавающей точкой в строку осуществляется по формату "KeyMacros/CONVFMT". По умолчанию "%.6g"

Смотрите также:
Константы


$While - Макросы

$While

главная | Макросы | Макроязык | Макрокоманды
Оператор цикла $While позволяет организовать в макросах циклический процесс - "Пока условие Expr истинно выполнять последовательность Sequence".
$While (Expr) Sequence $End

Элементы

Expr
Выражение
Sequence
Выполняется, пока условие Expr истинно.

Примеры

  1. Если под курсором папка, то спозиционировать курсор на первый файл.
    $While (APanel.Folder && !APanel.Eof)
  Down
$End
  2. Организация оператора for: "for (выражение_1;выражение_2;выражение_3) оператор"
    выражение_1
$While (выражение_2)
  оператор
  выражение_3
$End
Смотрите также:
$Rep, $Break, $Continue, Примеры


$XLat - Макросы

$XLat

главная | Макросы | Макроязык | Макрокоманды
Оператор $XLat вызывает функцию транслитерации.
$XLat

Пример

<macro area="Shell" key="ShiftBS" flags="NotEmptyCommandLine|DisableOutput"
   description="XLAT переконвертация последнего слова">

CtrlShiftLeft $XLat CtrlRight

</macro>
Смотрите также:
xlat(), Примеры


Свойства и функции для работы с командной строкой - Макросы

Свойства и функции для работы с командной строкой

главная | Макросы | Макроязык | Свойства и функции: по областям

Логические свойства (тип: Boolean)

Свойство | Описание
CmdLine.Bof | курсор в начале командной строки
CmdLine.Eof | курсор в конце командной строки
CmdLine.Empty | командная строка пуста
CmdLine.Selected | выделен блок в командной строке

Свойства

Оператор | Тип | Описание
CmdLine.ItemCount | Number | количество символов в командной строке
CmdLine.CurPos | Number | текущая позиция курсора в командной строке
CmdLine.Value | String | содержимое командной строки

Функции

Функция | Описание
V=editor.sel(Action[,Opt]) | Функция позволяет производить некоторые операции с блоками в тексте (в редакторе, в строках ввода в диалогах, в командной строке). Подробности в описании свойств и функций для редактора.
Смотрите также:
Примеры


Свойства и функции зависящие от контекста исполнения - Макросы

Свойства и функции зависящие от контекста исполнения

главная | Макросы | Макроязык | Свойства и функции: по областям

Значение этих свойств и функций зависит от того, в каком контексте исполняется в данный момент макропоследовательность.

Логические свойства (тип: Boolean)

Свойство Описание
Bof
  • в панелях типа QView/Info/Tree - достигнуто начала файла в области просмотра;
  • в файловых панелях (текущая область Shell) - курсор в начале командной строки;
  • в редакторе и программе просмотра - достигнуто начало файла;
  • в строках ввода в диалогах - курсор в начале строки;
  • в списках/меню - указатель установлен на первом пункте (в пустом списке всегда 1).
Eof
  • в панелях типа QView/Info/Tree - достигнут конец файла в области просмотра;
  • в файловых панелях - курсор в конце командной строки;
  • в редакторе и программе просмотра - достигнут конец файла;
  • в строках ввода в диалогах - курсор в конце строки;
  • в списках/меню - указатель установлен на последнем пункте (в пустом списке всегда 1).
Empty
  • в панелях типа QView/Info/Tree - область просмотра пуста;
  • в файловых панелях - командная строка пуста;
  • в редакторе и программе просмотра пустой файл;
  • в строках ввода в диалогах - строка ввода пуста;
  • в списках/меню - список пуст.
Selected
  • в панелях типа QView - выделен блок в области просмотра файла;
  • в панелях типа Info - выделен блок в области просмотра файла описания папки;
  • в панелях типа Tree - не имеет смысла (всегда 0);
  • в файловых панелях - выделен блок в командной строке;
  • в редакторе и программе просмотра - выделен блок;
  • в строках ввода в диалогах - выделен блок.
  • в списках/меню - не имеет смысла (всегда 1, если меню не пустое).
Примечание: В QView, Info и программе просмотра блок может быть выделен при поиске.

Свойства

Оператор | Тип | Описание
ItemCount | Number | число элементов в текущем объекте; в меню разделительная черта тоже учитывается Примечание: Если текущий объект плагиновый диалог, то плагин может возвращать модифицированные данные (см. DN_GETVALUE)
CurPos | Number | позиция в текущем объекте Примечание: Если текущий объект плагиновый диалог, то плагин может возвращать модифицированные данные (см. DN_GETVALUE)

Функции

Функция | Описание
Pos=checkhotkey(S[,StartPos]) | Функция позволяет проверить и получить позицию элемента, для которого назначена горячая клавиша S. Работает в меню, списках и диалогах. Подробности в описании свойств и функций для меню и списков.
V=editor.sel(Action[,Opt]) | Функция позволяет производить некоторые операции с блоками в тексте (в редакторе, в строках ввода в диалогах, в командной строке). Подробности в описании свойств и функций для редактора.
Смотрите также:
Примеры


Свойства и функции для работы с диалогами - Макросы

Свойства и функции для работы с диалогами

главная | Макросы | Макроязык | Свойства и функции: по областям

Свойства

Оператор | Тип | Описание
Dlg.ItemCount | Number | количество элементов диалога
Dlg.CurPos | Number | номер текущего (фокусного) элемента диалога
Dlg.PrevPos | Number | номер предыдущего фокусного элемента диалога
Dlg.Info.Id | GUID | строковое представление идентификатора текущего диалога в формате "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" (см. GUID объектов)
Dlg.ItemType Number тип фокусного элемента диалога
Значение | Описание
-1 | Ошибка, например, Dlg.ItemType вызван не в диалоге
4 | Поле ввода
5 | Поле ввода пароля
6 | Поле ввода фиксированного размера
7 | Кнопка (Button)
8 | Контрольный переключатель (Check box)
9 | Селекторная кнопка (Radio button)
10 | Комбинированный список (Combo box)
11 | Окно списка (List box)*
255 | Элемент управления, определяемый программистом
0x8004 | Выбор из истории поля ввода*
0x800A | Выбор из комбинированного списка*

Функции

Функция Описание
V=Dlg.GetValue([Pos[,Type]])

Получить различные значения текущего диалога.

Pos - номер элемента диалога (0 - само диалоговое окно). Если параметр не указан или равен -1, то функция вернет значение для текущего фокусного элемента.

Type - тип получаемой информации, зависит от типа элемента. Если параметр не указан, то подразумевается, что Type=0.

Для самого диалога (Pos=0) допустимы следующие значения Type:

Type | Тип V | Описание
0 | Number | Количество элементов диалога
2 | Number | X1
3 | Number | Y1
4 | Number | X2
5 | Number | Y2
6 | Number | Pos текущего элемента, имеющего клавиатурный фокус ввода
Для элементов диалога допустимы следующие значения Type:
Type | Тип V | Элемент | Описание
0 | Number | Check box | Состояние переключателя
 | Number | Radio buttons | Состояние переключателя
 | String | List box | Значение текущего элемента списка
 | String | Combo box | Значение текущего элемента списка
 | String | Остальные | Текстовое значение (поле FarDialogItem.Data)
1 | Number | Все | Тип элемента
2 | Number | Все | X1 относительно диалога
3 | Number | Все | Y1 относительно диалога
4 | Number | Все | X2 относительно диалога
5 | Number | Все | Y2 относительно диалога
6 | Number | Все | элемент в фокусе? (0/1)
7 | Number | Check box | Состояние переключателя
 | Number | Radio buttons | Состояние переключателя
 | Number | List box | Текущая позиция в списке
 | Number | Combo box | Текущая позиция в списке
 | Number | Остальные | 0
8 | Number | Все | Флаги элемента
9 | Number | Все | Флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
10 | String | Остальные | Текстовое значение (поле FarDialogItem.Data)
11 | Number | List box | Количество элементов списка
 | Number | Combo box | Количество элементов списка
Возвращает -1, если Pos больше количества элементов диалога или значение Type не поддерживается.
Если текущий объект плагиновый диалог, то плагин может возвращать модифицированные данные (см. DN_GETVALUE).
N=Dlg.SetFocus([ID])

Функция позволяет установить фокус ввода на элемент с номером ID.

Если параметр ID не указан или равен 0, то возвращает номер текущего (фокусного) элемента.

Функция возвращает -1 (внутренняя ошибка или функция применена вне диалога), 0 (параметр ID содержит номер нефокусного элемента) или номер предыдущего фокусного элемента.
Pos=checkhotkey(S[,StartPos])

Функция позволяет проверить и получить позицию элемента, для которого назначена горячая клавиша S.

Подробности в описании cвойств и функций для меню и списков.
V=editor.sel(Action[,Opt])

Функция позволяет производить некоторые операции с блоками в тексте (в редакторе, в строках ввода в диалогах, в командной строке).

Подробности в описании свойств и функций для редактора.

Замечания

  1. Элементы диалога нумеруются с 1.
  2. Элементы списков нумеруются с 1.

  3. Для работы со списками можно использовать cвойства и функции для меню и списков.

    (Под списками понимаются такие элементы диалога, как "Окно списка", "Выбор из истории поля ввода", "Выбор из комбинированного списка").

Смотрите также:
Примеры


Свойства и функции для работы с редактором - Макросы

Свойства и функции для работы с редактором

главная | Макросы | Макроязык | Свойства и функции: по областям

Свойства

Оператор | Тип | Описание
Editor.FileName | String | полное имя редактируемого файла
Editor.Lines | Number | количество строк в редакторе
Editor.CurLine | Number | номер текущей строки
Editor.CurPos | Number | текущая позиция курсора в строке; учитывается размер табуляции
Editor.RealPos | Number | текущая позиция курсора в строке без привязки к размеру табуляции (табуляция считается за 1 символ)
Editor.Value Value

содержимое текущей строки в редакторе под курсором.

Например, показать текущий символ под курсором:

msgbox(substr(Editor.Value,Editor.CurPos-1,1),Editor.FileName,0)
Editor.SelValue String

содержимое выделенного блока.

Аналогично тому, как Far поместил бы в clipboard (блок текста с наличием crlf в конце строк).
Editor.State Number различные состояния текущего редактора - набор битовых флагов:
Значение | Описание
0x00000001 | файл совершенно новый либо его успели удалить
0x00000002 | разрешено переключение на программу просмотра по F6
0x00000004 | после закрытия редактора удалить файл
0x00000008 | редактируемый файл модифицирован (в статусной строке редактора присутствует символ '*')
0x00000010 | в наличии есть выделенный поточный блок (альтернативный вариант - функция Editor.Sel(0,4))
0x00000020 | в наличии есть выделенный вертикальный блок (альтернативный вариант - функция Editor.Sel(0,4))
0x00000040 | редактируемый файл изменялся в сеансе редактирования
0x00000080 | курсор в режиме замены
0x00000100 | позиция курсора была изменена плагином
0x00000200 | редактор заблокирован (ReadOnly)
0x00000400 | используются постоянные блоки
0x00000800 | модальный редактор
0x08000000 | FAR запущен с ключом /e
Например,
$If (Editor.State & 0x8) выполнить действия, если файл модифицирован $End

Функции

Функция | Описание
E=editor.undo(Action) Работа с Undo/Redo. Здесь N - одно из:
Action | Описание
0 | начало блочной операции
1 | конец блочной операции
2 | выполнить Undo
3 | выполнить Redo
Возвращает 1 для успешно выполненной операции или 0 в случае ошибки.
E=editor.settitle([Title])

Установка заголовка в статусной строке редактора.

Если параметр Title отсутствует или равен пустой строке, то восстанавливается предыдущее значение статусной строки.

При показе заголовок будет усечён до размера, не затрагивающего служебную информацию (кодировка, позиция, etc.)

Возвращает 1 для успешно выполненной операции или 0 - редактор не в фокусе.
N=editor.pos(Action,Object[,Value])

Получение/установка позиций в редакторе.

Параметр Action задаёт поведение функции:

Action | Описание | Возвращает (N)
0 | получить данные | текущее значение
1 | установить данные | 1/0 - успешно/неуспешно выполнена установка

Функция возвращает -1 в случае прочих ошибок (например, неверные параметры, или функция вызвана не из редактора).

Параметр Object - над чем выполняется операция:

Object | Описание
1 | строка
2 | положение курсора в строке
3 | экранная позиция курсора
4 | новая строка вверху экрана
5 | позиция левой границы окна редактора
6 | режим вставки

Пример см. в разделе Примеры.
V=editor.sel(Action[,Opt]) Функция позволяет производить некоторые операции с блоками в тексте (в редакторе, в строках ввода в диалогах, в командной строке).
Action Описание действия (в зависимости от значения Opt)
0 получить параметры текущего блока
0 | вернуть номер строки начала блока
1 | вернуть номер позиции в строке начала блока
2 | вернуть номер строки конца блока
3 | вернуть номер позиции в строке конца блока
4 | вернуть тип выделенного блока: 0 - блок не выделен, 1 - обычный блок, 2 - вертикальный блок (альтернативный вариант - свойство Editor.State)
1 позиционировать курсор внутри текущего блока
0 | установить курсор в начало отмеченного блока
1 | установить курсор в конец отмеченного блока

При позиционировании курсора состояние блока не изменяется.

2 установка позиций блока
0 | отметить позицию начала блока
1 | отметить позицию конца блока

Позицией начала/конца блока считается текущая позиция курсора.

Блок помечается только после указания конечной позиции (Opt=1), с ранее выделенного блока пометка снимается.

Если позиция начала и конца блока совпадают, то эта операция равносильна снятию пометки блока.

3 установка позиций вертикального блока
0 | отметить позицию начала вертикального блока
1 | отметить позицию конца вертикального блока

Позицией начала/конца блока считается текущая позиция курсора.

Блок помечается только после указания конечной позиции (Opt=1), с ранее выделенного блока пометка снимается.

Если позиция начала и конца блока совпадают, то эта операция равносильна снятию пометки блока.

4

снять выделение с блока.

Параметр Opt игнорируется.

Всегда возвращается 1.

В случае ошибки (в т. ч. функция вызвана не из "редактора") возвращаемое значение равно 0, иначе 1.

Для Action=0 возвращается запрошенное значение.

Например, повторим некоторые сочетания клавиш из Turbo-сред (макрос на сочетание Ctrl-K):

%k=waitkey(0,1);
$if(%k==B || %k==b || %k==CtrlB)
  editor.sel(2,0)
$else
  $if(%k==K || %k==k || %k==CtrlK)
    editor.sel(2,1)
  $else
    $if((%k==C || %k==c || %k==CtrlC) && Selected)
      CtrlC
    $else
      $if((%k==Y || %k==y || %k==CtrlY) && Selected)
        CtrlD
      $else
        eval("F1")
      $end
    $end
  $end
$end
V=editor.set(Option[,Value]) Получить/изменить настройки текущей копии редактора.
Option | Тип Value | Описание
0 | Number | Размер табуляции
1 | Number | Преобразование табуляции: 0 - не преобразовывать табуляцию 1 - преобразовывать все символы табуляции в пробелы 2 - преобразовывать новые символы табуляции в пробелы
2 | Number | Постоянные блоки
3 | Number | Клавиша Delete удаляет блоки. Если есть помеченный блок, Delete будет удалять этот блок, а не символ под курсором.
4 | Number | Автоотступ. Включает режим автоотступа при вводе текста.
5 | Number | Автоопределение таблицы символов
7 | Number | Разрешить перемещение курсора за пределы строки
8 | Number | Поведение клавиши BackSpace (TechInfo #13). Задает поведение клавиши BackSpace в редакторе, когда выделен вертикальный блок. Если значение отлично от 0, то BackSpace удаляет вертикальный блок подобно клавише Delete.
9 | Number | Представление кода символа под курсором в статусной строке (TechInfo #32) Может принимать следующие значения: 0 - восьмеричное значение (3 символа с ведущим нулями) 1 - десятеричное значение (3 символа с ведущими пробелами) 2 - шестнадцатеричное значение (2 символа под цифру + символ 'h')
10 | Number | Сохранять позицию файла
11 | Number | Сохранять закладки
12 | String | Символы разделители слов (TechInfo #1) По умолчанию: ~!%^&*()+|{}:"<>?`-=\[];',./
14 | Number | AllowEmptySpaceAfterEof (TechInfo #67) Окончание файла в редакторе всегда находится внизу экрана, если строк в файле больше чем строк экрана. При построчном скроллировании вниз (например, с помощью Ctrl-Down), скроллирование прекращается, когда показывается последняя строка. Value может принимать следующие значения: 0 - прекратить скроллинг, если последняя строка внизу экрана 1 - продолжать скроллинг, при этом: a) поместить курсор за пределы файла по прежнему нельзя b) скроллинг с помощью Ctrl-Down сдвинет текст до курсора
15 | Number | Показать полосу прокрутки в редакторе
16 | Number | Редактировать открытые на запись файлы
17 | Number | Выделять найденное - найденные последовательности будут выделены.
18 | Number | Вести поиск с использованием регулярных выражений
19 | Number | Cлово под курсором. При вызове диалога поиска/замены в строку поиска будет подставляться слово, на котором стоит курсор.
20 | Number | Показывать в редакторе пробельные символы.

Значение Value может быть опущено или равно -1, в этом случае функция ничего не изменит, а вернёт текущее значение настройки.

Возвращает предыдущее значение опций или -1, если данные указаны некорректно, или функция вызвана не из редактора.

Значения опции 16 изменить нельзя.

Например, макрос, перемещающий выделенный фрагмент на одну строку вниз (сохраняет выделение вне зависимости от настрок постоянных блоков):

clip(5) CtrlX %a=editor.set(2,1); Down CtrlV %a=editor.set(2,%a);
N=editor.delline([Line])

Удаление строки с номером Line. Если Line не указан или меньше 1, то удаляется текущая строка.

Возвращает 1 для успешно выполненной операции или 0 - если редактор не в фокусе/редактор залочен/нет строки с запрашиваемым номером.
S=editor.getstr([Line])

Получить содержимое строки с номером Line. Если Line не указан или меньше 1, то возвращается текущая строка.

Возвращает строку с запрашиваемым номером.
N=editor.insstr([S[,Line]])

Вставить значение S после строки с номером Line. Если S не указан, то вставляется пустая строка. Если Line не указан или меньше 1, то вставляется в текущую строку.

Возвращает 1 для успешно выполненной операции или 0 - если редактор не в фокусе/редактор залочен/нет строки с запрашиваемым номером.
N=editor.setstr([S[,Line]])

Заменить строку с номером Line на значение S. Если S не указан, то строка будет пустой. Если Line не указан или меньше 1, то заменяется текущая строка.

Позиция курсора в редакторе не меняется.

Возвращает 1 для успешно выполненной операции или 0 - если редактор не в фокусе/редактор залочен/нет строки с запрашиваемым номером.

Удаление пустых строк:

$If(Selected)
  %StartLine=Editor.Sel(0, 0);
  %EndLine=Editor.Sel(0, 2);
$Else
  %StartLine=1;
  %EndLine=Editor.Lines;
$End

%Count=%EndLine-%StartLine+1;
%i=%StartLine;
Editor.Undo(0);
$Rep(%Count)
  $If(Len(Trim(Editor.GetStr(%i)))==0)
    Editor.DelLine(%i);
  $Else
    %i=%i+1;
  $End
$End
Editor.Undo(1);
Стековые закладки
Функция | Описание
E=bm.push() | Добавить закладку с текущими параметрами.
E=bm.pop() | Восстановить параметры из последней закладки и удалить её.
E=bm.add() | Добавить закладку с текущими параметрами и обрезать "хвост" (все закладки с индексом больше текущего).
E=bm.del([Idx])

Удалить закладку с указанным индексом Idx.

Если параметр Idx не указан или равен 0 - удаляется текущая закладка.
E=bm.clear() | Очистить все закладки.
E=bm.next() | Перейти на следующую закладку.
E=bm.prev() | Перейти на предыдущую закладку.
E=bm.back()

Перейти на предыдущую закладку.

Если непосредственно перед ней была вызвана bm.add - добавить перед переходом закладку с текущими параметрами.

N=bm.goto([Idx])

Перейти на закладку с указанным индексом Idx.

Если параметр Idx не указан или равен 0 - переход на текущую закладку.

N=bm.get(Idx,Param)

Получить параметры закладки с индексом Idx. Idx=0 - текущая закладка.

Параметр Param может быть одним из следующих:

Param | Описание
0 | номер текущей строки
1 | номер текущей колонки
2 | номер первой видимой колонки на экране
3 | номер первой видимой строки на экране
N=bm.stat([Param])

Получить информацию о закладках.

Параметр Param может быть одним из следующих:

Param | Описание
0 | текущее количество закладок
1 | индекс текущей закладки (возвращает 0 если закладок нет)

Пример работы с закладками:

Для редактируемого файла newarc.ModuleManager.cpp вставляет в начало
#ifndef __NEWARC_MODULEMANAGER_CPP__
#define __NEWARC_MODULEMANAGER_CPP__
в конец
#endif //! __NEWARC_MODULEMANAGER_CPP__
при наличии строки "#pragma once" в начале файла, строки вставляются после неё.

%d = "__" + UCase(Replace(FSplit(Editor.FileName,12),".","_"))+"__";
bm.add()
CtrlHome
$If (LCase(Trim(Editor.Value))=="#pragma once")
  Down
$End
print("#ifndef " + %d + "\n\t#define " + %d + "\n")
CtrlEnd
Enter
Home
print("#endif //! " + %d + "\n")
bm.next()
bm.del()

Замечания

  1. Нумерация строк в редакторе начинается с 1.
  2. Нумерация колонок (позиций курсора в строке) начинается с 1.
  3. Нумерация закладок начинается с 1.
Смотрите также:
Примеры


Общие свойства и функции - Макросы

Общие свойства и функции

главная | Макросы | Макроязык | Свойства и функции: по областям

Эти свойства и функции не зависят от области, в которой исполняется в данный момент макропоследовательность.

Логические свойства (тип: Boolean)

Проверка области, в которой исполняется в данный момент макропоследовательность

Свойство | Описание
Shell | файловые панели
Info | информационная панель
QView | панель быстрого просмотра
Tree | панель дерева папок
Search | быстрый поиск в панелях
FindFolder | поиск папок
Viewer | внутренняя программа просмотра
Editor | редактор
Dialog | диалоги
Menu | прочие меню
MainMenu | основное меню
UserMenu | пользовательское меню
Disks | меню выбора дисков
Help | система помощи
AutoCompletion | список автодополнения
Other | режим копирования текста с экрана

Разное

Свойство | Описание
IsUserAdmin | Far Manager запущен под Администратором?
Fullscreen | Far Manager работает в оконном режиме?

Свойства

Оператор | Тип | Описание
Macro.Area | String | наименование текущей макрообласти исполнения
Far.Width | Number | ширина консоли, в которой работает Far Manager
Far.Height | Number | высота консоли, в которой работает Far Manager
Far.Title | String | текущий заголовок консольного окна Far Manager
Far.UpTime | Number | сколько времени (в миллисекундах) работает Far Manager (своё значение для каждой запущенной копии)
Far.PID | Number | содержит ИД текущей запущенной копии Far Manager
Far.Cfg.Err | Number | Индикатор ошибки после вызова Far.Cfg.Get: =0 - нет ошибок, =1 - ошибка. Значение константы необходимо проверять сразу после вызова функции Far.Cfg.Get, в других случаях значение константы не имеет смысла.
Title | String | заголовок текущего объекта
RCounter | Number | Содержит текущее значение счётчика оператора цикла $Rep. Область видимости - текущий $Rep. За пределами цикла значение константы неопределённое (любое / нет смысла использовать).

Мышь

Оператор | Тип | Описание
MsX | Number | Координата горизонтального положения курсора мыши с момента последнего поступления мышиного события
MsY | Number | Координата вертикального положения курсора мыши с момента последнего поступления мышиного события
MsButton Number

Состояние клавиш мыши.

Младший бит соответствует самой левой кнопке, следующий - самой правой, cледующий бит - следующая за левой клавиша. Далее биты соответствуют клавишам слева направо.

Если бит установлен - клавиша нажата.

Определены следующие константы для первых пяти клавиш мыши:

Значение | Описание
0x0001 | FROM_LEFT_1ST_BUTTON_PRESSED
0x0002 | RIGHTMOST_BUTTON_PRESSED
0x0004 | FROM_LEFT_2ND_BUTTON_PRESSED
0x0008 | FROM_LEFT_3RD_BUTTON_PRESSED
0x0010 | FROM_LEFT_4TH_BUTTON_PRESSED
MsCtrlState Number Состояние управляющих клавиш. Может быть комбинацией следующих значений:
Значение | Описание
0x0001 | RIGHT_ALT_PRESSED
0x0002 | LEFT_ALT_PRESSED
0x0004 | RIGHT_CTRL_PRESSED
0x0008 | LEFT_CTRL_PRESSED
0x0010 | SHIFT_PRESSED
0x0020 | NUMLOCK_ON
0x0040 | SCROLLLOCK_ON
0x0080 | CAPSLOCK_ON
0x0100 | ENHANCED_KEY
MsEventFlags Number Состояние событий мыши:
Значение | Описание
0x0001 | MOUSE_MOVED Перемещение мыши
0x0002 | DOUBLE_CLICK Двойной клик клавиши мыши
0x0004 | MOUSE_WHEELED Перемещение колеса по вертикали
0x0008 | MOUSE_HWHEELED Перемещение колеса по горизонтали

Функции

Математические функции

Функция | Описание
N=abs(V) | Возвращает абсолютную величину числового аргумента V.
N=max(N1,N2) | Возвращает максимальное значение между двумя числовыми аргументами N1 и N2.
N=min(N1,N2) | Возвращает минимальное значение между двумя числовыми аргументами N1 и N2.
N=mod(N1,N2) | Деление N1 по модулю N2.
N=int(V) | Приведение значения выражения V к числу.
N=float(V) | Приведение значения выражения V к числу с плавающей точкой.
V=iif(Expr,True,False) | Условный оператор. Если условие Expr верно, то возвращается True-выражение, иначе False-выражение. Если Expr строка и она не пуста, то возвращается True-выражение, иначе False-выражение.

Строковые функции

Функция | Описание
N=index(S1,S2[,CaseSensitive])

Если подстрока S2 содержится в строке S1, то возвращается её позиция, иначе -1.

Необязательный параметр CaseSensitive задаёт режим сравнения: 0 (по умолчанию) - без учёта регистра, 1 - с учётом регистра.
N=rindex(S1,S2[,CaseSensitive])

Если подстрока S2 содержится в строке S1, то возвращается её позиция, иначе -1.

Поиск ведётся от конца строки S1.

Необязательный параметр CaseSensitive задаёт режим сравнения: 0 (по умолчанию) - без учёта регистра, 1 - с учётом регистра.
Result=replace(Str,Find,Replace[,Cnt[,CaseSensitive]])

В строке Str заменить подстроку Find на подстроку Replace Cnt раз.

Если параметр Cnt меньше или равен 0, либо опущен, то будут заменены все вхождения Find.

Возвращается результат замены.

Необязательный параметр CaseSensitive задаёт режим сравнения: 0 (по умолчанию) - без учёта регистра, 1 - с учётом регистра.

Замечания:

  • если Find - пустая строка, то возвращается Str без преобразований;
  • если Replace - пустая строка, то возвращается копия Str, в которой удалены все подстроки Find;
N=asc(S) | Возвращает код символа S.
S=chr(N) | Возвращает символ, заданный кодом N.
S=itoa(N[,Radix])

Конвертирует целое число N в строку.

Значение Radix определяет основание, которое должно использоваться при преобразовании числа N. Допустимые значения Radix от 2 до 36.

Если параметр Radix не указан, то подразумевается основание 10.
N=atoi(S[,Radix])

Конвертирует строку S в число.

Значение Radix определяет основание, которое будет использоваться при преобразовании строки S. Допустимые значения Radix от 2 до 36.

Если параметр Radix не указан или равен 0, то функция попытается сама определить, в каком виде представлено строковое представление числа.
N=len(S) | Возвращает длину строки S.
S=string(V) | Перевод значения выражения V в строку.
S=substr(V,start[,length])

Возвращает подстроку из выражения V начиная с позиции start длиной length.

Если start >= 0, то вернётся подстрока, начиная с позиции start от начала строки.

Если start < 0, то вернётся подстрока, начиная с позиции start от конца строки.

Если length > 0, то возвращаемая подстрока будет состоять максимум из length символов исходной строки начиная с позиции start.

Если length < 0, то в возвращаемой подстроке будет отсутствовать length символов от конца исходной строки, при том, что она будет начинаться с позиции start.

Если length = 0 или не указан, то возвращается подстрока от start до конца строки.

Примеры

Вызов | Результат
substr("abcdef", 1) | возвращает "bcdef"
substr("abcdef", 1, 3) | возвращает "bcd"
substr("abcdef", 0, 4) | возвращает "abcd"
substr("abcdef", 0, 8) | возвращает "abcdef"
substr("abcdef", -1) | возвращает "f"
substr("abcdef", -2) | возвращает "ef"
substr("abcdef", -3, 1) | возвращает "d"
substr("abcdef", 0, -1) | возвращает "abcde"
substr("abcdef", 2, -1) | возвращает "cde"
substr("abcdef", 4, -4) | возвращает ""
substr("abcdef", -3, -1) | возвращает "de"
S=size2str(Size,Flags[,Width])

Функция форматирует число Size (например, размера файла) по заданным условиям, указанным в Flags, шириной Width.

Параметр Flags может быть комбинацией следующих значений:
Значение | Описание
0x0010000000000000 | Добавлять суффиксы: K - для килобайтов, M - для мегабайтов, G - для гигабайтов, T - для терабайтов, P - для петабайтов, E - для эксабайтов
0x0800000000000000 | Вставлять разделитель между тысячами. Используется значение "Interface/FormatNumberSeparators" из конфигурации или значения OS (LOCALE_STHOUSAND & LOCALE_SDECIMAL), если FormatNumberSeparators не указан.
0x0080000000000000 | Показывать размер файла в стиле Windows Explorer (т.е. 999 байт будут показаны как 999, а 1000 байт как 0.97 K)
0x0040000000000000 | Экономичный режим, не показывать пробел перед суффиксом размера файла (т.е. 0.97K)
0x0400000000000000 | Вместо делителя 1024 использовать делитель 1000.
0x0020000000000000 | Использовать минимально допустимый индекс при форматировании. Индекс указывается в в младшем байте и может быть только 0, 1, 2 или 3 (K,M,G,T). Например, 0x0020000000000001 означает "размер как минимум в мегабайтах".

Если Width не указан или равен 0, то подразумевается - "сколько получится". Отрицательное значение ширины позволяет выравнивать слева:
Вызов | Результат
Size2Str(123,0, 5) | ' 123'
Size2Str(123,0,-5) | '123 '
S=strwrap(Text,Width[,Break[,Flags]])

Форматирует (с выравниваением влево) исходный текст Text по заданной ширине Width, используя разделительную строку Break.

Если Flags равен 0x1, то строка всегда сворачивается по заданной ширине, даже если есть слово, которое больше заданной ширины (в этом случае то оно будет разрезано на части). Если флаг не указан или не равен 0x1 и есть длинное слово, то такое слово не будет разрезано и займет ширину больше чем указано в Width.

Примеры

Вызов Результат
StrWrap("Пример строки, которая будет разбита на несколько строк по ширине в 7 символов.", 7)
 +-------+
 |Пример
 |строки,
 |которая
 |будет
 |разбита
 |на
>|несколько
 |строк
 |по
 |ширине
 |в 7
>|символов.
 +-------+
StrWrap("Пример строки, которая будет разбита на несколько строк по ширине в 7 символов.", 7,,1)
  1234567
 +-------+
 |Пример
 |строки,
 |которая
 |будет
 |разбита
 |на
 |несколь
 |ко
 |строк
 |по
 |ширине
 |в 7
 |символо
 |в.
 +-------+
StrWrap("Эта строка содержит оооооооооооооччччччччеееень длиное слово", 9,,0x1)
  123456789
 +---------+
 |Эта
 |строка
 |содержит
 |ооооооооо
 |ооооччччч
 |чччеееень
 |длиное
 |слово
 +---------+
S=strpad(V,Size[,Fill[,Op]])

Функция возвращает строку V, дополненную до заданной длины Size строкой Fill (по умолчанию пробелами). Способ дополнения зависит от параметра Op:

Op | Описание
0 | заполнение слева от V
1 | заполнение справа от V
2 | заполнение вокруг V

Если Size меньше или равна длине V либо опущена, то дополнения не происходит (возвращается V).

Если разность Size и длины V не делится без остатка на длину Fill, дополняющая строка обрезается справа.

Примеры:

Вызов | Результат
strpad("Foo",10,"*",2) | '***Foo****'
strpad("",10,"-*-",2) | '-*--*--*--'
strpad(,10,"-*-") | '-*--*--*--'
strpad("Foo",10) | 'Foo '
strpad("Foo",10,"-") | 'Foo-------'
strpad("Foo",10,,1) | ' Foo'
strpad("Foo",10,,2) | ' Foo '
strpad("Foo",10,"1234567890",1) | '123Foo1234'
S=trim(V[,N]) | Удаляет все пробельные символы (пробелы, табуляции, переводы строк и возвраты каретки) из строки V снаружи (N=0 или не указан), слева (N=1) или справа (N=2).
S=xlat(S[,Flags])

Возвращает транслитерируемую строку S.

Функция аналогична макрокоманде $XLat, но используется в выражениях. Необязательный аргумент Flags позволяет уточнять поведение функции:

Flags | Описание
1 | переключить раскладку клавиатуры
2 | издать системный звук
S=lcase(S) | Преобразует строку S в нижний регистр.
S=ucase(S) | Преобразует строку S в верхний регистр.
S=date([format])

Возвращает текущую дату/время по формату format. Этот формат подобен тому, что выдаёт утилита date (Unix).

Функция поддерживает следующую спецификацию формата даты (подобен формату функции strftime):

Формат | Описание
%% | символ %
%a | Краткое имя дня недели (Sun или Вск)
%A | Полное имя дня недели (Sunday или Воскресенье)
%b | Краткое имя месяца (Jan или Янв)
%B | Полное имя месяца (January или Январь)
%c | Дата и время в формате WDay Mnt Day HH:MM:SS yyyy (Mon Jan 10 04:11:54 2000 или Пнд Янв 10 04:11:54 2000)
%C | Столетие как десятичное число (00-99). 1992 => 19
%d | Две цифры дня месяца (01-31)
%D | Синоним для %x
%e | Синоним для %d, но вместо ведущего нуля будет стоять пробел.
%h | Синоним для %b
%H | Две цифры часа (00-23)
%I | Две цифры часа (01-12)
%j | Три цифры дня в году (001-366)
%k | Синоним для %H, но вместо ведущего нуля будет стоять пробел.
%l | Синоним для %I, но вместо ведущего нуля будет стоять пробел.
%L | Триггер, переключающий язык названий месяцев и дней недели - английский/локальный. Far Manager запрашивает у системы 2 набора наименований: 1) английские наименования месяцев и дней недели 2) наименования, соответствующие настройкам текущего пользователя (LOCALE_USER_DEFAULT) По умолчанию выставляются английские наименования.
%m | Месяц, как десятичное число (1-12)
%m0 | Подобно %m, но с ведущим нулём (01-12)
%mh | Одна цифра месяца, как шестнадцатеричное число (1-C)
%M | Две цифры минут (00-59)
%n | Подобно переводу строки `\\n' Внимание! В редакторе автоотступ не работает.
%p | AM или PM
%r | Подобно %I:%M:%S %p
%R | Подобно %H:%M
%S | Две цифры секунд (00-59)
%t | Подобно символу табуляции `\\t'
%T | Синоним %X
%U | Две цифры номера недели, где Воскресенье (Sunday) является первым днём недели (00-53)
%v | Дата в формате dd-mmm-yyyy (mmm - в верхнем регистре)
%V | Неделя года в соответствии с ISO 8601: Если неделя, содержащая 1 Января, имеет >= 4 дней в течение нового года, тогда это неделя 1; в противном случае это самая последняя нумерованная неделя прошлого года (52 или 53)
%w | День недели где 0 - Воскресенье (Sunday) (0-6)
%W | Две цифры номера недели, где Понедельник (Monday) является первым днём недели (00-53)
%x | Дата в формате подобно dd<sep>mm<sep>yyyy (разделитель <sep> зависит от локальных настроек; порядок дня, месяца и года зависит от локальных настроек)
%X | Время в формате HH<sep>MM<sep>SS (разделитель <sep> зависит от локальных настроек)
%y | Две цифры года без столетия (00-99)
%Y | Год со столетием (19yy-20yy)
%Z | Имя часового пояса или пусто, если часовой пояс не задан
В функции date допускается применение следующих escape-последовательностей:
Формат | Описание
\" | Символ "
\' | Символ '
\\ | Символ '\'
\n | Перевод строки `\n'
\t | Символ табуляции `\t'
\a | bell
\b | `\b'
\f | `\f'
\v | `\v'
\N \NN \NNN | 8-ричные символы из OEM кодировки
\xNN | 16-ричные символы из OEM кодировки
Если аргумент format не указан, то Far Manager будет использовать форматную строку "%a %b %d %H:%M:%S %Z %Y" (см.).

Файловые функции

Функция Описание
S=fsplit(path,Flags) Разбивает путь path на компоненты и возвращает их комбинацию, в зависимости от набора флагов Flags:
Флаги | Описание
0x00000001 | Текущий диск в формате "C:". Для сетевых папок - "\\server\share"
0x00000002 | Путь в формате "\Program Files\Far\"
0x00000004 | Имя
0x00000008 | Расширение в формате ".EXT" или пусто, если расширения нет.
B=fexist(S)

Проверяет существование файла/папки S (возвращает 0 или 1).

В параметр S допускается использование символов '*' и '?'. В этом случае функция проверяет только первое вхождение файла/папки.

В отличии от panel.fexist(), функция не работает с панелями.
N=testfolder(S)

Тестирует папку S.

Возвращает:

Значение | Описание
2 | папка не пустая
1 | папка пустая
0 | папка не существует
-1 | нет доступа
-2 | ошибка (некорректный параметр или внутренние проблемы с выделением памяти)

Если > 0 - существует и доступна

Если = 0 - не существует, но можно попробовать создать

Если < 0 - ничего обнадеживающего функция не сообщает
b=fattr(S)

Возвращает файловые атрибуты файла/папки S:

Атрибут | Описание
0x00000001 | FILE_ATTRIBUTE_READONLY. Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его.
0x00000002 | FILE_ATTRIBUTE_HIDDEN. Файл скрыт. Такой файл не включается в обычный листинг папки.
0x00000004 | FILE_ATTRIBUTE_SYSTEM. Этот файл - часть операционной системы.
0x00000010 | FILE_ATTRIBUTE_DIRECTORY. Это папка.
0x00000020 | FILE_ATTRIBUTE_ARCHIVE. Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления.
0x00000080 | FILE_ATTRIBUTE_NORMAL. У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов.
0x00000100 | FILE_ATTRIBUTE_TEMPORARY. Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удалён.
0x00000200 | FILE_ATTRIBUTE_SPARSE_FILE. Файл является разрежённым.
0x00000400 | FILE_ATTRIBUTE_REPARSE_POINT. Папка является точкой повторной обработки.
0x00000800 | FILE_ATTRIBUTE_COMPRESSED. Файл или папка сжаты. Для файла это означает, что все данные его сжаты, для папки - что компрессия по умолчанию применяется ко всем её файлам и подпапкам.
0x00001000 | FILE_ATTRIBUTE_OFFLINE. Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения.
0x00002000 | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED. Этот файл или папка не будут индексироваться службой индексирования.
0x00004000 | FILE_ATTRIBUTE_ENCRYPTED. Файл или папка зашифрованы. Для файла это означает, что все данные в файле зашифрованы. Для папки это означает, что шифрование является умолчанием для вновь созданных файлов и подпапок.
0x00010000 | FILE_ATTRIBUTE_VIRTUAL. Этот файл - виртуальный файл.

Если файловый объект не существует, функция возвращает -1.

В параметре S допускается использование символов масок '*' и '?'. В этом случае функция возвращает атрибуты только для первого найденного файла/папки.

В отличии от panel.fattr(), функция не работает с панелями.
N=fmatch(S,Mask)

Тестирует строку S на соответствие маске Mask.

Mask может быть:

- маской

- списком масок (разделённых запятой или точкой с запятой)

- маской исключения - одной или несколькими масками файлов, которой не должна соответствовать строка S. Маска исключения отделяется от основной маски символом |

- регулярным выражением. Текст регулярного выражения должен быть окружён символами /

Возвращает:

Значение | Описание
1 | строка соответствует маске
0 | строка не соответствует маске
-1 | ошибка в регулярном выражении

Примеры

Вызов | Результат
FMatch("Readme.txt", "*.txt") | возвращает 1
FMatch("Readme.txt", "Readme.*|*.txt") | возвращает 0
FMatch(@"c:\Readme.txt", @"/txt$/i") | возвращает 1
FMatch(@"c:\Readme.txt", @"/txt$") | возвращает -1

Взаимодействие с пользователем

Функция Описание
E=beep([N]) Воспроизвести один из системных звуковых сигналов N.
N | Описание
0x00000040 | Звук Звёздочка
0x00000030 | Звук Восклицание
0x00000010 | Звук Критическая ошибка
0x00000020 | Звук Вопрос
0x0 | Стандартный звук
0xFFFFFFFF | Стандартный звук на встроенный динамик
Функция возвращает 1 или 0 (в случае неудачи).
N=msgbox([Title[,Text[,Flags]]])

Показывает сообщение Text с заголовком Title.

В параметре Text строки разбиваются символом '\n'.

Flags может быть набором следующих значений:

Flags | Описание
0x00000001 | Используются цвета "Предупреждения" (обычно белые буквы на красном фоне).
0x00000008 | Использовать для строк сообщения выравнивание влево (по умолчанию строки выводятся по центру).
0x00010000 | Выводится кнопка <Ok>
0x00020000 | Выводятся кнопки <Ok> и <Cancel>
0x00030000 | Выводятся кнопки <Abort>, <Retry> и <Ignore>
0x00040000 | Выводятся кнопки <Yes> и <No>
0x00050000 | Выводятся кнопки <Yes>, <No> и <Cancel>
0x00060000 | Выводятся кнопки <Retry> и <Cancel>

Если параметр Flags равен 0 (или не указан), то выводится стандартный диалог с кнопкой <Ok>

Функция возвращает номер выбранной кнопки (начиная с 1), или 0, если пользователь отменил сообщение
S=prompt([Title[,Prompt[,Flags[,Src[,History]]]]])

Функция позволяет ввести одну строку текста.

Параметры: Title - заголовок диалога, Prompt - приглашения для ввода, Src - начальное значение строки ввода, History - имя истории ввода.

Flags может быть набором следующих значений (аналогичных константам FIB_*):

Flags | Описание
0x00000001 | Даже если строка ввода пуста, функция вернёт значение (пустую строку).
0x00000002 | Используется для ввода пароля - вводимый текст на экране отрисовывается символами '*'.
0x00000004 | После успешного ввода, в результирующем значении S идентификаторы переменных окружения заменяются на их значения, например, если пользователь ввёл '%TEMP%', то результат будет содержать 'C:\TEMP'.
0x00000008 | Не использовать предыдущее значение из истории, оставить строку ввода пустой; актуален, если указан непустой параметр History.
0x00000010 | Показать разделительную линию и кнопки [ Ok ] и [ Cancel ]. Диалог увеличится на 2 строки.
0x00000020 | Не показывать в приглашении ввода амперсанд, использовать его для определения горячей клавиши.

Функция возвращает строку (введённое пользователем значение) или число 0, если пользователь нажал Esc.

Например, запросить пароль и вывести его:

%s=prompt("Password","Input password:",0x02); print(%s)
E=print(Str)

Функция предназначена для вставки произвольного текста Str в редактор, командную строку, элементы ввода в диалогах, etc.

Допускается применение следующих escape-последовательностей:

Формат | Описание
\" | Символ '"'
\' | Символ '''
\\ | Символ '\'
\n | Переводу строки `\n'
\t | Табуляции `\t'
\a | bell
\b | `\b'
\f | `\f'
\v | `\v'
\N \NN \NNN | 8-ричный код символа
\xNN | 16-ричный код символа

Функция возвращает 1.

Например, создание папки с именем, равным текущей дате:

%Folder=date("%d.%m0.%Y");
$If (!panel.fexist(0,%Folder))
  F7
  print(%Folder)
  Enter
$End
V=waitkey([N[,T]])

Ожидает любую клавишу и возвращает её название (T=0) или значение (T=1).

Если время ожидания N (миллисекунды) истекло, функция возвращает пустую строку (T=0) или 0 (T=1).

Если параметр N не указан или равен 0, то функция будет бесконечно ждать нажатия клавиши.
S=key(V)

Преобразует параметр V в строковый эквивалент названия клавиши.

Если V - строка, то проверяется правильность написания клавиши и она же возвращается.

Если V - число, то происходит попытка преобразовать значение в текстовый эквивалент названия клавиши.

В случае ошибок - возвращается пустая строка.

Взаимодействие с системой

Функция Описание
S=env(Name[,Mode[,Value]])

Позволяет работать с переменной среды Name. Если Mode не указан или равен 0, то функция возвращает значение переменной среды (Value в этом случае игнорируется). Если Mode указан и отличен от 0, то функция устанавливает значение или удаляет переменную среды.

Для варианта установки/удаления функция возвращает предыдущее значение (или пустую строку, если переменная была не определена).

Напримеры.

Получить значение переменной среды Foo

Env("Foo")
Env("Foo",0)
Env("Foo",0,любое_значение)
Env("Foo",,любое_значение)

Установить значение переменной среды Foo в "bar"

Env("Foo",1,"Bar")

Удалить переменную среды Foo

Env("Foo",1)
Env("Foo",1,"")

Установить значение переменной среды Foo в "0"

Env("Foo",1,"0")
Env("Foo",1,0)

Если выбран английский язык интерфейса Far Manager, то что-то делаем

$if (Env("FARLANG") == "English") что-то делаем $end
V=clip(Cmd[,Value]) Позволяет производить разнообразные манипуляции с Clipboard в зависимости от заданного действия Action:
Action | Описание
0 | Возвращает данные из Clipboard; параметр Value игнорируется; в случае ошибки возвращает 0
1 | Поместить строку Value в Clipboard; в случае ошибки возвращает 0
2 | Добавить строку Value к Clipboard; в случае ошибки возвращает 0
3 | Копировать Windows Clipboard во внутренний буфер обмена; параметр Value игнорируется; в случае ошибки возвращает 0
4 | Копировать внутренний буфер обмена в Windows Clipboard; параметр Value игнорируется; в случае ошибки возвращает 0
5

Режимы работы с буфером обмена.

По умолчанию в операциях запоминания/вставки данных Far Manager работает с буфером обмена Windows.

Функция 'clip(5)' позволяет в пределах одного макроса переключать внутренние механизмы Far Manager для работы с/без использования буфера обмена Windows.

Value может быть одним из:

Value | Описание
-1 | Какой буфер обмена сейчас используется
0 | Переключить работу с буфера обмена OS на внутренний буфер и наоборот (работает как триггер).
1 | Включить буфер обмена OS
2 | Включить внутренний буфер обмена

Функция возвращает предыдущее значение: 1 - буфер обмена OS, 2 - внутренний буфер.

Пример см. в разделе Примеры.

Например, поместить в Clipboard список отмеченных файлов в формате CSV (имя и размер):
сlip(1,"Name;Size\r\n")
Home
$While(!APanel.Eof)
  $If(!APanel.Folder && panel.item(0,0,8))
     clip(2,panel.item(0,0,0)+";"+panel.item(0,0,6)+"\r\n")
  $End
  Down
$End
V=flock(Lkey,Action)

Позволяет переключить состояние Lock-клавиш (NumLock, CapsLock и ScrollLock).

Клавиша Lkey:

Lkey | Описание
0 | NumLock
1 | CapsLock
2 | ScrollLock
Действие Action:
Action | Описание
-1 | получить состояние клавиши
0 | погасить индикатор
1 | включить индикатор
2 | переключить индикатор в противоположное состояние

Функция в младшем бите возвращает предыдущее значение выбранной клавиши (или текущее, если Action=-1).

Функция капризная (возможно зависание компьютера), поэтому пользоваться ей надо осторожно.

Например, макрос, повешенный на Ctrl+CapsLock (переключение между окнами) должен иметь некую обвязку:

CtrlShiftTab
%a=flock(1,-1)&1;
$while((flock(1,-1)&1)==%a)
  sleep(50)
  flock(1,2)
$end
N=kbdlayout([V])

Управление раскладкой клавиатуры.

Параметр V:

V | Описание
0 | Вернуть текущее значение раскладки
1 | Переключиться на следующую раскладку (по кругу)
-1 | Переключиться на предыдущую раскладку (по кругу)
Прочие значения

Переключиться в конкретную раскладку (например, 0x0409 или 0x4090409 - английская, 0x0419 или 0x04190419 - русская)

В случае указания несуществующей раскладки функция ошибку не выдаст и просто вернёт текущую раскладку.

Функция возвращает предыдущее значение раскладки или 0 в случае ошибки (не удалось определить имя текущей раскладки для консоли или не удалось получить описатель консольного окна).

Например:

print(itoa(kbdLayout(0x421),16))
при текущей русской раскладке просто вернёт 4190419
print(itoa(kbdLayout(),16))
при текущей русской раскладке вернёт 4190419
print(itoa(kbdLayout(0x409),16))
при текущей русской раскладке вернёт 4190419 и переключит рaскладку на английскую
print(itoa(kbdLayout(1),16))
при текущей русской раскладке вернёт 4190419 и переключит на следующую рaскладку (по кругу)
N=Window.Scroll(Lines[,Axis]) Функция позволяет перемещать консольное окно по буферу.
Lines - количество позиций для прокрутки: положительное число - вперёд (вниз/вправо), отрицательное - назад (вверх/влево).
Axis - направление прокрутки (необязательный параметр): 0 - вертикаль (по умолчанию), 1 - горизонталь.
Функция возвращает 0 - перемотка не состоялась (например, Lines был равен 0), иначе 1

Среда исполнения

Функция | Описание
E=sleep(N) | Организация задержки в макросе на N миллисекунд. Отрицательное значение задержки считается ошибкой и функция возвращает 0.
V=Far.Cfg.Get(Key,Name)

Функция, позволяет получить основные текущие настройки Far Manager.

Состояние ошибки (нет такого Key или Name или внутренняя ошибка) можно проверить с помощью макроконстанты Far.Cfg.Err.

Например,

Far.Cfg.Get("System.KnownIDs","Network")
вернет значение "773B5051-7C5F-4920-A201-68051C4176A4", которое соответствует ID плагина Network.
Far.Cfg.Get("KeyMacros","DateFormat")
вернет значение формат преобразования даты по умолчанию для функции date.
Far.Cfg.Get("KeyMacros","TimeFormat")
вернет вернут пустую строку и выставит Far.Cfg.Err=1, т.к. значения с именем "TimeFormat" не существует.

Внимание! Внимание!

  • В процессе разработки Far Manager настройки (имена ключей и имена значений) могут меняться, добавляться и удаляться, поэтому Вы используете функцию на свой страх и риск. Поддержка функционала (имена ключей и имена значений) со стороны разработчиков не гарантирована.
E=msave(S)

Сохраняет в базу значение глобальной переменной с именем S в область Vars.

В случае неудачи возвращает 0.

Например, после выполения последовательности %%GlobalVars="Foo Bar"; %a=msave("%%GlobalVars"); в базе появится значение %%GlobalVars, содержащее "Foo Bar" (тип "TEXT").
E=mload(S)

Считать из базы значение глобальной переменной с именем S (область Vars).

Функция вернёт 1 - есть такая переменная и она успешно считана в память, 0 - неудача, нет такой переменной в базе (в этом случае переменная не создаётся). Если переменная была в памяти, а из базы запись удалили, то значение в памяти не изменяется.

Например, в базе была переменная "%%GlobalVars" со значением 20 (тип "INTEGER"). После выполения последовательности %%GlobalVars="Foo Bar"; %a=mload("%%GlobalVars"); %%GlobalVars будет равна 20.
V=akey(Mode[,Type])

Возвращает название или код клавиши, вызвавшей макропоследовательность.

Mode = 0 - возвращается код клавиши, Mode = 1 - возвращается наименование клавиши.

Type = 0 - возвращает реально нажатое сочетание, которым вызывался макрос, Type = 1 - возвращает клавишу, на которую назначен макрос.

Пример см. в описании $AKey.
E=eval(S[,Mode]) Выполнить или проверить макропоследовательность.
Mode | Описание
0

Выполнить макропоследовательность, заданную строкой S.

Если S содержит синтаксические ошибки, то макропоследовательность исполняться не будет.

Far Manager компилирует последовательность S. Если нет ошибок, то состояние текущего макроса сохраняется и начинает выполняться последовательность S. После исполнения S прерванный макрос продолжает работать.

1 | Проверить макропоследовательность, заданную строкой S, и вернуть код ошибки компиляции. Последовательность S исполняться не будет.
2

Выполнить макрос, назначенный на сочетание клавиш S.

Параметр S задаётся форматом "[Area/]Key". Здесь "Area" - макрообласть, из которой будет исполнен макрос; "/" - разделитель; "Key" - название клавиши.

  • Если "Area/" указан, то будет вызван макрос, назначенный на "Key" только в указанной области "Area".

    Пример: eval("Shell/CtrlP",2)

  • Если в качестве "Area/" указана строка "./", то будет вызван макрос, назначенный на "Key" только в текущей области.

    Пример: eval("./CtrlP",2)

  • Если "Area/" не указан, то будет вызван макрос, назначенный на "Key" в текущей области. Если в текущей области "Key" не обнаружен, то будет выполнен макрос, назначенный на "Key" из области Common.

    Пример: eval("CtrlP",2)

Если "Key" не обнаружен, то функция вернёт целочисленное значение "-2".

Если "Key" обнаружен, то состояние текущего макроса сохраняется и начинает выполняться макрос, назначенный на сочетание клавиш S. После исполнения S прерванный макрос продолжает работать.

3 Проверить макропоследовательность, заданную строкой S, и вернуть строку-сообщение с ошибкой компиляции. Последовательность S исполняться не будет.

Строка-сообщение будет пустой, если ошибок нет, или содержать 4 подстроки (разделенных символом '\n'):

  1. строка и позиция в строке (например, Line 1, Pos 1)
  2. текст сообщения об ошибке (например, Unrecognized keyword 'foo')
  3. кусок проблемной макропоследовательности (например, "foo")
  4. указатель на проблемное место - символ с кодом \x2191 (↑).
Для отображения строк разумнее применять msgbox с флагом 8 (выравнивание влево), например, msgbox(,eval("foo",3),8)

Для всех режимов, кроме Mode=3, функция возвращает 0 в случае успешной компиляции последовательности S или код ошибки:

Ошибка | Описание
-1 | Указаны недопустимые параметры функции
-2 | Для Mode=2 сочетание клавиш S не найдено или макрос заблокирован
1 | Неизвестное ключевое слово 'ключевое слово'
2 | Неизвестная функция 'функция'
3 | Неверное количество параметров у функции 'функция'
4 | Неожиданное появление $Else
5 | Неожиданное появление $End
6 | Неожиданный конец строки
7 | Ожидается 'ключевое слово'
8 | Неизвестный шестнадцатеричный управляющий символ
9 | Неправильный управляющий символ
10 | Переменная 'переменная' не найдена
11 | Ошибка синтаксиса
12 | Пустая макропоследовательность

Локальные переменные - общие для текущего исполняемого макроса и макропоследовательности, исполняемой функцией eval.

Пример см. в разделе Примеры.
N=mmode(Action[,Value])

Управление параметрами текущего макроса.

Параметр Action:

Action | Описание
1 | позволяет изменять режим перерисовки экрана во время проигрывания макропоследовательности (запрещает вывод)
2 вернуть информацию (область и флаги) об условиях запуска исполняемой в данный момент макропоследовательности.

Параметр Value игнорируется.

Функция возвращает в младшем байте номер макрообласти, из которой стартовал макрос:
Value | Описание
0 | Other - Режим копирования текста с экрана, вертикальные меню
1 | Shell - Файловые панели
2 | Viewer - Внутренняя программа просмотра
3 | Editor - Редактор
4 | Dialog - Диалоги
5 | Search - Быстрый поиск в панелях
6 | Disks - Меню выбора дисков
7 | MainMenu - Основное меню
8 | Menu - Прочие меню
9 | Help - Система помощи
10 | Info - Информационная панель
11 | QView - Панель быстрого просмотра
12 | Tree - Панель дерева папок
13 | FindFolder - Поиск папок
14 | UserMenu - Меню пользователя
15 | Shell.AutoCompletion - список автодополнения в панелях
16 | Dialog.AutoCompletion - список автодополнения в диалогах
255 | Common - Общая область

Остальные значения - флаги условий запуска (в т.ч. некоторые служебные флаги).

Условия запуска:
Value | Описание
0x000000200 | НЕ передавать плагинам клавиши во время записи/воспроизведения макроса
0x000000800 | этот макрос запускается при старте ФАРа
0x000001000 | запускать, если командная линия пуста
0x000002000 | запускать, если командная линия не пуста
0x000004000 | запускать, если есть выделение в редакторе
0x000008000 | запускать, если есть нет выделения в редакторе
0x000010000 | панель активная: запускать, если есть выделение
0x000020000 | панель пассивная: запускать, если есть выделение
0x000040000 | панель активная: запускать, если есть нет выделения
0x000080000 | панель пассивная: запускать, если есть нет выделения
0x000100000 | панель активная: запускать, если это плагиновая панель
0x000200000 | панель пассивная: запускать, если это плагиновая панель
0x000400000 | панель активная: запускать, если это файловая панель
0x000800000 | панель пассивная: запускать, если это файловая панель
0x001000000 | панель активная: запускать, если текущий объект "файл"
0x002000000 | панель пассивная: запускать, если текущий объект "файл"
0x004000000 | панель активная: запускать, если текущий объект "папка"
0x008000000 | панель пассивная: запускать, если текущий объект "папка"

Дополнительная информация:
Value | Описание
0x000000100 | подавить обновление экрана во время выполнения макроса
0x010000000 | текст макроса многострочный
0x040000000 | этот макрос необходимо запомнить при сохранении макросов
0x080000000 | этот макрос отключен (помеченные этим флагом макросы не запускаются - ни с клавиатуры, ни из eval())
0x100000000 | разрешено исполнение макросов из плагина при вызове plugin.call

3

разрешает или запрещает исполнение макросов при вызове плагина макрофункцией plugin.call.

Например, в редакторе с помощью плагина DrawLine нарисовать небольшой прямоугольник (макропоследовательность передается плагину, который отдает её в Far Manager):

mmode(3,1)
plugin.call("C941E865-9C29-485C-99B3-0C710940F2D8",
  "ShiftRight ShiftRight ShiftDown ShiftDown ShiftLeft ShiftLeft ShiftUp ShiftUp ShiftRight Esc")
вариант без mmode:
plugin.call("C941E865-9C29-485C-99B3-0C710940F2D8")
  ShiftRight ShiftRight ShiftDown ShiftDown ShiftLeft ShiftLeft ShiftUp ShiftUp ShiftRight Esc

Параметр Value:

Value | Описание
-1 | получить текущее значение
0 | выключить значение Action
1 | включить значение Action
2 | переключить значение Action (триггер)
Функция возвращает предыдущее значение.
N=history.disable([State])

Позволяет выключать добавление пунктов в истории во время воспроизведения текущего макроса.

Необязательный параметр State:

Бит | Описание
0 | история командной строки
1 | история папок
2 | история редактора/вьюера
3 | история диалогов

Если соответствующий бит выставлен, то история блокируется.

Если параметр не указан, то просто возвращает текущую маску.

Функция возвращает предыдущее значение.

При старте макроса разрешено добавление во все истории.

Примеры

Вызов | Результат
history.disable() | получить текущее состояние блокировок историй
history.disable(-1) | выключить все истории
history.disable(5) | выключить истории командной строки и редактора/вьюера, остальные включить
N=keybar.show([Mode])

Позволяет управлять видимостью линейки функциональных клавиш.

Необязательный параметр Mode:

Mode | Описание
0 | получить состояние видимости
1 | показать линейку
2 | скрыть линейку
3 | изменить состояние видимости на обратное

Функция возвращает предыдущее состояние видимости линейки:

Value | Описание
0 | скрыта
1 | показана
-1 | в этой макрообласти линейка клавиш не найдена
Действие функции актуально только для текущих панелей, редакторов, вьюеров.

Например, Esc при погашенных панелях гасить и кейбар:

CtrlO $if (APanel.Visible && PPanel.Visible) KeyBar.Show(1) $else KeyBar.Show(2) $end
N=plugin.call(Guid[,param])

Вызвать плагин, имеющий идентификатор Guid с параметром param.

Plugin.call вызывает экспортируемую функцию OpenW требуемого плагина.

Параметр param может быть числом или строкой и будет передан плагину в функцию OpenW как есть. Дальнейшие действия зависят от того, как плагин обработал этот параметр.
Функция возвращает 0, если вызываемого плагина нет или плагин вернул 0. В других случаях функция возвращает значение, отличное от 0.
N=plugin.config(Guid[,MenuGuid])

Аналог вызова плагина из меню "Параметры плагинов" без необходимости задавать горячие клавиши или искать плагин в списке. Работает только в панелях.

Guid и MenuGuid можно посмотреть в диалоге "Plugin information" (F3 в списке): поля "Plugin GUID" и "Plugin item GUID" соответственно.

Обязательно нужно указать Guid плагина. MenuGuid требуется указывать в том случае, если плагин экспортирует более одного пункта меню.

Если плагин отсутствует в списке "Параметры плагинов" или при вызове не из панелей - функция вернет ошибку.

Функция возвращает 1 - плагин/пункт найден или 0 - в случае ошибки.
N=plugin.exist(Guid)

Позволяет узнать наличие в системе плагина с идентификатором Guid.

Функция возвращает 1 - есть такой плагин или 0 - в случае ошибки.
N=plugin.load(DllPath[,ForceLoad])

Загрузить плагин с именем dll-модуля DllPath. Если указан ForceLoad, отличный от 0, то плагин загружается сразу в память.

Функция возвращает 1 - плагин загружен или 0 - в случае ошибки.
N=plugin.menu(Guid[,MenuGuid])

Аналог вызова плагина из меню плагинов по F11 без необходимости задавать горячие клавиши или искать плагин в списке.

Guid и MenuGuid можно посмотреть в диалоге "Plugin information" (F3 в списке): поля "Plugin GUID" и "Plugin item GUID" соответственно.

Обязательно нужно указать Guid плагина. MenuGuid требуется указывать в том случае, если плагин экспортирует более одного пункта меню.

Если плагин отсутствует в списке F11 для текущей макрообласти - функция вернет ошибку.

Функция возвращает 1 - плагин/пункт найден или 0 - в случае ошибки.

Пример использования - открыть FarColorer\Outliner list:

%I = plugin.menu("D2F36B62-A470-418D-83A3-ED7A3710E5B5","45453CAC-499D-4B37-82B8-0A77F7BD087C");
$If (%I==1) 5 $End
N=plugin.command(Guid,Command)

Аналог вызова плагина по префиксу из панелей без необходимости запоминать/очищать/восстанавливать текущее содержимое командной строки.

Guid можно посмотреть в диалоге "Plugin information" (F3 в списке F11 или AltShiftF9): поле "Plugin GUID".

Если плагин с таким Guid не поддерживает вызов по префиксу или при вызове не из панелей - функция вернет ошибку.

Функция возвращает 1 - плагин/пункт найден или 0 - в случае ошибки.
N=plugin.unload(DllPath)

Выгрузить плагин с именем dll-модуля DllPath.

Функция возвращает 1 - плагин выгружен или 0 - в случае ошибки.
V=Menu.Show(Items
[,TitleAndFooter
[,Flags
[,SelectOrFilter
[,X
[,Y]]]]])

Создаёт и отображает на экране меню.

Параметр Items: пункты меню, разделённые Lf ("\n") или CrLf ("\r\n")

Могут начинаться (возможны некоторые комбинации) со специальных символов:

Символ+пробел | Описание
\1 | сепаратор; не участвует в автонумерации/сортировке/удалении дубликатов.
\2 | пункт отмечен (возможна комбинация с \3 и \4)
\3 | пункт недоступен для навигации и выбора
\4 | серый, недоступен для выбора

Необязательный параметр TitleAndFooter: заголовок и футер меню, разделённые Lf ("\n") или CrLf ("\r\n"). Один или оба могут отсутствовать.

Необязательный параметр Flags - набор битов, управляющих поведением и отображением меню:

Бит
установлен(ы) 		Описание
0-2 Тип рамки меню: (по умолчанию == 100)
Value | Описание
001 (0x1) | без рамки
010 (0x2) | одинарная, с окружающими пробелами
011 (0x3) | одинарная, без окружающих пробелов
100 (0x4) | двойная, с окружающими пробелами
101 (0x5) | двойная, без окружающих пробелов
3 (0x8) | возвращаемый результат - индекс выбранного пункта меню
4 (0x10) | разрешена отметка нескольких пунктов и её снятие
5 (0x20) | отсортировать (производится регистронезависимая числовая сортировка)
6 (0x40) | убрать дублирующиеся пункты меню (с учетом регистра)
7 (0x80) | автоматически назначить "горячие" клавиши
8 (0x100) как трактовать SelectOrFilter: (по умолчанию == 0)
Value | Описание
0 | позиционировать (если SelectOrFilter - число), либо найти (если SelectOrFilter - строка) пункт меню
1 | установить фильтр меню
9 (0x200) | автоматически пронумеровать пункты меню
10 (0x400) | выйти из меню при изменении выбранного пункта

Необязательный параметр SelectOrFilter - на какой пункт меню позиционировать курсор, либо фильтрация пунктов.
Может быть:

Value | Описание
числом | если бит 8 == 0, то позиционировать на указанный пункт меню. Если число отрицательное, то отсчёт ведётся с конца меню
строкой | если бит 8 == 0, то найти пункт меню. Поиск регистронезависим, возможны маски
строкой | если бит 8 == 1, то установить фильтр меню

Необязательные параметры X и Y - координаты левого верхнего угла меню. Если одна (или обе) равны -1 (по умолчанию), то производится центрирование меню по этой координате.

Возвращаемый результат функции:

Тип | Описание
пустая строка | выход из меню по Esc, F10 или при клике вне меню
число == 0 (если установлен бит 3) | выход из меню по Esc, F10 или при клике вне меню
число > 0 | индекс выбранного пункта
число < 0 | если установлен бит 10, то индекс выбранного пункта со знаком минус
строка | выбранный пункт меню. Если установлен бит 4, то список отмеченных пунктов меню, разделённых \n. Если установлены и бит 3 и бит 4, то список индексов отмеченных пунктов меню, разделённых \n

В меню доступны следующие сочетания клавиш: (пометка возможна только при установленном бите 4)

Сочетание | Действие
Ins | пометка пункта
Ctrl-Add | пометка всех видимых пунктов
Ctrl-Subtract | снятие пометки со всех видимых пунктов
Ctrl-Multiply | инверсия пометки у всех видимых пунктов
Ctrl-A | подогнать меню по высоте
Пример использования - навигация по установленным закладкам редактора:
%I = 1;
%S = "";
$While (%I <= Bm.Stat(0))
  Bm.Goto(%I);
  %S = %S + Editor.Value + "\n";
  %I = %I + 1;
$End

%I = 1;
$While (%I!=0)
  %I=Menu.Show(%S, "Стековые закладки\nНавигация - Up/Down, Выход - Esc, F10", 0x600, abs(%I),80,FAR.Height-Bm.Stat(0)-5);
  $If (%I > 0)
    Bm.Goto(%I);
    $SelWord;
  $Else
    %I=0;
  $End
$End
S=macro.func(Index[,Type])

Возвращает информацию о функции с индексом Index (начинается с 1). Если Index=0, то возвращается количество зарегистрированных макрофункций (число).

Необязательный параметр Type может быть одним из следующих значений:

Тип | Описание
0 | имя функции
1 | синтаксис функции
2 | GUID плагина, предоставляющего функцию

Функция вернет пустую строку, если функция с индексом Index отсутствует.
S=macro.keyword(Index[,Type])

Возвращает ключевое слово с индексом Index (начинается с 1). Если Index=0, то возвращается количество слов (число).

Необязательный параметр Type может быть одним из следующих значений:

Тип | Описание
0 | имена ключевых слов, например, "Far.Width", "PPanel.OPIFlags" и т.п.
1 | имена макрообластей, например, "Shell", "MainMenu" и т.п.
2 | имена флагов макросов, например, "DisableOutput", "NoPluginPanels" и т.п.
3 | имена макрокоманд, начинающихся с символа '$', например, "$if", "$selword" и т.п.
4 | имена типа переменой/константы, например, "unknown","integer","text","real"

Функция вернет пустую строку, если ключевое слово с индексом Index отсутствует.
V=macro.const(Index[,Type])

Возвращает информацию о константе с индексом Index (начинается с 1). Если Index=0, то возвращается количество констант (число).

Необязательный параметр Type может быть одним из следующих значений:

Тип | Описание
0 | имя константы
1 | значение константы
2 | числовое значение типа константы
3 | имя типа константы

Типы и значения констант могут быть:

Значение | Имя
0 | unknown
1 | integer
2 | text
3 | real

Функция вернет 0, если константа с индексом Index отсутствует. В этом случае тип возвращаемого значения будет "unknown".

Тип возвращаемого значения для Type=1 зависит от типа константы.
V=macro.var(Index[,Type])

Возвращает информацию о глобальной переменной с индексом Index (начинается с 1). Если Index=0, то возвращается количество глобальной переменных (число).

Необязательный параметр Type может быть одним из следующих значений:

Тип | Описание
0 | имя переменной
1 | значение переменной
2 | числовое значение типа переменной
3 | имя типа переменной

Типы и значения переменных могут быть:

Значение | Имя
0 | unknown
1 | integer
2 | text
3 | real

Функция вернет 0, если глобальной переменная с индексом Index отсутствует. В этом случае тип возвращаемого значения будет "unknown".

Тип возвращаемого значения для Type=1 зависит от типа перменной.

Замечания

Для строковых функций: нумерация символов в строке начинается с 0 (см. index(), rindex(), substr()).

Смотрите также:
Примеры


Свойства и функции для работы с системой помощи - Макросы

Свойства и функции для работы с системой помощи

главная | Макросы | Макроязык | Свойства и функции: по областям

Свойства

Оператор | Тип | Описание
Help.FileName | String | полный путь просматриваемого файла помощи; для списка помощи по внешним модулям (Shift+F2) это значение пусто
Help.Topic | String | идентификатор просматриваемой темы (без ведущего символа '@')
Help.SelTopic | String | идентификатор выделенного топика (без ведущего символа '@')
Смотрите также:
Примеры


Свойства и функции: по областям - Макросы

Свойства и функции: по областям

главная | Макросы | Макроязык

Существуют свойства и функции как общего назначения, так и предназначенные для отдельных макрообластей.

  • Общие
  • Зависящие от контекста исполнения
  • Для панелей
  • Для командной строки
  • Для редактора
  • Для внутренней программы просмотра
  • Для диалогов
  • Для меню и списков
  • Для системы помощи

Замечания

  1. Логические свойства используются в качестве условий в операторах $If и $While.
  2. Параметры функций, обозначенные в квадратных скобках, можно не указывать. Значение по умолчанию см. в описаниях функций.
Смотрите также:
Примеры


Свойства и функции для работы с меню - Макросы

Свойства и функции для работы с меню и списками

главная | Макросы | Макроязык | Свойства и функции: по областям

К меню относятся следующие области: прочие меню (Menu), основное меню (MainMenu), меню пользователя (UserMenu), меню выбора диска (Disks).

Под списками понимается: список автодополнения (AutoCompletion), и различные открытые списки в диалогах (Dialog) - List box / Combo box / History.

Далее в тексте "меню" и "списки" не разделяются, и упоминаются под общим названием "меню".

Свойства

Все меню
Оператор | Тип | Описание
Menu.Value | String | содержимое текущего пункта меню (см. также menu.getvalue())
Menu.Info.Id | String | строковое представление идентификатора текущего меню
Меню выбора диска
Оператор | Тип | Описание
Drv.ShowPos | Number | для какой панели вызвано меню выбора диска: 1 - для левой (Alt+F1), 2 - для правой (Alt+F2).
Drv.ShowMode Number информация, отображаемая в меню выбора дисков; набор битовых флагов:
Флаги | Описание
0x00000001 | тип дисков
0x00000002 | сетевые имена (и пути, ассоциированные с SUBST-дисками)
0x00000004 | метки дисков
0x00000008 | тип файловой системы
0x00000010 | общее и свободное место на дисках
0x00000100 | общее и свободное место отображается в стиле Windows Explorer
0x00000020 | параметры сменных носителей
0x00000040 | подключаемые модули (плагины)
0x00000080 | параметры оптических дисков
0x00000200 | параметры сетевых дисков

Функции

Функция Описание
Pos=checkhotkey(S[,StartPos])

Функция позволяет проверить и получить позицию элемента, для которого назначена горячая клавиша S.

Если S - пустая строка, то функция вернёт позицию элемента, для которого горячие клавиши не назначены.

Если не задать StartPos, то поиск осуществляется с начала.

Работает как в меню, так и в диалогах.

Если текущий элемент диалога - открытый список, то функция работает не с диалогом, а с этим списком.

Возвращает позицию найденного элемента. 0 - ничего не найдено, -1 - функция вызвана не из меню/диалога/списка.

Например:

В меню вызова плагинов (F11) плагину S&R назначена горячая клавиша '7'.

Следующая последовательность макрокоманд для редактора вызовет плагин (если хоткей назначен) или стандартный диалог поиска (если хоткей не назначен):

F11 $if (checkhotkey("7")) 7 1 $else Esc AltF7 $end
S=gethotkey([Pos])

Возвращает горячую клавишу S для пункта меню с номером Pos.

Если Pos не указан, или равен 0 - подразумевается текущий пункт.

Если горячая клавиша для пункта меню не задана, то возвращается пустая строка ("").

В случае ошибки (не меню; нет хоткея; Pos больше чем количество пунктов меню) также возвращается пустая строка.
N=menu.filter([Action[,Mode]])

Выполняет операции фильтрации (Ctrl+Alt+F).

Action | Описание
0 включение фильтра
Mode | Описание
-1 | (по умолчанию) вернуть 1 если фильтр уже включен, 0 - фильтр выключен
0 | выключить фильтр
1 | включить фильтр, если фильтр уже включен - ничего не делает
1 фиксация текста фильтра (Ctrl+Alt+L)
Mode | Описание
-1 | (по умолчанию) вернуть 1 если текст фильтра зафиксирован, 0 - фильтр можно менять с клавиатуры
0 | отменить фиксацию фильтра
1 | зафиксировать фильтр
2 | вернуть 1 если фильтр включен и строка фильтра не пуста
3 | вернуть количество отфильтрованных (невидимых) строк
4 | (по умолчанию) подправить высоту списка под количество элементов

Если фильтрация недоступна (не меню; не список) возвращает -1.

Если код возврата специально не оговорен, в случае успеха возвращает 1, в случае ошибки 0.
S=menu.filterstr([Action[,S]])

Выполняет операции со строкой фильтра (Ctrl+Alt+F).

Action | Описание
0 | (по умолчанию) вернуть текущую строку, если фильтр включен
1 | установить (заменить) в фильтре строку S Если фильтр не был включен - включает его, режим фиксации не трогается, но игнорируется. Возвращает предыдущее значение строки фильтра
S=menu.getvalue([Pos])

Возвращает текст пункта меню с номером Pos.

Если текущий "объект" не меню или позиция Pos не валидна (меньше 0 или больше количества пунктов в меню), то возвращается пустая строка.

Если Pos не указан или равен 0, то действие аналогично применению Menu.Value.

Позиция меню не меняется.
b=menu.itemstatus([Pos])

Возвращает в младшем слове набор битовых флагов - состояние пункта меню с номером Pos (текущая позиция - Pos=0 или не указан):

Флаги | Описание
0x00000001 | Признак активности пункта меню. Только один пункт может быть активным.
0x00000002 | Признак отмеченного пункта меню. Перед текстом будет отображаться метка выбора.
0x00000004 | Пункт меню отображается как разделитель.
0x00000008 | Пункт меню недоступен
0x00000010 | Если флаг установлен, то пункт меню доступен в навигации, но не доступен для выбора.
0x00000020 | Если флаг установлен, то пункт меню не выводится на экран.

В старшем слове - код символа пометки (U+XXXX).

  • Если выставлен флаг 0x00000002 и старшее слово равно 0, то Far использует символ пометки U+221A.
  • Если выставлен флаг 0x00000002 и старшее слово не равно 0, то Far использует символ пометки из старшего слова.
$If(menu.itemstatus() & 0x00000002)
    msgbox("Selected", chr(menu.itemstatus()>>16))
$Else
    msgbox("Not Selected")
$End

Функция работает со всеми пунктами меню, в том числе с теми, которые в данный момент не отображаются (скрытые пункты учитываются в позиции).

Если текущий "объект" не меню или позиция Pos невалидна (меньше 0 или больше количества пунктов в меню), то функция возвращает значение -1 (все биты установлены).
Pos=menu.select(S[,Mode[,Dir]])

В меню позиционирует курсор на первый пункт, содержащий подстроку S.

Поиск регистронезависим.

Если такого пункта нет, то ничего не делает.

Поиск подстроки ведётся в зависимости от указанного режима Mode:

Mode | Описание
0 | полное совпадение
1 | совпадение с началом строки
2 | совпадение с концом строки
3 | присутствие подстроки S в пункте меню

Если параметр Mode не указан, подразумевается полное совпадение.

Параметр Dir задаёт направление поиска:

Dir | Описание
0 | от начала в конец списка пунктов меню
1 | от текущей позиции в начало
2 | от текущей позиции в конец списка

Возвращает позицию пункта меню (если найден), 0 - ошибка при позиционировании (нет пункта или пункт задисаблен), -1 - функция вызвана не для меню.

F11 $if(menu.select("Advanced compare",0) > 0) Enter $end

Замечания

Пункты меню нумеруются начиная с 1. В нумерацию также включаются разделители и заблокированые пункты меню.
Смотрите также:
Примеры


Свойства и функции для работы с панелями - Макросы

Свойства и функции для работы с панелями

главная | Макросы | Макроязык | Свойства и функции: по областям

Под "панелями" понимаются следующие области: файловые панели (Shell), информационная панель (Info), панель быстрого просмотра (QView), панель дерева папок (Tree).

Все плагиновые панели относятся к файловым (Shell).

Логические свойства (тип: Boolean)

Файловые панели
Свойство | Описание
APanel.Root PPanel.Root | на панели корневая папка?
APanel.Bof PPanel.Bof | текущий элемент панели в начале списка?
APanel.Eof PPanel.Eof | текущий элемент панели в конце списка?
APanel.Empty PPanel.Empty | панель пуста?
APanel.Selected PPanel.Selected | на панели есть отмеченные файлы/папки?
APanel.Folder PPanel.Folder | текущий элемент панели - папка?
APanel.LFN PPanel.LFN | на панели "длинные имена файлов"?
APanel.Filter PPanel.Filter | на панели включён фильтр?
APanel.Plugin PPanel.Plugin | плагиновая панель?
Все панели
Свойство | Описание
APanel.FilePanel PPanel.FilePanel | файловая панель?
APanel.Left PPanel.Left | панель слева?
APanel.Visible PPanel.Visible | панель видима?

Замечания

Префикс APanel. относится к активной панели, PPanel. - к пассивной.

Свойства

Файловые панели
Оператор | Тип | Описание
APanel.ColumnCount
PPanel.ColumnCount 		Number количество колонок на панели
APanel.ItemCount
PPanel.ItemCount 		Number содержит количество файловых объектов на панели
APanel.CurPos
PPanel.CurPos 		Number содержит порядковый номер файлового объекта на панели
APanel.SelCount
PPanel.SelCount 		Number содержит количество выделенных файлов на панели
APanel.Current
PPanel.Current 		String содержит имя файла под курсором
APanel.Path
PPanel.Path 		String содержит путь панели (без заключительного '\')
APanel.UNCPath
PPanel.UNCPath 		String содержит UNC-путь панели (без заключительного '\'); для плагиновой панели - prefix:[hostfile/]path
APanel.DriveType
PPanel.DriveType 		Number содержит тип привода на панели:
Значение | Описание
-1 | Плагиновая панель
0 | Не удалось определить тип привода
2 | Сменный привод
3 | Жёсткий диск
4 | Сетевой подмапленный диск
5 | CDROM
6 | Виртуальный диск
15 | SUBST-диск
Файловые панели плагинов
Оператор | Тип | Описание
APanel.Path0
PPanel.Path0 		String содержит путь на реальной файловой системе, до вызова плагинов, создающих свою панель (без заключительного '\')
APanel.HostFile
PPanel.HostFile 		String содержит имя хост-файла панели плагина (или пусто)
APanel.Prefix
PPanel.Prefix 		String содержит префикс плагина или пусто (или несколько префиксов, разделённых символом ':')
APanel.Format
PPanel.Format 		String содержит имя формата панели плагина
APanel.OPIFlags
PPanel.OPIFlags 		Number набор битовых флагов, характеризующих свойства плагиновой панели:
Флаги | Описание
0x00000001 | используется фильтр на панели
0x00000002 | используются группы сортировки на панели
0x00000004 | используется раскраска файлов на панели
0x00000010 | папки на панели плагина выбираются независимо от настроек FAR
0x00000020 | используется стандартная обработка файла FAR'ом, если запрошенная операция не поддерживается плагином; если этот флаг указан, элементы на панели плагина являются именами реальных файлов
0x00000040 | показаны имена без путей
0x00000080 | имена файлов выровнены по правому краю
0x00000100 | имена файлов показаны в оригинальном регистре (независимо от настроек FAR)
Если панель не плагиновая, то значение будет = 0
Все панели
Оператор | Тип | Описание
APanel.Height
PPanel.Height 		Number содержит высоту панели
APanel.Width
PPanel.Width 		Number содержит ширину панели
APanel.Type
PPanel.Type 		Number содержит тип панели:
Значение | Описание
0 | Файловая панель
1 | Дерево папок
2 | Панель быстрого просмотра
3 | Информационная панель

Замечания

Префикс APanel. относится к активной панели, PPanel. - к пассивной.

Функции

Функция Описание
itemIdx=panel.fexist(panelType,S)

Проверяет существование файла/папки S из активной (panelType=0) или пассивной (panelType=1) панели.

В параметре S допускается использование символов '*' и '?'. В этом случае функция проверяет только первое вхождение файла/папки.

Функция возвращает 0, если такого объекта на панели нет, или индекс элемента.

В отличии от fexist(), функция работает только с панелями.
b=panel.fattr(panelType,S) Возвращает файловые атрибуты файла/папки S из активной (panelType=0) или пассивной (panelType=1) панели.
Атрибут | Описание
0x00000001 | FILE_ATTRIBUTE_READONLY. Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его.
0x00000002 | FILE_ATTRIBUTE_HIDDEN. Файл скрыт. Такой файл не включается в обычный листинг папки.
0x00000004 | FILE_ATTRIBUTE_SYSTEM. Этот файл - часть операционной системы.
0x00000010 | FILE_ATTRIBUTE_DIRECTORY. Это папка.
0x00000020 | FILE_ATTRIBUTE_ARCHIVE. Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления.
0x00000080 | FILE_ATTRIBUTE_NORMAL. У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов.
0x00000100 | FILE_ATTRIBUTE_TEMPORARY. Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удалён.
0x00000200 | FILE_ATTRIBUTE_SPARSE_FILE. Файл является разрежённым.
0x00000400 | FILE_ATTRIBUTE_REPARSE_POINT. Папка является точкой повторной обработки.
0x00000800 | FILE_ATTRIBUTE_COMPRESSED. Файл или папка сжаты. Для файла это означает, что все данные его сжаты, для папки - что компрессия по умолчанию применяется ко всем её файлам и подпапкам.
0x00001000 | FILE_ATTRIBUTE_OFFLINE. Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения.
0x00002000 | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED. Этот файл или папки не будут индексироваться службой индексирования.
0x00004000 | FILE_ATTRIBUTE_ENCRYPTED. Файл или папка зашифрованы. Для файла это означает, что все данные в файле зашифрованы. Для папки это означает, что шифрование является умолчанием для вновь созданных файлов и подпапок.
0x00010000 | FILE_ATTRIBUTE_VIRTUAL. Этот файл - виртуальный файл.

Если файловый объект не существует, функция возвращает -1.

В параметре S допускается использование символов масок '*' и '?'. В этом случае функция возвращает атрибуты для первого найденного файла/папки.

В отличии от fattr(), функция работает только с панелями.
V=panel.item(panelType,itemIdx,Property)

Возвращает различную информацию для элемента панели itemIdx из активной (panelType=0) или пассивной (panelType=1) панели.

В зависимости от запрашиваемого Property функция возвращает следующие свойства элемента:

Property | Тип | Описание свойства
0 | String | Имя файла/папки
1 | String | Короткое имя
2 | Number | Файловые атрибуты
3 | String | Дата/время создания
15 | Number | Дата/время создания
4 | String | Дата/время последнего доступа
16 | Number | Дата/время последнего доступа
5 | String | Дата/время модификации
17 | Number | Дата/время модификации
20 | String | Дата/время последнего изменения
21 | Number | Дата/время последнего изменения
6 | Number | Размер
7 | Number | Выделенный размер
8 | Number | "Выделен?"
9 | Number | Количество линков
10 | Number | SortGroup
11 | String | Diz-текст
12 | String | Владелец
13 | Number | CRC32
14 | Number | Позиция элемента в процессе чтения файловой системы
18 | Number | Количество потоков
19 | Number | Размер потоков
22 | Var | Значение Custom-колонки
23 | Number | Значение ReparseTag (актуально только для ссылок)

Для панели "Дерево папок" возвращается только имя файла (Property=0), остальные значения Property игнорируются.

Для получения данных о текущем элементе (под курсором) itemIdx должен быть равен 0.

Дата/время могут возвращаться в форматах:

  1. как строка вида DD.MM.YYYY HH:MM:SS. Разделители и порядок в дате зависят от региональных настроек.
  2. как 64-разрядное число. В старших 32-х битах - дата, в младших - время.

Пример - выделить все файлы/папки новее текущего:

%d=Panel.Item(0,0,16);
%i=1;
$while (%i<=APanel.ItemCount)
  $If (panel.item(0,%i,16) > %d)
    panel.select(0,1,1,%i)
  $End
  %i=%i+1;
$End
E=panel.setpath(panelType,path[,filename])

На активной (panelType=0) или пассивной (panelType=1) панели выставляет путь path и позиционирует курсор на элемент с именем filename (если указан).

Возвращает 1 в случае успешной установки пути, и 0, если папка не существует.

Например, на активной панели выставить папку "C:\WINDOWS", на пассивной - "C:\Program Files", активную панель сделать слева и установить курсор на папку "FAR":

$if(APanel.Left) CtrlU $End
panel.setpath(1,"C:\\WINDOWS")
panel.setpath(0,"C:\\Program Files","FAR")
itemIdx=panel.setpos(panelType,filename)

Позиционирует курсор на элемент с именем filename на активной (panelType=0) или пассивной (panelType=1) панели.

Возвращает позицию (индекс) элемента или 0, если такого элемента на панели нет.

Например, создать папку с именем, соответствующим текущей дате в формате YYYYMMDD, если папка существует - позиционировать на неё курсор:

%dt=date("%Y%m0%d");
$If (fexist(%dt))
  panel.setpos(0,%dt)
$Else
  F7 print(%dt) Enter
$End
itemIdx=panel.setposidx(panelType,PosIdx[,InSelection])

Позиционирует курсор на элемент с индексом itemIdx на активной (panelType=0) или пассивной (panelType=1) панели.

Параметр PosIdx может принимать отрицательные значения, в этом случае элементы панели нумеруются от конца к началу.

Если задать itemIdx=0, то перехода не происходит, просто возвращается текущая позиция.

С помощью необязательного параметр InSelection можно осуществить позиционирование среди отмеченных элементов (для этого нужно указать InSelection=1).

Функция возвращает позицию элемента или 0, если такого элемента на панели нет.
N=panel.select(panelType,Action[,Mode[,Items]])

Операции с выделением элементов на активной (panelType=0) или пассивной (panelType=1) панели.

Action может быть одним из следующих значений:

Action | Описание
0 | снять выделение
1 | выделить
2 | инвертировать выделение
3 | восстановить выделение (аналог Ctrl+M). Возвращает количество восстановленных элементов.

Необязательный параметр Mode может принимать следующие значения:

Mode Тип Items Описание
0 / или не указан - выполнить действие Action для всех элементов, параметр Items игнорируется
1 Number

Выполнить действие Action для элемента с индексом Items.

Items является числом - индексом элемента панели.

Если Items = 0 (или отсутствует) - выполнить действие Action для текущего элемента.
2 String

Выполнить действие Action для элементов, указанных в Items.

Items является строкой - списком имён файловых объектов (возможно с полными путями).
3 String

Выполнить действие Action для элементов, подходящих под маски, указанные в Items.

Items является строкой - списком файловых масок.

Для строковых значений Items:

  • Элементы должны быть разделены с помощью Lf ("\n") или CrLf ("\r\n").

    Имена должны быть в двойных кавычках.

  • В случае если Items равно "" (или отсутствует) - действие не выполняется.

Функция возвращает количество элементов, над которыми производилось Action.

Примеры:

Panel.Select(0,0)
полное снятие выделения
Panel.Select(0,1)
выделить все элементы
Panel.Select(0,2)
инверсия всего
Panel.Select(0,2,1)
инверсия того, что под курсором
Panel.Select(0,1,1,10)
"вдогонку" выделить 10-й элемент панели
Panel.Select(0,0,3)
ничего не делать
Panel.Select(0,1,2,clip(0))
выделить элементы, имена которых содержатся в буфере обмена

Замечания

  1. Панельные функции работают только с видимыми файловыми элементами, с учётом применённых фильтров на панели.
  2. Нумерация элементов начинается с 1.

  3. Во время вызова макрофункций panel.setpos(), panel.setpath() и panel.setposidx() макросы замораживаются до момента выполнения этих функций.

    На "больших" папках (например, сетевые, с большим количеством файловых объектов и/или медленных каналах) эти функции могут выводить сообщения о процессе сбора данных о файлах/папках, с возможностью отменить процесс по Esc.

Смотрите также:
Примеры


Свойства и функции для работы с внутренней программой просмотра - Макросы

Свойства и функции для работы с внутренней программой просмотра

главная | Макросы | Макроязык | Свойства и функции: по областям

Свойства

Оператор | Тип | Описание
Viewer.FileName | String | полное имя просматриваемого файла
Viewer.State Number различные состояния текущей программы просмотра - набор битовых флагов:
Флаги | Описание
0x00000001 | включено автоопределение таблицы символов
0x00000004 | режим Unicode
0x00000008 | включён перенос строк
0x00000010 | используется перенос строк по словам, а не по буквам
0x00000020 | выставлен 16-ричный режим
0x00000040 | выставлен Dump-режим
0x00000800 | модальный вьюер
0x08000000 | FAR запущен с ключом /v
Например,
$If (Viewer.State & 0x20) выполнить действия, если выставлен 16-ричный режим $End
Смотрите также:
Примеры


Кнопки назначения - Макросы

Кнопки назначения

главная | Макросы | Работа с макросами

Макрос может быть назначен на:

  1. любую клавишу;
  2. на сочетание клавиши с модификаторами Ctrl, Alt и Shift;
  3. на сочетание клавиши с двумя модификаторами. FAR позволяет использовать следующие двойные модификаторы: Ctrl+Shift+<клавиша>, Ctrl+Alt+<клавиша> и Alt+Shift+<клавиша>
    4. .

Макрос не может быть назначен на следующие клавиши и сочетания клавиш: Alt+Ins, Ctrl+., Ctrl+Shift+., Ctrl+Alt, Ctrl+Shift, Shift+Alt, Shift+<символ>, Ctrl+Alt+Shift.

Макрос не может быть назначен на следующие клавиши и сочетания клавиш: Alt+Space, Alt+Shift+Space, Alt+Enter, Alt+Shift+Enter. Эти клавиши системные.

Некоторые комбинации клавиш, в частности, Enter, Esc, F1, Ctrl+F5, Ctrl+Down, MsWheelUp и MsWheelDown с комбинацией Ctrl, Shift и Alt, невозможно ввести напрямую в диалоге назначения макроклавиши, поскольку они имеют специальные функции. Для того, чтобы назначить макрос на одну из таких комбинаций клавиш, выберите её из выпадающего списка.

Смотрите также:
Запись макроса, Удаление макроса, Параметры макрокоманды


Удаление макроса - Макросы

Удаление макроса

главная | Макросы | Работа с макросами

Для того, чтобы удалить макрос, нужно записать пустой (не содержащий действий) макрос и присвоить ему горячую клавишу макроса, который вы хотите удалить.

Эту операцию можно выполнить, осуществив следующие действия:

  1. Начать запись макроса (Ctrl+.)
  2. Закончить запись макроса (Ctrl+.)
  3. Ввести или выбрать в диалоге назначения горячей клавиши сочетание, макрос для которого вы хотите удалить

ВНИМАНИЕ! ВНИМАНИЕ!

  • После удаления макроса сочетание клавиш, используемое для его выполнения, начнёт выполнять свою первоначальную функцию. т. е. если это сочетание клавиш до записи макроса обрабатывалось FAR или каким-либо плагином, то после удаления макроса оно снова начнёт обрабатываться.
Смотрите также:
Запись макроса


Запись макроса - Макросы

Запись макроса

главная | Макросы | Работа с макросами

Создание макроса выполняется следующими действиями:

  1. Начало записи макроса.

    Клавиша Ctrl+. (Ctrl и клавишу с точкой .) для записи макроса в общем режиме и Ctrl+Shift+. (Ctrl, Shift и клавишу с точкой .), для записи макроса в специальном режиме.

    После того как FAR начал запись макроса, в левом верхнем углу экрана будет отображаться символ R.

  2. Текст макроса.

    FAR будет сохранять все нажимаемые клавиши со следующими исключениями: будут сохранены только клавиши, обрабатываемые FAR. т. е. если вы в процессе записи макроса из консоли FAR запустите внешнюю программу, то FAR сохранит только клавиши, нажатые до запуска и после завершения внешней программы.

  3. Окончание записи макроса.

    Для завершения записи макроса служат специальные сочетания клавиш.

    • Ctrl+. (Ctrl и клавиша с точкой .) вызывает запись макроса с параметрами воспроизведения, принятыми по умолчанию.
    • Ctrl+Shift+. (Ctrl, Shift и клавиша с точкой .) показывает диалог с параметрами выполнения макроса.

  4. Назначение сочетания клавиш для запуска макроса.

    После окончания ввода текста макроса и назначения параметров его выполнения будет показан диалог назначения клавиши, в котором можно задать горячую клавишу для воспроизведения записанной последовательности.

  5. Сохранение макроса.

    После назначения клавиши макропоследовательность готова к использованию. При включённом автосохранении она заносится в базу немедленно.

    В противном случае макрос останется в памяти до завершения работы FAR. Чтобы сделать его постоянным необходимо сохранить текущие настройки (Shift+F9). Либо можно воспользоваться командой плагина FAR Commands (включён в дистрибутив): "macro:save".

ВНИМАНИЕ! Примечание:

  • На время записи макроса все остальные макросы отключаются. Таким образом, нельзя записать "многоступенчатый" макрос, вызывающий ранее записанные макропоследовательности.
Смотрите также:
Удаление макроса


Параметры макрокоманды - Макросы

Параметры макрокоманды

главная | Макросы | Работа с макросами

Параметры макрокоманды определяют условия запуска макроса.

Для задания дополнительных параметров макрокоманды завершите её запись с помощью Ctrl+Shift+. (вместо Ctrl+.) и выберите желаемые опции в появившемся диалоге:

Разрешить во время выполнения вывод на экран
Если отключить этот параметр, то во время выполнения макрокоманды Far Manager отключает перерисовку экрана. Все изменения будут отображены после завершения макрокоманды.
Выполнять после запуска Far Manager
Позволяет выполнять макрокоманду сразу после запуска Far Manager.

Для активной и пассивной панелей возможны следующие условия, активизирующие макрокоманду:

На панели плагина
[x] - выполнять, только если панель плагиновая
[ ] - выполнять только для файловой панели
[?] - игнорировать тип панели
Выполнять для папок
[x] - выполнять, только если на панели под курсором папка
[ ] - выполнять, только если на панели под курсором файл
[?] - выполнять для папок и файлов
Отмечены файлы
[x] - выполнять, только если на панели есть отмеченные файлы/папки
[ ] - выполнять, если нет отмеченных файлов/папок
[?] - игнорировать состояние отметки файлов/папок

Прочие условия, активизирующие макрокоманду:

Пустая командная строка
[x] - выполнять, только если командная строка пуста
[ ] - выполнять, только если командная строка не пуста
[?] - игнорировать состояние командной строки
Отмечен блок
[x] - выполнять, только если выделен блок в редакторе,
      программе просмотра, командной строке или в строке
      ввода в диалоге.
[ ] - выполнять, если нет отмеченного блока
[?] - игнорировать состояние отметки блока

ВНИМАНИЕ! Примечание:

  • * FAR перед активацией макрокоманды проверяет все описанные выше условия.
  • * Параметры запуска макроса указываются при его записи и изменить их в дальнейшем можно повторно записав макрос.
Смотрите также:
Кнопки назначения, Запись макроса, Удаление макроса


Краткое описание - Macro API

главная

коротенько описать....


Краткое описание - Miscellaneous API

главная

коротенько описать....


Словарь

главная
Часть материалов, описывающих свойства файловой системы взяты с сайта http://www.windowsfaq.ru/. Все ссылки на MSDN, упомянутые в Словаре, открываются в отдельном окне в виде результатов поиска по сайту msdn.microsoft.com (см. также MSDN по русски).

Plugin - плагин

Программный компонент-добавка к Far Manager, позволяющая реализовать дополнительные функции. Плагин фактически - обычная библиотека, которая выполняется в контексте консольного процесса - так что ваш плагин может делать всё (ну или почти всё), что может делать обычное консольное Windows приложение. Сама идея плагинов позволяет настраивать оболочку под себя, добавляя нужное и выкидывая лишнее.

Reparse Points

Большая часть нововведений в файловой системе Windows 2000 стала возможной благодаря введению концепции Reparse Points, специальных "крючков" в файловой системе, позволяющих подключать дополнительные подсистемы хранения данных без использования дополнительных программ.

Reparse Points в действительности являются специальными объектами файловой системы, обладающими специальными атрибутами, которые позволяют использовать дополнительную функциональность подсистемы хранения данных. Любой файл или папка может иметь Reparse Point, что означает, что по одному и тому же пути при обращении к ресурсу могут быть доступны сразу несколько видов расширенной функциональности.
См. также: MSDN: Reparse Points

Directory Junctions

Directory Junctions (слияния папок) позволяют соединять папки вместе таким образом, что вы можете привязать любую имеющуюся папку к любой другой локальной папке. Например, если имеются три папки, c:\folder1, c:\folder2 и c:\documents, то можно создать точки перехода к папке c:\documents таким образом, что она будет казаться подпапкой других двух папок, т.е. на диске будут существовать папки c:\folder1\documents и c:\folder2\documents.

Изначально предполагалось, что в поставку будет входить специальная утилита linkd.exe, предназначенная для создания Directory Junctions, однако сейчас эта программа не включена в Win2000 и поставляется в составе Resource Kit. Также Directory Junctions могут быть созданы при помощи API, однако это потребует написания собственной программы.

На первый взгляд, Directory Junctions и Distributed File System выполняют одни и те же задачи, так как оба этих сервиса создают видимость единого дерева папок, в действительности состоящих из множества распределённых папок. Однако между ними есть несколько существенных различий:

  • Система DFS использует службу Active Directory для хранения своей информации
  • Благодаря использованию Active Directory система DFS может обеспечивать защиту от сбоев и выравнивание нагрузки на систему, в то время как Directory Junctions не обеспечивают ни того, ни другого, хотя это и не является необходимым в контексте локального компьютера
  • Система DFS в основном нацелена на объединение сетевых ресурсов в единое пространство имён, в то время как Directory Junctions связывают только локальные ресурсы
  • DFS может работать с использованием нескольких файловых систем, а Directory Junctions основаны только на NTFS 5.0
  • Система DFS требует программы-клиента, а Directory Junctions - нет.

См. также: MSDN: Directory Junctions, MSDN: Inside Win2K NTFS, Part 1.

Mount Points - точки подключения томов

Mount Points (точки подключения) по сути являются тем же самым, что и Directory Junctions, однако позволяют лишь подключать корневую папку одного раздела к папке на другом разделе диска. Mount Points создаются с использованием Reparse Points, и, следовательно, нуждаются в NTFS 5.0.

Mount Points полезны для увеличения размеров раздела без фактического изменения структуры разделов на диске. Например, можно создать точку подключения диска D: в качестве папки C:\Documents, что приведёт в итоге к видимости увеличения доступного на диске C: пространства.
См. также: MSDN: Volume Mount Points

Hard Links - жёсткие ссылки

Hard Link - это когда один и тот же файл имеет два имени. Допустим, один и тот же файл имеет имена 1.txt и 2.txt: если пользователь сотрёт файл 1, останется файл 2. Если сотрёт 2 - останется файл 1, то есть оба имени, с момента создания, совершенно равноправны. Файл физически стирается лишь тогда, когда будет удалено его последнее имя. Жёсткая ссылка может быть создана только в пределах одного раздела диска (естественно, файловая система должна поддерживать жёсткие ссылки).
См. также: MSDN: Hard Links, Q106166 - Windows NT Backup and Hard Links.

Symbolic Links - символическая ссылка

Гораздо более практичная возможность, позволяющая делать виртуальные каталоги - ровно так же, как и виртуальные диски командой subst в DOSе. Применения достаточно разнообразны: во-первых, упрощение системы каталогов. Если вам не нравится каталог "Documents and settings\Administrator\Documents", вы можете прилинковать его в корневой каталог - система будет по прежнему общаться с каталогом с дремучим путём, а вы - с гораздо более коротким именем, полностью ему эквивалентным.

Символические ссылки (SymLink) на NTFS поддерживаются, начиная с Windows Vista (NT 6.0). Они представляют собой улучшеный вариант связей каталогов - символические ссылки могут указывать как на папки, так и на файлы, как на локальные, так и на сетевые, при этом поддерживаются относительные пути.

См. также: MSDN: Symbolic Links, Windows 2000 Magazine: Inside Win2K NTFS, Part 1.

Sparse File - разрежённый (распределённые) файл

NTFS5 поддерживает разрежённые файлы, которые состоят из больших областей последовательных нулевых разрядов. Такой файл можно пометить как разрежённый и дать файловой системе возможность выделять место для хранения только значимых разрядов данного файла. NTFS хранит информацию только о том, где размещены значимые данные. Подобный способ позволяет оптимально распределять дисковую память на томах NTFS при хранении разрежённых файлов и обработке этих файлов приложениями.
См. также: MSDN: Sparse Files, Возможности NTFS.

Числовая сортировка

В Windows XP изменён алгоритм сортировки, который операционная система использует при выводе списка файлов. Выполняется не строковая сортировка, а числовая. Far Manager также позволяет использовать числовую сортировки в стиле Windows XP - ведущие нули в имени файла не учитываются. Следующий пример показывает как сортируются файлы:
Режим включён (Windows XP) | Режим выключен (Windows 2000)
Ie4_01 | Ie4_01
Ie4_128 | Ie4_128
Ie5 | Ie401sp2
Ie6 | Ie5
Ie401sp2 | Ie501sp2
Ie501sp2 | Ie6
5.txt | 11.txt
11.txt | 5.txt
88.txt | 88.txt

См. также: Q319827 - The Sort Order for Files and Folders Whose Names....

Маски файлов

Маски файлов часто используются в командах Far Manager для выбора отдельных файлов и папок или их групп. Маски могут включать обычные допустимые в именах файлов символы, '*' и '?', а также специальные выражения:
Метасимвол | Описание
* | Любое количество символов
? | Любой символ
[c,x-z] | Любой символ из находящихся в квадратных скобках. Допускаются и отдельные символы, и их диапазоны.
Например, файлы ftp.exe, fc.exe и f.ext могут быть выбраны с помощью маски f*.ex?, маска *co* выберет и color.ini, и edit.com, маска [c-f,t]*.txt может выбрать config.txt, demo.txt, faq.txt и tips.txt.

Во многих командах Far Manager можно задать несколько разделённых запятыми или точкой с запятой масок. Например, чтобы выбрать все документы, вы можете ввести *.doc,*.txt,*.wri в команде "Пометить группу".

Допускается заключать любую из масок (но не весь список) в кавычки. Например, это нужно делать, когда маска содержит один из символов-разделителей (запятую или точку с запятой), чтобы такая маска не была спутана со списком.

В некоторых ситуациях (поиск файлов, пометка файлов, ассоциации файлов, группы сортировки и раскраска файлов) можно использовать маски исключения. Маска исключения есть одна или несколько масок файлов, которой не должны соответствовать имена требуемых файлов, она отделяется от основной маски символом '|'.

Примеры использования масок исключения:
  1. *.cpp
    Все файлы с расширением cpp.
  2. *.*|*.bak,*.tmp
    Все файлы, кроме файлов с расширением bak и tmp.
  3. *.*|
    Ошибка - введён спецсимвол '|', но сама маска исключения не указана.
  4. *.*|*.bak|*.tmp
    Ошибка - спецсимвол '|' не может встречаться более одного раза.
  5. |*.bak
    Обрабатывается как '*|*.bak'

Типы колонок

Допускаются следующие типы колонок:
N - имя файла, допускаются модификаторы (например "MOR"):
M - показывать символы пометки;
O - показывать имена без путей (предназначено в основном для подключаемых модулей);
R - выравнивать не умещающиеся имена по правому краю (дополнительно F - выравнивать все имена по правому краю),
N - не отображать расширения файлов.
X - расширение файла, допускаются модификаторы:
R - выравнивать расширение по правому краю.
S - размер файла.
Для размеров допускаются модификаторы:
C - форматировать размер файла запятыми;
T - использовать 1000 вместо 1024 как делитель, если ширины колонки не хватает для показа полного размера файла.
F - размер файла выводится в стиле Windows Explorer (т.е. 999 байт отображается как 999, а 1000 байт - как 0.97 KB);
E - экономичный режим, между размером и суффиксом пробел не ставится
P - выделенный размер файла.
Для размеров допускаются модификаторы:
C - форматировать размер файла запятыми;
T - использовать 1000 вместо 1024 как делитель, если ширины колонки не хватает для показа полного размера файла.
F - размер файла выводится в стиле Windows Explorer (т.е. 999 байт отображается как 999, а 1000 байт - как 0.97 KB);
E - экономичный режим, между размером и суффиксом пробел не ставится
G - размер потоков файла.
Для размеров допускаются модификаторы:
C - форматировать размер файла запятыми;
T - использовать 1000 вместо 1024 как делитель, если ширины колонки не хватает для показа полного размера файла.
F - размер файла выводится в стиле Windows Explorer (т.е. 999 байт отображается как 999, а 1000 байт - как 0.97 KB);
E - экономичный режим, между размером и суффиксом пробел не ставится
D - дата модификации файла
T - время модификации файла
DM - дата и время модификации файла
Допускаются модификаторы:
B - краткий (в стиле Unix) формат времени файла;
M - использование текстовых имён месяцев;
DC - дата и время создания файла
Допускаются модификаторы:
B - краткий (в стиле Unix) формат времени файла;
M - использование текстовых имён месяцев;
DA - дата и время последнего доступа к файлу
Допускаются модификаторы:
B - краткий (в стиле Unix) формат времени файла;
M - использование текстовых имён месяцев;
DE - дата и время изменения файла
Допускаются модификаторы:
B - краткий (в стиле Unix) формат времени файла;
M - использование текстовых имён месяцев;
A - атрибуты файла
Z - описание файла
O - владелец файла
Допускаются модификаторы:
L - отображать также имя домена
LN - количество жёстких ссылок
F - количество потоков
C0..C99 - пользовательские типы колонок.
Если описание типов колонок содержит более одной колонки имени файла, панель файлов будет отображаться в многоколоночной форме.

Ширина колонок

Строка ColumnWidths в структуре PanelMode описывает ширину колонок панели (например, "0,8,0,5").

Формат строки простой - числа (представляющие ширину колонки) разделённые запятой.

Если ширина равна 0, то используется значение по умолчанию. Если ширина колонки с именем, описанием или владельцем равна 0, она будет подсчитана автоматически, в зависимости от ширины панели. Для правильной работы с различной шириной экрана настоятельно рекомендуется, чтобы в каждом режиме просмотра была хотя бы одна колонка с автоматически вычисляемой шириной.

При использовании 12-часового формата времени надо увеличить на единицу стандартную ширину колонки времени файла или колонки времени и даты файла. После дальнейшего увеличения в этих колонках также будут показаны секунды и миллисекунды.

Для показа года в 4-хсимвольном формате нужно увеличить ширину колонки даты на 2.

Фокус ввода элементов диалога

Для распределения сообщений от клавиатуры используется концепция так называемого клавиатурного фокуса ввода. Фокус ввода - это атрибут, который присваивается элементу диалога. Если элемент имеет фокус ввода, то он получает все клавиатурные сообщения (в основном :-) из системной очереди Far Manager.

Менеджер диалогов Far Manager может передавать фокус ввода от одного элемента другому. Когда вы нажимаете клавиши Tab, Shift+Tab или Alt+Символ, фокус ввода передаётся следующему/предыдущему элементу диалога (или элементу диалога, имеющему соответствующую горячую клавишу).

Функция обработки диалога может проследить за получением и потерей фокуса ввода. Когда элемент получает фокус ввода, функции-обработчику передаётся сообщение DN_GOTFOCUS. Когда элемент теряет фокус ввода, функции-обработчику передаётся сообщение DN_KILLFOCUS. В ответ на сообщение DN_KILLFOCUS функция обработки диалога может запретить потерю фокуса ввода, вернув значение -1. Сообщение DN_GOTFOCUS носит чисто информативный характер, т.е. вы не можете отменить данное событие, как таковое.

Программный интерфейс Dialog API Far Manager содержит два сообщения, позволяющие узнать или изменить элемент, владеющий фокусом ввода. Эти сообщения имеют соответственно имена DM_GETFOCUS и DM_SETFOCUS.

Ниже перечислены элементы диалога, которые могут иметь клавиатурный фокус ввода (при условии, что для этих элементов не выставлены флаги DIF_NOFOCUS и/или DIF_DISABLE):

Элемент | Описание
DI_BUTTON | Кнопка (Push Button).
DI_CHECKBOX | Контрольный переключатель (Check Box).
DI_COMBOBOX | Комбинированный список.
DI_EDIT | Поле ввода.
DI_FIXEDIT | Поле ввода фиксированного размера.
DI_LISTBOX | Окно списка.
DI_PSWEDIT | Поле ввода пароля.
DI_RADIOBUTTON | Селекторная кнопка (Radio Button).
DI_USERCONTROL | Элемент управления, определяемый программистом.


ЧАВО - Часто задаваемые вопросы

главная

Общие вопросы

  1. Как мне спрятать курсор?
  2. А как перевести в нужную позицию?
  3. Чтобы плагин работал и в редакторе и в shell (и на панели) что нужно ставить во флагах: Info->Flags=?????;
  4. Возможно динамическое отключение/подключение плагина не перезапуская FAR?
  5. Plug-in`ы в редакторе срабатывают только при активизации? А можно ли сварганить такой, чтобы в фоновом режиме работал?
  6. А можно в одном DLL-модуле держать несколько плагинов...
  7. ... а потом различать что хотел пользователь по параметру Item в функции OpenPlugin - правильно?
  8. Возможно ли при нынешнем API сделать плагин, работающий в фоновом режиме?
  9. Есть файл, который можно открыть плагином. Могy ли я как-то об этом yзнать? Лучше всего отдать командy на cd тyда и получить ответ - смогли/не смогли.
  10. Как бы это из плагинового модуля получить полный путь до него самого?...
  11. Можно ли из плагина управлять переключением фоновых экранов ФАРа?
  12. А как фаp определяет, что в клипборде лежит именно вертикальный блок?
  13. На чём стоит кypсоp в текущей панели?...
  14. Нельзя ли пpи перерисовке любой панели перерисовывать заголовок окна...
  15. Откуда FAR берёт процедуры для копирования/удаления/... файлов?
  16. Как можно получить имя каталога, из которого запущен FAR?
  17. А как уменьшить размер DLL?
  18. А что за дупы в клипборде идут, зачем 2 раза одну и ту же в Clipboard помещать?
  19. Как определить что есть "связь каталогов"...
  20. ...что скрывается по именем '\\?\Volume{...'
  21. А ещё что нить полезного про символические ссылки можно узнать?
  22. Можно ли получить для редактируемого файла флаг изменён...
  23. Как узнать имя файла, загруженного во вьюер?
  24. Возможно ли каким-то способом в FSF.ProcessName...
  25. Как Windows "сбрасывает" имя файла из Проводника в консольное окно?
  26. Почему-то не работает ProcessKey...
  27. Можно ли из плагина перейти на определённый файл в директории?
  28. Как из плагина запустить что-нибудь? И как показать вывод этой программы под панелями?

Диалоги

  1. Если я не использую функцию Dialog работы с диалогом, то каким образом обрабатывать ввод данных? Самому писать?
  2. Если я использую Dialog, а в нём строку ввода, то будет ли работать функции ProcessEditorInput и ProcessEditorEvent для этого элемента управления?
  3. Можно ли динамически в Dialog менять элементы типа Static (их заголовки)?
  4. Мне не хватает того набора управляющих элементов, которые обрабатывает FAR...
  5. А что это ListBox и ComboBox полуфабрикатные какие-то?
  6. Почему в диалоге "нового" стиля не срабатывают кнопки на закрытие окна?
  7. И что - мне теперь самому закрывать диалог?
  8. А если я мышкой - оно придёт или ещё ловить DN_MOUSECLICK?
  9. И DefaultButton самому обрабатывать?
  10. SEPARATOR не желает доходить до правого конца рамки...
  11. А можно как-нибудь выключить автовыбор элемента мышью в листе...

Общие вопросы

  1. Q: Как мне спрятать курсор?
    A: Windows API console API: SetConsoleCursorInfo , только не забудь его потом вернуть на место.

  2. Q: А как перевести в нужную позицию?
    A: Там же: SetConsoleCursorPosition

  3. Q: Чтобы плагин работал и в редакторе и в shell (и на панели) что нужно ставить во флагах: Info->Flags=?????;
    A: PF_EDITOR

  4. Q: Возможно динамическое отключение/подключение плагина не перезапуская FAR?
    A: Да.

  5. Q: Плагины в редакторе срабатывают только при активизации? А можно ли сварганить такой, чтобы в фоновом режиме работал?
    A: Можно. Экспортировать ProcessEditorInputW и ему будет приходить все нажатия клавиш в редакторе.

  6. Q: А можно в одном DLL-модуле держать несколько плагинов... Несколько функций, так сказать... И чтобы каждый вызывался, как будто бы находился в отдельном DLL-файле (пусть даже с полной загрузкой всего DLL`я)...
    A: Да. В PluginInfo можно указать несколько строк, добавляемых к plugins menu. Но это не является "хорошим тоном".

  7. Q: ...а потом различать что хотел пользователь по параметру Item в функции OpenPlugin?
    A: Правильно.

  8. Q: Возможно ли при нынешнем API сделать плагин, работающий в фоновом режиме?
    A: Разве что в редакторе. В панелях такое не поддерживается.

  9. Q: Есть файл, который можно открыть плагином. Могу ли я как-то об этом узнать? Лучше всего отдать команду на cd туда и получить ответ - смогли/не смогли.
    A: Нет, api для взаимодействия между плагинами в FAR отсутствует. Тут одной проверкой на принадлежность файла не обойтись.

  10. Q: Как бы это из плагинового модуля получить полный путь до него самого?...
    A: В функцию SetStartupInfoW far передаёт указатель на структуру PluginStartupInfo. Полное имя модуля содержится в поле ModuleName оной структуры.

  11. Q: Можно ли из плагина управлять переключением фоновых экранов FAR?
    A: Можно.

  12. Q: А как FAR определяет, что в клипборде лежит именно вертикальный блок?
    A: У вертикального блока clipboard format - "FAR_VerticalBlock"

  13. Q: Скажи, а что - никак нельзя узнать, на чём стоит курсор в текущей панели? Т.е. меня интересует - на каталоге или на файле...
    A:
    Control(FCTL_GETPANELINFO);
Control(FCTL_GETPANELINFO);
PanelInfo.PanelItems[PanelInfo.CurrentItem].FindData.dwFileAttributes

  14. Q: Нельзя ли пpи перерисовке любой панели перерисовывать заголовок окна? По моему, это будет проще и быстрее, чем плагину вызывать FCTL_REDRAWPANEL.
    A: Насчёт быстрее - не факт. Если заголовок не изменён плагином, как оно обычно и бывает, FAR перерисует его вхолостую.

  15. Q: Откуда FAR берёт процедуры для копирования/удаления/... файлов?
    A: Из Windows API.
    Копирование: CreateFile +ReadFile +WriteFile +CloseHandle или CopyFile (Ex), в зависимости от ОС и опции "Use system copy routine".
    Удаление: DeleteFile или SHFileOperation в зависимости от опции "Delete to Recycle Bin"

  16. Q: Как можно получить имя каталога, из которого запущен FAR?
    A:
    char lpName[_MAX_PATH], lpFullPath[_MAX_PATH];
LPTSTR lpFile;
GetModuleFileName

 (NULL,lpName,sizeof(lpName));
GetFullPathName

 (lpName,sizeof(lpFullPath),lpFullPath,&lpFile);
*lpFile='\0';

  17. Q: А как уменьшить размер DLL - уж больно "жирный" модуль получается?
    A:
    1. В разделе "Статьи" есть несколько заметок на эту тему.
    2. Плагинописателям, пишущим на Visual C++ и борющимся за уменьшение размера плагинов, настоятельно рекомендуется прочитать: http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx

  18. Q: А что за дупы в клипборде идут, зачем 2 раза одну и ту же в Clipboard помещать?
    A: Если поместить текст в clipboard в каком-то одном формате, а программа просит его в другом, то Windows занимается перекодировкой самостоятельно, и очень часто делает это коряво. Псевдографика портится, иногда вместо русских букв остаются одни '?', конкретные глюки зависят от версии Windows и комбинации исходного и запрашиваемого форматов. Если же поместить все форматы сразу, то Windows находит нужный и использует его без всяческих перекодировок.

  19. Q: Как определить что есть "связь каталогов" - простая ссылка на каталог или монтированный диск.
    A: Основное правило - связи каталогов - ТОЛЬКО ДЛЯ КАТАЛОГОВ! Значит нам нужно узнать - "А не каталог ли ЭТО?". На это указывает файловый атрибут FA_DIREC (или FILE_ATTRIBUTE_DIRECTORY).
    Едем дальше.
    Нам достоверно известно, что любые связи каталогов имеют атрибут FILE_ATTRIBUTE_REPARSE_POINT - проверяем его.
    Вызываем
    FSF.GetReparsePointInfo(FullFolderName,DestName,sizeof(DestName))
    Эта функция возвращает нам для некоторого заданного пути "FullFolderName" некий реальный путь "DestName", который имеет суть:
    1. "\??\D:\Junc..."
      симлинк на каталог.
    2. "\\?\Volume{..."
      монтированный диск.

    ПРИЧЁМ! Нас совершенно не интересуют первые 4 символа! Следовательно достаточно сделать проверку 7 символов, начиная с четвёртого:
    if(!strncmp(JuncName+4,"Volume{",7))
{
  // это явно монтированный диск!
}
else
{
  // простая ссылка на каталог
}

  20. Q: Да. Но ведь интересно знать, что скрывается по именем '\\?\Volume{...'?
    A: Проще простого. Для этого вызовем функцию
    FSF.GetPathRoot(JuncName,Root);
    которая возвращает реальный корень в одной из двух реинкарнаций:
    1. "D:\"
    2. "\\?\Volume{..."

    второй случай - "тяжёлый" :-) - здесь видимо на уровне системы (в менеджере дисков) для данного диска удалили буковку... Ну, что бы не маячила, т.с. ;-)

  21. Q: А ещё что нить полезного про символические ссылки можно узнать?
    A: А как же :-) Правда не совсем про символические ссылки, но...
    Например, мы можем узнать ещё порцию полезностей для монтированных дисков. Здесь всё просто - вызываем стандартную GetVolumeInformation()
    Т.е. нам уже известен корень - "GetPathRoot(JuncName,Root);", осталось получить информацию (например, возможности файловой системы по поддержке расширенных атрибутов - сжатие и шифрование и тип файловой системы):
    DWORD FileSystemFlags;
char FSysName[MAX_PATH];

if (GetVolumeInformation(Root,NULL,0,NULL,NULL,
                        &FileSystemFlags,FSysName,sizeof(FSysName)))
{
  if (FileSystemFlags & FILE_FILE_COMPRESSION)
  {
    // файловая система поддерживает сжатие файлов
  }

  if (FileSystemFlags & FILE_SUPPORTS_ENCRYPTION)
  {
    // файловая система поддерживает шифрование файлов
  }
}

    Типичная функция проверки возможности создания... жёстких ссылок могла бы выглядеть так:
    BOOL CanCreateHardLinks(char *TargetFile,char *HardLinkName)
{
  char RootTarget[MAX_PATH],RootHardLink[MAX_PATH],FSysName[MAX_PATH];
  GetPathRoot(TargetFile,RootTarget);
  GetPathRoot(HardLinkName,RootHardLink);

  if(!strcmp(RootTarget,RootHardLink)) // тот же корень (то же диск)?
  {
    DWORD FileSystemFlags;

    if(GetVolumeInformation(RootTarget,NULL,0,NULL,NULL,&FileSystemFlags,
                            NULL,0))
    {
      if(FileSystemFlags&FILE_SUPPORTS_HARD_LINKS)
        return TRUE;
    }
  }
  return FALSE;
}

  22. Q: Можно ли получить для редактируемого файла флаг изменён/неизменен? Я сходу не нашёл, а ведь FAR это знает, звёздочку в верхней строке показывает.
    A: См. описание структуры EditorInfo, конкретно значения поле EditorInfo.CurState.

  23. Q: Как узнать имя файла, загруженного во вьюер?
    A: Вот такой вот код запросто узнаёт текущее имя в программе просмотра:
    WindowInfo wi;
wi.Pos=-1;
Info.AdvControl(Info.ModuleNumber,ACTL_GETWINDOWINFO,&wi);
    всё. в wi.Name лежит имя файла.

  24. Q: Возможно ли каким-то способом в FSF.ProcessName, при сравнении маски "OUTBOUND\\????????.MO?" и файла "С:\\FILES\\OUTBOUND\\0000ee2c.mod" получить TRUE, а с файлом "C:\\MUSIC\\assol_1.mod" обломаться? PN_SKIPPATH не подходит. При наличии "\\" в маске он, похоже, никогда не вернёт TRUE.
    A: Сравнивай с маской "*\\OUTBOUND\\????????.MO?" без использования PN_SKIPPATH.

  25. Q: Как Windows "сбрасывает" имя файла из Проводника в консольное окно?
    A: Vasily Titsky: "...Если кратко, то когда в консольное приложение идёт вставка текста (через системное меню, или кидая ярлык) то добрая ОС делает вот что: если в текущем Keyboard Layout приложения и очередной код символа не пересекаются (текущий язык - english, а вставлять надо символ русского алфавита; или наоборот), то она "эмулирует" ввод этого символа через Alt+цифры. Например, при вставке русской 'А' , будет сгенерировано: нажатие Alt, нажатие '1', отпускание '1', нажатие '2', отпускание '2', нажатие '8', отпускание '8', отпускание Alt. При вставке символов с кодом, меньшим 99 (? - не проверял) имитируется нажатие 2-х цифр. Остаётся только правильно это обнаружить и обработать..."

  26. Q: Почему-то не работает ProcessKey? Пишу в Delphi:
    function ProcessKey(hPlugin: THandle; Key: Integer; ControlState: Word): integer; stdcall;
begin
  windows.Beep(300,200);
  //возвращаем False для дальнейшей обработки FARом
  result:=0;
end;
    По идее должен выдаваться сигнал при любом нажатии клавиши - этого не происходит. То же самое, если делаю это для какой-то конкретной клавиши.
    A: FAR вызывает функцию ProcessPanelInputW для активной плагиновой панели.

  27. Q: Можно ли из плагина перейти на определённый файл в директории?
    A:
    {
  struct PanelInfo PInfo;
  Info.PanelControl(INVALID_HANDLE_VALUE,FCTL_GETPANELINFO,&PInfo);

  // установить позицию на элементе панели selectItem

  struct PanelRedrawInfo PRI;
  char Name[MAX_PATH], Dir[MAX_PATH*5];
  int pathlen;

  strcpy(Name,Info.FSF->PointToName(selectItem));
  pathlen=Info.FSF->PointToName(selectItem)-selectItem;

  if(pathlen)
    memcpy(Dir,selectItem,pathlen);

  Dir[pathlen]=0;
  Info.FSF->Trim(Name);
  Info.FSF->Trim(Dir);
  Info.FSF->Unquote(Name);
  Info.FSF->Unquote(Dir);

  if(*Dir)
    Info.PanelControl(INVALID_HANDLE_VALUE,FCTL_SETPANELDIR,&Dir);
  Info.PanelControl(INVALID_HANDLE_VALUE,FCTL_GETPANELINFO,&PInfo);

  PRI.CurrentItem=PInfo.CurrentItem;
  PRI.TopPanelItem=PInfo.TopPanelItem;

  for(int J=0; J < PInfo.ItemsNumber; J++)
  {
    if(!Info.FSF->LStricmp(Name,Info.FSF->PointToName(PInfo.PanelItems[J].FindData.cFileName)))
    {
      PRI.CurrentItem=J;
      PRI.TopPanelItem=J;
      break;
    }
  }
  Info.PanelControl(INVALID_HANDLE_VALUE,FCTL_REDRAWPANEL,&PRI);
}

  28. Q: Как из плагина запустить что-нибудь? И как показать вывод этой программы под панелями?
    A:
    Info.PanelControl(INVALID_HANDLE_VALUE,FCTL_GETUSERSCREEN,NULL);

if (CreateProcess(NULL,"ls.exe",NULL,NULL,TRUE,0,NULL,NULL,&si,&pi))
{
  WaitForSingleObject( pi.hProcess, INFINITE );
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
}

Info.PanelControl(INVALID_HANDLE_VALUE,FCTL_SETUSERSCREEN,NULL);

наверх

Диалоги

  1. Q: Если я не использую функцию DialogRun работы с диалогом, то каким образом обрабатывать ввод данных? Самому писать?
    A: Можно и самому :-) А можно использовать DialogAPI...

  2. Q: Можно ли динамически в Dialog менять элементы типа Static (их заголовки)?
    A: Если воспользоваться функцией-обработчиком диалога DialogInit - то можно - в функции-обработчике диалога послать ядру DialogAPI сообщение DM_SETTEXT.

  3. Q: Ну ладно, воспользовался этим самым DialogAPI, но мне не хватает того набора управляющих элементов, которые обрабатывает FAR. Ась?
    A: Воспользуйся элементом DI_USERCONTROL - отрисовка элемента и управление им - всё во власти плагина!

  4. Q: А что это ListBox и ComboBox полуфабрикатные какие-то? Нормально работать с ними ну никак нельзя - для добавления/удаления приходится изголяться.
    A: А что ты хотел от первой версии DialogAPI?

  5. Q: Почему в диалоге не срабатывают кнопки на закрытие окна
    A: Ты сам должен рулить моментом закрытия диалога, исключения: Ctrl-Break - закрывается всегда, Ctrl-Enter - если есть хотя бы одна кнопка с полем DefaultButton=1, то запрос на закрытие с Param1 = номеру текущего элемента, Esc и F10 - здесь можно рулить из обработчика - закрывать или нет.

  6. Q: И что - мне теперь самому закрывать диалог?
    A: Если используешь обработчик диалога - то ДА: поймал событие DN_BTNCLICK, проверил Param1 на нужный номер и заслал ядру диалога сообщение DM_CLOSE.

  7. Q: А если я мышкой - оно придёт или ещё ловить DN_MOUSECLICK?
    A: На твоё усмотрение :-) Сначала мышиное сообщение придёт (проигнорируй его), а за ним и DN_BTNCLICK не задержится...

  8. Q: И DefaultButton самому обрабатывать?
    A: Нет. Для DefaultButton получится следующая цепочка событий: [DN_CONTROLINPUT -> ] DN_BTNCLICK -> DM_CLOSE.

  9. Q: Каким-то образом у меня получилось, что SEPARATOR, что бы я не делал не желал доходить до правого конца рамки, когда сделал с нуля - исправилось.
    A: См. замечания для флага DIF_SEPARATOR

наверх


Дополнительные разделы

главная
  • Авторы
  • Словарь
  • Примеры
  • 'Правила хорошего тона'
  • Вопросы и ответы


Краткое описание - Panel API

главная

коротенько описать....


Краткое описание - Plugin Manager API

главная

коротенько описать....


Краткое описание - Settings API

главная

коротенько описать....


Краткое описание - Viewer API

главная

коротенько описать....


CHAR_INFO

главная | структуры | win32 структуры

Структура CHAR_INFO определяет Unicode- или ANSI-код символа и цветовые атрибуты (передний план и фон) экранной символьной ячейки. Эта структура используется консольными функциями для чтения и записи в консольный экранный буфер.

typedef struct _CHAR_INFO {
  // Unicode or ANSI character
  union {
      WCHAR UnicodeChar;
      CHAR AsciiChar;
  } Char;

  // Text and background colors
  WORD Attributes;
} CHAR_INFO, *PCHAR_INFO;

Элементы

Char
Определяет Unicode- или ANSI-код символа экранной ячейки в зависимости от используемых функций (Unicode или ANSI).
Attributes
Атрибуты можно разделить на два класса: цвет и DBCS. Все константы определены в заголовочном файле Wincon.h:
Атрибут | Описание
FOREGROUND_BLUE | Цвет текста содержит синий.
FOREGROUND_GREEN | Цвет текста содержит зелёный.
FOREGROUND_RED | Цвет текста содержит красный.
FOREGROUND_INTENSITY | Цвет текста усилен.
BACKGROUND_BLUE | Цвет фона содержит синий.
BACKGROUND_GREEN | Цвет фона содержит зелёный.
BACKGROUND_RED | Цвет фона содержит красный.
BACKGROUND_INTENSITY | Цвет фона усилен.
COMMON_LVB_LEADING_BYTE | DBCS: Leading byte.
COMMON_LVB_TRAILING_BYTE | DBCS: Trailing byte.
COMMON_LVB_GRID_HORIZONTAL | DBCS: Grid attribute: top horizontal.
COMMON_LVB_GRID_LVERTICAL | DBCS: Grid attribute: left vertical.
COMMON_LVB_GRID_RVERTICAL | DBCS: Grid attribute: right vertical.
COMMON_LVB_REVERSE_VIDEO | DBCS: Reverse foreground and background attributes.
COMMON_LVB_UNDERSCORE | DBCS: Underscore.
Атрибуты переднего плана (FOREGROUND_*) определяют цвет текста (символов). Атрибуты фона (BACKGROUND_*) определяют цвет, которым будет заполнена текстовая ячейка. Остальные атрибуты (COMMON_LVB_*) используются с DBCS.

Замечания

Смотрите также:
ReadConsoleOutput , ScrollConsoleScreenBuffer , WriteConsoleOutput


CONSOLE_CURSOR_INFO

главная | структуры | win32 структуры
Структура CONSOLE_CURSOR_INFO содержит информацию о консольном курсоре.
typedef struct _CONSOLE_CURSOR_INFO {
  DWORD  dwSize;
  BOOL   bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

Элементы

dwSize
Процент ячейки символа который заполняет курсор. Значение между 0 и 100. Вид курсора меняется, простираясь от полного заполнения ячейки до горизонтальной линии внизу ячейки.
bVisible
Видимость курсора. Если курсор виден, этот элемент равен TRUE.
Смотрите также:
GetConsoleCursorInfo , SetConsoleCursorInfo


COORD

главная | структуры | win32 структуры
Структура COORD определяет координаты ячейки символа в консольном буфере экрана. Начало системы координат (0,0) - левая верхняя ячейка экранного буфера.
typedef struct _COORD {
  SHORT X;
  SHORT Y;
} COORD;

Элементы

X
Горизонтальная координата или значение столбца.
Y
Вертикальная координата или значение ряда.

Замечания

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


FILETIME

главная | структуры | win32 структуры
Структура FILETIME - это 64-х разрядное значение, представляющее число сто-наносекундных интервалов, прошедших с первого января 1601 года (UTC).
typedef struct _FILETIME {
  DWORD dwLowDateTime;
  DWORD dwHighDateTime;
} FILETIME;

Элементы

dwLowDateTime
Младшие 32 бита времени файла
dwHighDateTime
Старшие 32 бита времени файла

Замечания

Не рекомендуется, добавлять или вычитать значения из этой структуры для получения относительного времени. Вместо этого вы можете:

  • Скопировать результирующую структуру в структуру ULARGE_INTEGER
  • Использовать обычную 64-х битную арифметику для значения ULARGE_INTEGER или привести переменную типа FILETIME к типу __int64:
    FILETIME WriteTime1, WriteTime2;

if(*(__int64*) & WriteTime1 == *(__int64*) & WriteTime2)
 ...
Не все файловые системы могут хранить время создания и доступа, и не все они хранят времена одинаковым образом. Например, в FAT время создания задаётся с точностью до 10 миллисекунд, записи - до 2 секунд, а время доступа - 1 день (фактически, дата доступа). У NTFS время доступа имеет точность в 1 час. Таким образом, функция GetFileTime может вернуть время, отличное от установленного функцией SetFileTime. К тому же, FAT хранит времена в локальном часовом поясе, а NTFS - в универсальном синхронизированном времени (UTC).
Смотрите также:
CompareFileTime , GetFileTime, SetFileTime, ULARGE_INTEGER


FOCUS_EVENT_RECORD

главная | структуры | win32 структуры | INPUT_RECORD
Структура FOCUS_EVENT_RECORD используется для информации о сообщениях фокуса в консольной структуре INPUT_RECORD. Эти сообщения используются системой и должны игнорироваться.
typedef struct _FOCUS_EVENT_RECORD {
    BOOL bSetFocus;
} FOCUS_EVENT_RECORD;

Элементы

bSetFocus
Зарезервировано.
Смотрите также:
INPUT_RECORD


GetFileTime

главная | структуры | win32 структуры
Функция GetFileTime возвращает дату и время создания, модификации и последнего доступа к файлу.
BOOL GetFileTime(
  HANDLE hFile,
  CONST FILETIME *lpCreationTime,
  CONST FILETIME *lpLastAccessTime,
  CONST FILETIME *lpLastWriteTime
);

Параметры

hFile
идентифицирует файл, для которого извлекаются дата и время. Файловый дескриптор должен быть создан с доступом GENERIC_READ к файлу.
lpCreationTime
указывает на структуру типа FILETIME, которая получает дату и время создания файла. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.
lpLastAccessTime
указывает на структуру типа FILETIME, которая получает дату и время последнего доступа к файлу. Время последнего доступа включает в себя время, когда в последний раз: в файл записывалась информация, читалась информация из файла, или, в случае исполняемых файлов, файл запускался на исполнение. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.
lpLastWriteTime
указывает на структуру типа FILETIME, указывает на структуру типа FILETIME, которая получает дату и время последней записи в файл. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.

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

В случае успеха возвращается ненулевое значение.
Если функция завершается неудачно, возвращается ноль. Для получения дополнительной информации следует вызвать функцию GetLastError.

Замечания

Файловые системы FAT и NTFS поддерживают время создания файла, время последнего доступа к файлу и время последней записи в файл.

Точность хранения времени Точность хранения времени

  • Точность, с которой сохраняются значения времени для файлов, зависит от используемой операционной системы, файловой системы, сетевой конфигурации. Подробнее см. замечания к структуре FILETIME.

Замечание для NTFS NTFS

  • Когда Windows NT создаёт список каталогов (Проводник, команда DIR, и т.д.) в разделе NTFS, она модифицирует дату/время последнего доступа на каждом обнаруженном каталоге. Если каталогов очень много, это может повлиять на эффективность.
    Семейство Windows NT на файловой системе NTFS позволяет отключать дату/время последнего доступа (см. Disable the NTFS Last Access Time Stamp)
  • Если вы удалите или переименуете файл, а затем достаточно быстро восстановите его, Windows NT может восстановить из кеша некоторые данные о файле: длинное и короткое имя файла, а также дату его создания.

Пример

Следующий пример показывает как получить дату/время модификации файла в виде строки (Windows NT).
BOOL GetLastWriteTime(HANDLE hFile, LPSTR lpszString)
{
  FILETIME ftCreate, ftAccess, ftWrite;
  SYSTEMTIME stUTC, stLocal;

  // получить файловую дату и время
  if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
      return FALSE;

  // преобразовать время модификации в локальное время.
  FileTimeToSystemTime(&ftWrite, &stUTC);
  SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);

  // преобразовать полученное время в строку
  wsprintf(lpszString, "%02d/%02d/%d  %02d:%02d",
      stLocal.wDay, stLocal.wMonth, stLocal.wYear,
      stLocal.wHour, stLocal.wMinute);

  return TRUE;
}
Смотрите также:
FILETIME, GetFileSize , SetFileTime, GetFileType


Структуры и функции Windows API

главная

В данном разделе приведены "вольные" переводы некоторых часто используемых структур и функций из Windows API.

Функции Windows API

Функция | Описание
GetFileTime | возвращает дату и время создания, модификации и последнего доступа к файлу
PeekConsoleInput | считывает данные из указанного консольного входного буфера без удаления
ReadConsoleInput | считывает данные из входного буфера консоли и удаляет их оттуда
SetFileTime | устанавливает дату и время создания, модификации и последнего доступа к файлу
WriteConsoleInput | записывает данные непосредственно в консольный входной буфер

Структуры Windows API

Структура | Описание
CHAR_INFO | определяет код символа и цветовые атрибуты экранной символьной ячейки
CONSOLE_CURSOR_INFO | содержит информацию о консольном курсоре
COORD | определяет координаты ячейки символа в консольном буфере экрана
FILETIME | число сто-наносекундных интервалов, прошедших с 1 января 1601 года
FOCUS_EVENT_RECORD | содержит сообщения фокуса; является членом структуры INPUT_RECORD
INPUT_RECORD | информация о входных сообщениях в консольном входном буфере
KEY_EVENT_RECORD | клавиатурные события консоли; является членом структуры INPUT_RECORD
MENU_EVENT_RECORD | сообщения меню; является членом структуры INPUT_RECORD
MOUSE_EVENT_RECORD | информация о сообщениях мыши в консольном окне; является членом структуры INPUT_RECORD
RECT | определяет координаты левого верхнего и правого нижнего углов прямоугольника
SMALL_RECT | определяет координаты левого верхнего и правого нижнего углов прямоугольника
SYSTEMTIME | хранит дату и время, используя отдельные поля для месяца, дня, года, дня недели, часов, минут, секунд и миллисекунд
WIN32_FIND_DATA | описывает файл, найденный функциями FindFirstFile, FindFirstFileEx или FindNextFile
WINDOW_BUFFER_SIZE_RECORD | информация об изменениях размеров экранного буфера консоли; является членом структуры INPUT_RECORD

Константы Windows API

Константа | Описание
Virtualkeycodes | виртуальные коды клавиш
Смотрите также:
Экспортируемые функции, Сервисные функции, Структуры, Типы и определения


Константы Windows API

главная
Константа | Описание
Virtualkeycodes | виртуальные коды клавиш


Функции Windows API

главная
Функция | Описание
GetFileTime | возвращает дату и время создания, модификации и последнего доступа к файлу
PeekConsoleInput | считывает данные из указанного консольного входного буфера без удаления
ReadConsoleInput | считывает данные из входного буфера консоли и удаляет их оттуда
SetFileTime | устанавливает дату и время создания, модификации и последнего доступа к файлу
WriteConsoleInput | записывает данные непосредственно в консольный входной буфер


Структуры Windows API

главная
Структура | Описание
CHAR_INFO | определяет код символа и цветовые атрибуты экранной символьной ячейки
CONSOLE_CURSOR_INFO | содержит информацию о консольном курсоре.
COORD | определяет координаты ячейки символа в консольном буфере экрана
FILETIME | число сто-наносекундных интервалов, прошедших с 1 января 1601 года
FOCUS_EVENT_RECORD | содержит сообщения фокуса; является членом структуры INPUT_RECORD
INPUT_RECORD | информация о входных сообщениях в консольном входном буфере
KEY_EVENT_RECORD | клавиатурные события консоли; является членом структуры INPUT_RECORD
MENU_EVENT_RECORD | сообщения меню; является членом структуры INPUT_RECORD
MOUSE_EVENT_RECORD | информация о сообщениях мыши в консольном окне; является членом структуры INPUT_RECORD
RECT | определяет координаты левого верхнего и правого нижнего углов прямоугольника
SMALL_RECT | определяет координаты левого верхнего и правого нижнего углов прямоугольника
SYSTEMTIME | хранит дату и время, используя отдельные поля для месяца, дня, года, дня недели, часов, минут, секунд и миллисекунд.
WIN32_FIND_DATA | описывает файл, найденный функциями FindFirstFile, FindFirstFileEx или FindNextFile
WINDOW_BUFFER_SIZE_RECORD | информация об изменениях размеров экранного буфера консоли; является членом структуры INPUT_RECORD


INPUT_RECORD

главная | структуры | win32 структуры
Структура INPUT_RECORD используется для возвращения информации о входных сообщениях в консольном входном буфере. Эти записи могут быть считаны из входного буфера используя функции ReadConsoleInput или PeekConsoleInput, или записаны функцией WriteConsoleInput.
typedef struct _INPUT_RECORD {
 WORD EventType;
 union {
    KEY_EVENT_RECORD KeyEvent;
    MOUSE_EVENT_RECORD MouseEvent;
    WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
    MENU_EVENT_RECORD MenuEvent;
    FOCUS_EVENT_RECORD FocusEvent;
 } Event;
} INPUT_RECORD;

Элементы

EventType
Означает тип входного сообщения и запись события, сохранённую в элементе Event.
Этот элемент может иметь одно из следующих значений:
Событие | Описание
KEY_EVENT | Элемент Event содержит структуру KEY_EVENT_RECORD с информацией о сообщении с клавиатуры.
MOUSE_EVENT | Элемент Event содержит структуру MOUSE_EVENT_RECORD с информацией о сообщении мыши - перемещении или нажатии клавиш.
WINDOW_BUFFER_SIZE_EVENT | Элемент Event содержит структуру WINDOW_BUFFER_SIZE_RECORD с информацией о новом размере экрана консоли.
MENU_EVENT | Элемент Event содержит структуру MENU_EVENT_RECORD. Эти сообщения используются системой и должны игнорироваться.
FOCUS_EVENT | Элемент Event содержит структуру FOCUS_EVENT_RECORD. Эти сообщения используются системой и должны игнорироваться.
Event
Содержит структуры KEY_EVENT_RECORD, MOUSE_EVENT_RECORD, WINDOW_BUFFER_SIZE_RECORD, MENU_EVENT_RECORD или FOCUS_EVENT_RECORD, в зависимости от значения, указанного в EventType.
Смотрите также:
KEY_EVENT_RECORD, MOUSE_EVENT_RECORD, WINDOW_BUFFER_SIZE_RECORD, MENU_EVENT_RECORD, FOCUS_EVENT_RECORD, PeekConsoleInput, ReadConsoleInput, WriteConsoleInput


KEY_EVENT_RECORD

главная | структуры | win32 структуры | INPUT_RECORD
Структура KEY_EVENT_RECORD используется для получения входных событий в консольной структуре INPUT_RECORD.
typedef struct _KEY_EVENT_RECORD {
    BOOL bKeyDown;
    WORD wRepeatCount;
    WORD wVirtualKeyCode;
    WORD wVirtualScanCode;
    union {
        WCHAR UnicodeChar;
        CHAR  AsciiChar;
    } uChar;
    DWORD dwControlKeyState;
} KEY_EVENT_RECORD;

Элементы

bKeyDown
Равно TRUE если клавиша нажата, иначе FALSE.
wRepeatCount
Число повторов нажатия клавиши. Например, когда клавиша нажата, вы можете получить пять сообщений с этим членом равным 1, одно сообщение с равным 5, или несколько сообщений с элементом большим, либо равным 1.
wVirtualKeyCode
Виртуальный код клавиши, определяющий данную клавишу в независимой от устройства форме.
wVirtualScanCode
Виртуальный скан-код клавиши. Определяет устройство-зависимое значение, генерируемое аппаратурой клавиатуры.
uChar
Переведённый Unicode или ASCII символ, в зависимости от того, использовалась Wide- или ANSI-версия функции ReadConsoleInput.
dwControlKeyState
Состояние управляющих клавиш. Может быть комбинацией следующих значений:
Клавиша | Значение | Описание
CAPSLOCK_ON | 0x0080 | CAPS LOCK включён.
ENHANCED_KEY | 0x0100 | Клавиша расширенная.
LEFT_ALT_PRESSED | 0x0002 | Левый ALT нажат.
LEFT_CTRL_PRESSED | 0x0008 | Левый CTRL нажат.
NUMLOCK_ON | 0x0020 | NUM LOCK включён.
RIGHT_ALT_PRESSED | 0x0001 | Правый ALT нажат.
RIGHT_CTRL_PRESSED | 0x0004 | Правый CTRL нажат.
SCROLLLOCK_ON | 0x0040 | SCROLL LOCK включён.
SHIFT_PRESSED | 0x0010 | Клавиша SHIFT нажата.

Замечания

Расширенные клавиши для IBM® 101- и 102-х клавишных клавиатур - это INS, DEL, HOME, END, PAGE UP, PAGE DOWN, клавиши курсора, клавиша divide (/) и ENTER на цифровой части.
Сообщения клавиатурного ввода генерируются, когда любая клавиша, включая управляющую, нажата или отпущена. Однако, когда клавиша ALT нажимается и отпускается, это имеет специальное значение в Windows и такое событие не передаётся приложению. Также сочетание CTRL+C не передаётся, если хендл входной консоли имеет флаг ENABLE_PROCESSED_INPUT.
Смотрите также:
PeekConsoleInput, ReadConsoleInput, WriteConsoleInput, INPUT_RECORD


MENU_EVENT_RECORD

главная | структуры | win32 структуры | INPUT_RECORD
Структура MENU_EVENT_RECORD содержит сообщения меню в консольной структуре INPUT_RECORD. Эти сообщения используются системой и должны игнорироваться.
typedef struct _MENU_EVENT_RECORD {
    UINT dwCommandId;
} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;

Элементы

dwCommandId
Зарезервировано.
Смотрите также:
INPUT_RECORD


MOUSE_EVENT_RECORD

главная | структуры | win32 структуры | input_record
Структура MOUSE_EVENT_RECORD используется консольной структурой INPUT_RECORD для получения сообщений мыши.
typedef struct _MOUSE_EVENT_RECORD {
    COORD dwMousePosition;
    DWORD dwButtonState;
    DWORD dwControlKeyState;
    DWORD dwEventFlags;
} MOUSE_EVENT_RECORD;

Элементы

dwMousePosition
Положение курсора в координатах экранного буфера (структура COORD).
dwButtonState
Состояние клавиш мыши. Младший бит соответствует самой левой кнопке, следующий - самой правой, Следующий бит - следующая за левой клавиша. Далее биты соответствуют клавишам слева направо. Если бит установлен - клавиша нажата.
Определены следующие константы для первых пяти клавиш мыши:

FROM_LEFT_1ST_BUTTON_PRESSED
RIGHTMOST_BUTTON_PRESSED
FROM_LEFT_2ND_BUTTON_PRESSED
FROM_LEFT_3RD_BUTTON_PRESSED
FROM_LEFT_4TH_BUTTON_PRESSED
dwControlKeyState
Состояние управляющих клавиш. Может быть комбинацией следующих значений:
Клавиша | Описание
CAPSLOCK_ON | CAPS LOCK включён.
ENHANCED_KEY | Клавиша расширенная.
LEFT_ALT_PRESSED | Левый ALT нажат.
LEFT_CTRL_PRESSED | Левый CTRL нажат.
NUMLOCK_ON | NUM LOCK включён.
RIGHT_ALT_PRESSED | Правый ALT нажат.
RIGHT_CTRL_PRESSED | Правый CTRL нажат.
SCROLLLOCK_ON | SCROLL LOCK включён.
SHIFT_PRESSED | Клавиша SHIFT нажата.
dwEventFlags
Тип сообщения мыши. Если ноль, то кнопка мыши была нажата или отпущена. Иначе одно из следующих значений:
Событие | Описание
DOUBLE_CLICK | Второе нажатие при двойном щелчке (первое нажатие приходит как обычное сообщение).
MOUSE_MOVED | Позиция мыши изменилась.
MOUSE_WHEELED | Устанавливается при вертикальной прокрутке колёсика на мышке. Если установлен этот флаг, то в старшем слове dwButtonState содержтся значение, кратное WHEEL_DELTA. По умолчанию это значение равно 120, но может изменяться в зависимости от драйвера мыши.
MOUSE_HWHEELED | Windows Vista/2008/7: Устанавливается при горизонтальной прокрутке колёсика на мышке. Если установлен этот флаг, то в старшем слове dwButtonState содержтся значение, кратное WHEEL_DELTA. По умолчанию это значение равно 120, но может изменяться в зависимости от драйвера мыши.

Замечания

Сообщения мыши помещаются во входной буфер, когда консоль имеет установленный флаг ENABLE_MOUSE_INPUT.
Сообщения мыши посылаются в буфер, только если консоль имеет активный клавиатурный фокус и курсор находится в границах консольного окна.
Смотрите также:
COORD, PeekConsoleInput, ReadConsoleInput, WriteConsoleInput, INPUT_RECORD


PeekConsoleInput

главная | структуры | win32 структуры
Функция PeekConsoleInput считывает данные из указанного консольного входного буфера без удаления считанных записей из буфера.
BOOL PeekConsoleInput(
  HANDLE hConsoleInput,
  PINPUT_RECORD lpBuffer,
  DWORD nLength,
  LPDWORD lpNumberOfEventsRead
);

Параметры

hConsoleInput
Дескриптор консольного буфера ввода. Дескриптор должен иметь права GENERIC_READ.
lpBuffer
Указатель на массив структур INPUT_RECORD, который получит данные из входного буфера. Общий размер требуемого массива должен быть меньше чем 64КБ.
nLength
Число элементов в буфере lpBuffer, которое необходимо получить.
lpNumberOfEventsRead
Указатель на 32-х разрядную переменную, которая получит число реально прочитанных элементов.

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

В случае успеха возвращается ненулевое значение.
Если функция завершается неудачно, возвращается ноль. Для получения дополнительной информации вызывайте функцию GetLastError.

Замечания

Если число запрашиваемых элементов превысит число доступных в буфере, будут считаны все доступные. Если не доступно ни одной записи, функция немедленно завершится.

  • Эта функция использует либо Unicode, либо 8-битовые символы из текущей кодовой страницы консоли. Кодовая страница консоли по умолчанию равна системной OEM странице.
    Для смены кодовой страницы используйте функции SetConsoleCP или SetConsoleOutputCP , или используйте команды chcp или mode con cp select=.
Смотрите также:
INPUT_RECORD, ReadConsoleInput, SetConsoleCP , SetConsoleOutputCP , WriteConsoleInput


ReadConsoleInput

главная | структуры | win32 структуры
Функция ReadConsoleInput считывает данные из входного буфера консоли и удаляет их оттуда.
BOOL ReadConsoleInput(
  HANDLE hConsoleInput,
  PINPUT_RECORD lpBuffer,
  DWORD nLength,
  LPDWORD lpNumberOfEventsRead
);

Параметры

hConsoleInput
Дескриптор консольного буфера ввода. Дескриптор должен иметь права GENERIC_READ.
lpBuffer
Указатель на массив структур INPUT_RECORD, который получит данные из входного буфера. Общий размер требуемого массива должен быть меньше чем 64КБ.
nLength
Число элементов в буфере lpBuffer, которое необходимо получить.
lpNumberOfEventsRead
Указатель на 32-х разрядную переменную, которая получит число реально прочитанных элементов.

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

В случае успеха возвращается ненулевое значение.
Если функция завершается неудачно, возвращается ноль. Для получения дополнительной информации вызывайте функцию GetLastError.

Замечания

Если число записей, запрашиваемых параметром nLength превышает число записей, доступных в буфере, будут считаны только доступные. Функция не возвращает управление, пока хоть одна запись не будет прочитана.

Процесс может указать описатель входного буфера консоли в одной из функций ожидания для определения присутствия непрочитанного консольного ввода. Когда входной буфер не пуст, объект входной буфер консоли становится свободным.

Для определения числа непрочитанных сообщений во входном буфере используйте функцию GetNumberOfConsoleInputEvents . Для чтения сообщений без их удаления из буфера используйте PeekConsoleInput. Для удаления всех сообщений из входного буфера используйте функцию FlushConsoleInputBuffer .

  • Эта функция использует либо Unicode, либо 8-битовые символы из текущей кодовой страницы консоли. Кодовая страница консоли по умолчанию равна системной OEM странице.
    Для смены кодовой страницы используйте функции SetConsoleCP или SetConsoleOutputCP , или используйте команды chcp или mode con cp select=.
Смотрите также:
INPUT_RECORD, SetConsoleCP , SetConsoleOutputCP , WriteConsoleInput, PeekConsoleInput, FlushConsoleInputBuffer , GetNumberOfConsoleInputEvents , ReadConsole , ReadFile


RECT

главная | структуры | win32 структуры
Структура RECT определяет координаты левого верхнего и правого нижнего углов прямоугольника.
typedef struct _RECT {
  LONG left;
  LONG top;
  LONG right;
  LONG bottom;
} RECT, *PRECT;

Элементы

left
Определяет X-координату левого верхнего угла прямоугольника.
top
Определяет Y-координату левого верхнего угла прямоугольника.
right
Определяет X-координату правого нижнего угла прямоугольника.
bottom
Определяет Y-координату правого нижнего угла прямоугольника.

Замечания

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


SetFileTime

главная | структуры | win32 структуры
Функция SetFileTime устанавливает дату и время создания, модификации и последнего доступа к файлу.
BOOL SetFileTime(
  HANDLE hFile,
  CONST FILETIME *lpCreationTime,
  CONST FILETIME *lpLastAccessTime,
  CONST FILETIME *lpLastWriteTime
);

Параметры

hFile
идентифицирует файл, для которого устанавливаются дата и время. Файловый дескриптор должен быть создан с доступом GENERIC_WRITE к файлу.
lpCreationTime
указывает на структуру типа FILETIME, которая содержит дату и время создания файла. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.
lpLastAccessTime
указывает на структуру типа FILETIME, которая содержит дату и время последнего доступа к файлу. Время последнего доступа включает в себя время, когда в последний раз: в файл записывалась информация, читалась информация из файла, или, в случае исполняемых файлов, файл запускался на исполнение. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.
lpLastWriteTime
указывает на структуру типа FILETIME, которая содержит дату и время последней записи в файл. Значение этого параметра может быть равно NULL, если приложению не требуется эта информация.

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

В случае успеха возвращается ненулевое значение.
Если функция завершается неудачно, возвращается ноль. Для получения дополнительной информации вызывайте функцию GetLastError.

Замечания

Файловые системы FAT и NTFS поддерживают время создания файла, время последнего доступа к файлу и время последней записи в файл.

Точность, с которой сохраняются значения времени для файлов, зависит от используемой операционной системы, файловой системы, сетевой конфигурации. Подробнее см. замечания к структуре FILETIME.

Замечание для FAT FAT

  • Точность значения времени для файла в файловой системе FAT - 2 секунды. Точность значения времени для файлов в других файловых системах, например, на сетевых дисках, зависит от файловой системы, но также может быть ограничена удалённым устройством.

Пример

Следующий пример показывает, как установить дату/время модификации файла в значение текущего системного времени.
BOOL SetFileToCurrentTime(HANDLE hFile)
{
  FILETIME ft;
  SYSTEMTIME st;

  GetSystemTime(&st);                 // получить текущее время
  SystemTimeToFileTime(&st, &ft);     // преобразовать в файловый формат
  return SetFileTime(hFile,           // установить дату/время модификации файла
              (LPFILETIME) NULL, (LPFILETIME) NULL, &ft);
}
Смотрите также:
FILETIME, GetFileSize , GetFileTime, GetFileType


SMALL_RECT

главная | структуры | win32 структуры
Структура SMALL_RECT определяет координаты левого верхнего и правого нижнего углов прямоугольника.
typedef struct _SMALL_RECT {
  SHORT Left;
  SHORT Top;
  SHORT Right;
  SHORT Bottom;
} SMALL_RECT;

Элементы

Left
X-координата левого верхнего угла прямоугольника.
Top
Y-координата левого верхнего угла прямоугольника.
Right
X-координата правого нижнего угла прямоугольника.
Bottom
Y-координата правого нижнего угла прямоугольника.

Замечания

Эта структура используется консольными функциями для определения прямоугольных областей консольного экранного буфера, где координаты определяют ряды и столбцы ячеек символов экранного буфера.
Смотрите также:
RECT


SYSTEMTIME

главная | структуры | win32 структуры
Структура SYSTEMTIME хранит дату и время, используя отдельные поля для месяца, дня, года, дня недели, часа, минут, секунд и миллисекунд.
typedef struct _SYSTEMTIME {
  WORD wYear;
  WORD wMonth;
  WORD wDayOfWeek;
  WORD wDay;
  WORD wHour;
  WORD wMinute;
  WORD wSecond;
  WORD wMilliseconds;
} SYSTEMTIME;

Элементы

wYear
Указывает текущий год (1601 - 30827).
wMonth
Текущий месяц; Январь = 1, Февраль = 2, и так далее.
wDayOfWeek
Текущий день недели; Воскресенье = 0, Понедельник = 1, и так далее.
wDay
Текущий день месяца.
wHour
Час (0-23).
wMinute
Минуты (0-59).
wSecond
Секунды (0-59).
wMilliseconds
Миллисекунды (0-999).

Замечания

Не рекомендуется добавлять или вычитать значения из структуры SYSTEMTIME для получения относительного времени. Вместо этого вы должны

  • Конвертировать структуру в FILETIME, используя функцию SystemTimeToFileTime .
  • Скопировать результирующую структуру FILETIME в структуру ULARGE_INTEGER .
  • Использовать обычную 64-х битную арифметику со значениями ULARGE_INTEGER или привести переменную типа FILETIME к типу __int64:
    FILETIME WriteTime1, WriteTime2;

if(*(__int64*) & WriteTime1 == *(__int64*) & WriteTime2)
 ...
Смотрите также:
FILETIME, LARGE_INTEGER , GetSystemTime , SetSystemTime


Виртуальные коды клавиш

главная
В этой таблице приведены символические константы, шестнадцатеричные коды и клавиатурные эквиваленты для кодов виртуальных клавиш, используемых семейством операционных систем Microsoft Windows. Коды перечислены в числовом порядке.
Символическое имя | Значение (hex) | Мышиные, клавиатурные эквиваленты
VK_LBUTTON | 01 | Левая кнопка мыши
VK_RBUTTON | 02 | Правая кнопка мыши
VK_CANCEL | 03 | Обработка Control-break
VK_MBUTTON | 04 | Средняя кнопка мыши
VK_XBUTTON1 | 05 | кнопка мыши X1
VK_XBUTTON2 | 06 | кнопка мыши X2
- 07 Не определено
VK_BACK | 08 | BACKSPACE key
VK_TAB | 09 | TAB key
- 0A-0B Зарезервировано
VK_CLEAR | 0C | CLEAR key
VK_RETURN | 0D | ENTER key
- 0E-0F Не определено
VK_SHIFT | 10 | SHIFT key
VK_CONTROL | 11 | CTRL key
VK_MENU | 12 | ALT key
VK_PAUSE | 13 | PAUSE key
VK_CAPITAL | 14 | CAPS LOCK key
VK_KANA | 15 | Input Method Editor (IME) Kana mode
VK_HANGUEL | 15 | IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
VK_HANGUL | 15 | IME Hangul mode
- 16 Не определено
VK_JUNJA | 17 | IME Junja mode
VK_FINAL | 18 | IME final mode
VK_HANJA | 19 | IME Hanja mode
VK_KANJI | 19 | IME Kanji mode
- 1A Не определено
VK_ESCAPE | 1B | ESC key
VK_CONVERT | 1С | IME convert (Reserved for Kanji systems)
VK_NONCONVERT | 1D | IME nonconvert (Reserved for Kanji systems)
VK_ACCEPT | 1E | IME accept (Reserved for Kanji systems)
VK_MODECHANGE | 1F | IME mode change request (Reserved for Kanji systems)
VK_SPACE | 20 | Пробел
VK_PRIOR | 21 | PAGE UP key
VK_NEXT | 22 | PAGE DOWN key
VK_END | 23 | END key
VK_HOME | 24 | HOME key
VK_LEFT | 25 | LEFT ARROW key
VK_UP | 26 | UP ARROW key
VK_RIGHT | 27 | RIGHT ARROW key
VK_DOWN | 28 | DOWN ARROW key
VK_SELECT | 29 | SELECT key
VK_PRINT | 2A | PRINT key
VK_EXECUTE | 2B | EXECUTE key
VK_SNAPSHOT | 2C | PRINT SCREEN key for Windows 3.0 and later
VK_INSERT | 2D | INS key
VK_DELETE | 2E | DEL key
VK_HELP | 2F | HELP key
VK_0 | 30 | 0 key
VK_1 | 31 | 1 key
VK_2 | 32 | 2 key
VK_3 | 33 | 3 key
VK_4 | 34 | 4 key
VK_5 | 35 | 5 key
VK_6 | 36 | 6 key
VK_7 | 37 | 7 key
VK_8 | 38 | 8 key
VK_9 | 39 | 9 key
- 3A-40 Не определено
VK_A | 41 | A key
VK_B | 42 | B key
VK_C | 43 | C key
VK_D | 44 | D key
VK_E | 45 | E key
VK_F | 46 | F key
VK_G | 47 | G key
VK_H | 48 | H key
VK_I | 49 | I key
VK_J | 4A | J key
VK_K | 4B | K key
VK_L | 4C | L key
VK_M | 4D | M key
VK_N | 4E | N key
VK_O | 4F | O key
VK_P | 50 | P key
VK_Q | 51 | Q key
VK_R | 52 | R key
VK_S | 53 | S key
VK_T | 54 | T key
VK_U | 55 | U key
VK_V | 56 | V key
VK_W | 57 | W key
VK_X | 58 | X key
VK_Y | 59 | Y key
VK_Z | 5A | Z key
VK_LWIN | 5B | Left Windows key (Microsoft Natural Keyboard)
VK_RWIN | 5C | Right Windows key (Microsoft Natural Keyboard)
VK_APPS | 5D | Applications key (Microsoft Natural Keyboard)
- 5E Зарезервировано
VK_SLEEP | 5F | Computer Sleep key
VK_NUMPAD0 | 60 | Numeric keypad 0 key
VK_NUMPAD1 | 61 | Numeric keypad 1 key
VK_NUMPAD2 | 62 | Numeric keypad 2 key
VK_NUMPAD3 | 63 | Numeric keypad 3 key
VK_NUMPAD4 | 64 | Numeric keypad 4 key
VK_NUMPAD5 | 65 | Numeric keypad 5 key
VK_NUMPAD6 | 66 | Numeric keypad 6 key
VK_NUMPAD7 | 67 | Numeric keypad 7 key
VK_NUMPAD8 | 68 | Numeric keypad 8 key
VK_NUMPAD9 | 69 | Numeric keypad 9 key
VK_MULTIPLY | 6A | Multiply key (*)
VK_ADD | 6B | Add key (+)
VK_SEPARATOR | 6C | Separator key
VK_SUBTRACT | 6D | Subtract key (-)
VK_DECIMAL | 6E | Decimal key
VK_DIVIDE | 6F | Divide key (/)
VK_F1 | 70 | F1 key
VK_F2 | 71 | F2 key
VK_F3 | 72 | F3 key
VK_F4 | 73 | F4 key
VK_F5 | 74 | F5 key
VK_F6 | 75 | F6 key
VK_F7 | 76 | F7 key
VK_F8 | 77 | F8 key
VK_F9 | 78 | F9 key
VK_F10 | 79 | F10 key
VK_F11 | 7A | F11 key
VK_F12 | 7B | F12 key
VK_F13 | 7C | F13 key
VK_F14 | 7D | F14 key
VK_F15 | 7E | F15 key
VK_F16 | 7F | F16 key
VK_F17 | 80H | F17 key
VK_F18 | 81H | F18 key
VK_F19 | 82H | F19 key
VK_F20 | 83H | F20 key
VK_F21 | 84H | F21 key
VK_F22 | 85H | F22 key
VK_F23 | 86H | F23 key
VK_F24 | 87H | F24 key
- 88-8F Не используются
VK_NUMLOCK | 90 | NUM LOCK key
VK_SCROLL | 91 | SCROLL LOCK key
VK_OEM_NEC_EQUAL | 92 | NEC PC-9800 kbd definitions: '=' key on numpad
VK_OEM_FJ_JISHO | 92 | Fujitsu/OASYS kbd definitions: 'Dictionary' key
VK_OEM_FJ_MASSHOU | 93 | Fujitsu/OASYS kbd definitions: 'Unregister word' key
VK_OEM_FJ_TOUROKU | 94 | Fujitsu/OASYS kbd definitions: 'Register word' key
VK_OEM_FJ_LOYA | 95 | Fujitsu/OASYS kbd definitions: 'Left OYAYUBI' key
VK_OEM_FJ_ROYA | 96 | Fujitsu/OASYS kbd definitions: 'Right OYAYUBI' key
- 97-9F Не используются
VK_LSHIFT | A0 | Left SHIFT key
VK_RSHIFT | A1 | Right SHIFT key
VK_LCONTROL | A2 | Left CONTROL key
VK_RCONTROL | A3 | Right CONTROL key
VK_LMENU | A4 | Left MENU key
VK_RMENU | A5 | Right MENU key
VK_BROWSER_BACK | A6 | Browser Back key
VK_BROWSER_FORWARD | A7 | Browser Forward key
VK_BROWSER_REFRESH | A8 | Browser Refresh key
VK_BROWSER_STOP | A9 | Browser Stop key
VK_BROWSER_SEARCH | AA | Browser Search key
VK_BROWSER_FAVORITES | AB | Browser Favorites key
VK_BROWSER_HOME | AC | Browser Start and Home key
VK_VOLUME_MUTE | AD | Volume Mute key
VK_VOLUME_DOWN | AE | Volume Down key
VK_VOLUME_UP | AF | Volume Up key
VK_MEDIA_NEXT_TRACK | B0 | Next Track key
VK_MEDIA_PREV_TRACK | B1 | Previous Track key
VK_MEDIA_STOP | B2 | Stop Media key
VK_MEDIA_PLAY_PAUSE | B3 | Play/Pause Media key
VK_LAUNCH_MAIL | B4 | Start Mail key
VK_LAUNCH_MEDIA_SELECT | B5 | Select Media key
VK_LAUNCH_APP1 | B6 | Start Application 1 key
VK_LAUNCH_APP2 | B7 | Start Application 2 key
- B8-B9 Зарезервировано
VK_OEM_1 | BA | For the US standard keyboard, the ';:' key
VK_OEM_PLUS | BB | For any country/region, the '+' key
VK_OEM_COMMA | BC | For any country/region, the ',' key
VK_OEM_MINUS | BD | For any country/region, the '-' key
VK_OEM_PERIOD | BE | For any country/region, the '.' key
VK_OEM_2 | BF | For the US standard keyboard, the '/?' key
VK_OEM_3 | C0 | For the US standard keyboard, the '`~' key
- C1-D7 Зарезервировано
- D8-DA Не используются
VK_OEM_4 | DB | For the US standard keyboard, the '[{' key
VK_OEM_5 | DC | For the US standard keyboard, the '\|' key
VK_OEM_6 | DD | For the US standard keyboard, the ']}' key
VK_OEM_7 | DE | For the US standard keyboard, the 'single-quote/double-quote' key
VK_OEM_8 | DF | Used for miscellaneous characters; it can vary by keyboard.
- E0 Зарезервировано
E1 | OEM specific
VK_OEM_102 | E2 | Either the angle bracket key or the backslash key on the RT 102-key keyboard
- E3-E4 OEM specific
VK_PROCESSKEY | E5 | IME PROCESS key
- E6 OEM specific
VK_PACKET | E7 | Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT , SendInput , WM_KEYDOWN , and WM_KEYUP
- E8 Не используется
VK_OEM_RESET | E9 | Only used by Nokia.
VK_OEM_JUMP | EA | Only used by Nokia.
VK_OEM_PA1 | EB | Only used by Nokia.
VK_OEM_PA2 | EC | Only used by Nokia.
VK_OEM_PA3 | ED | Only used by Nokia.
VK_OEM_WSCTRL | EE | Only used by Nokia.
VK_OEM_CUSEL | EF | Only used by Nokia.
VK_OEM_ATTN | F0 | Only used by Nokia.
VK_OEM_FINNISH | F1 | Only used by Nokia.
VK_OEM_COPY | F2 | Only used by Nokia.
VK_OEM_AUTO | F3 | Only used by Nokia.
VK_OEM_ENLW | F4 | Only used by Nokia.
VK_OEM_BACKTAB | F5 | Only used by Nokia.
VK_ATTN | F6 | Attn key
VK_CRSEL | F7 | CrSel key
VK_EXSEL | F8 | ExSel key
VK_EREOF | F9 | Erase EOF key
VK_PLAY | FA | Play key
VK_ZOOM | FB | Zoom key
VK_NONAME | FC | Reserved for future use.
VK_PA1 | FD | PA1 key
VK_OEM_CLEAR | FE | Clear key
FF | Мультимедийные клавиши. См. ScanCode клавиши.


WIN32_FIND_DATA

главная | структуры | win32 структуры
Структура WIN32_FIND_DATA описывает файл, найденный функциями FindFirstFile , FindFirstFileEx или FindNextFile .
typedef struct _WIN32_FIND_DATA {
  DWORD dwFileAttributes;
  FILETIME ftCreationTime;
  FILETIME ftLastAccessTime;
  FILETIME ftLastWriteTime;
  DWORD nFileSizeHigh;
  DWORD nFileSizeLow;
  DWORD dwReserved0;
  DWORD dwReserved1;
  TCHAR cFileName[ MAX_PATH ];
  TCHAR cAlternateFileName[ 14 ];
} WIN32_FIND_DATA;

Элементы

dwFileAttributes
Указывает атрибуты найденного файла. Этот элемент может быть комбинацией следующих значений:
Атрибут | Описание
FILE_ATTRIBUTE_ARCHIVE | Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления.
FILE_ATTRIBUTE_COMPRESSED | Файл или каталог сжат. Для файла это означает, что все данные его сжаты, для каталога - что компрессия по умолчанию применяется ко всем его файлам и подкаталогам.
FILE_ATTRIBUTE_DIRECTORY | Это каталог.
FILE_ATTRIBUTE_ENCRYPTED | Файл или каталог зашифрован. Для файла, это означает, что все данные в файле зашифрованы. Для директория, это означает, что шифрование является умолчанием для вновь созданных файлов и подкаталогов.
FILE_ATTRIBUTE_HIDDEN | Файл скрыт. Такой файл не включается в обычный листинг каталога.
FILE_ATTRIBUTE_NORMAL | У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов.
FILE_ATTRIBUTE_OFFLINE | Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения.
FILE_ATTRIBUTE_READONLY | Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его.
FILE_ATTRIBUTE_REPARSE_POINT | Каталог является точкой повторной обработки.
FILE_ATTRIBUTE_SPARSE_FILE | Файл является т.н. Разрежённый файл.
FILE_ATTRIBUTE_SYSTEM | Этот файл - часть операционной системы.
FILE_ATTRIBUTE_TEMPORARY | Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удалён.
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | Этот файл или каталог не будут индексироваться службой индексирования.
FILE_ATTRIBUTE_VIRTUAL | Этот файл - виртуальный файл.
ftCreationTime
Время создания - структура FILETIME, содержащая время создания файла. FindFirstFile и FindNextFile возвращают время файла в UTC-формате. Эти функции устанавливают элементы FILETIME в ноль, если файловая система, содержащая файл, не поддерживает этот временной атрибут.
Вы можете использовать функцию FileTimeToLocalFileTime для преобразования из UTC в локальное время и тогда использовать функцию FileTimeToSystemTime для преобразования локального времени в структуру SYSTEMTIME содержащую отдельные элементы для месяца, дня, года и так далее...
ftLastAccessTime
Структура FILETIME с временем последнего доступа к файлу (чтение, запись, исполнение).
Для каталогов в этой компоненте содержится информация о времени создания каталога.
На FAT дата для файлов и каталогов будет правильна, но время дня будет всегда установлено на полночь.
Время хранится в UTC формате; элементы структуры установлены в ноль, если файловая система не поддерживает этого свойства.
ftLastWriteTime
Структура FILETIME с временем последней записи в файл (с помощью функций WriteFile или SetEndOfFile ). Время последней записи не обновляется для таких операций, как установка атрибутов файла или изменение дескриптора безопасности (security descriptors).
Для каталогов в этой компоненте содержится информация о времени создания каталога.
Время хранится в UTC формате; элементы структуры установлены в ноль, если файловая система не поддерживает этого свойства.
nFileSizeHigh
Старшее двойное слово 64-х разрядного размера файла в байтах. Размер файла равен (nFileSizeHigh * (1+MAXDWORD)) + nFileSizeLow.
nFileSizeLow
Младшее двойное слово размера файла в байтах.
dwReserved0
Если поле dwFileAttributes содержит атрибут FILE_ATTRIBUTE_REPARSE_POINT, это поле содержит тип точки повторной обработки. В противном случае значение этого поля не определено и не должно использоваться.
dwReserved1
Резерв.
cFileName
Строка с именем файла, заканчивающаяся символом конца строки (0x00).
cAlternateFileName
Альтернативное имя файла (классическая 8.3 (filename.ext) форма).

Замечания

  • Если файл имеет длинное имя, полное имя возвращается в элементе cFileName а усечённая версия формата 8.3 сохраняется в cAlternateFileName. Иначе cAlternateFileName пусто. Как альтернативу вы можете использовать функцию GetShortPathName для возвращения 8.3-вида имени файла.
  • Не все файловые системы позволяют хранить время создания файла и последнего доступа к нему, и не все системы хранят их одинаково. Например, в файловой системе FAT под Windows NT время создания файла записывается с разрешением 10 миллисекунд, время последней модификации - 2 секунды, а время доступа - 1 день (то есть, фактически, записывается только дата доступа). На файловой системе NTFS время доступа имеет разрешение 1 час.
Смотрите также:
FILETIME


WINDOW_BUFFER_SIZE_RECORD

главная | структуры | win32 структуры
Структура WINDOW_BUFFER_SIZE_RECORD используется консольной структурой INPUT_RECORD для информирования о смене в размере экранного буфера консоли.
typedef struct _WINDOW_BUFFER_SIZE_RECORD {
    COORD dwSize;
} WINDOW_BUFFER_SIZE_RECORD;

Элементы

dwSize
Указывает новый размер экранного буфера в символах (структура COORD).

Замечания

Эти сообщения добавляются во входной буфер, когда консоль находится в режиме window-aware (ENABLE_WINDOW_INPUT).

Смотрите также:
INPUT_RECORD, COORD, ReadConsoleInput


WriteConsoleInput

главная | структуры | win32 структуры
Функция WriteConsoleInput записывает данные непосредственно в консольный входной буфер.
BOOL WriteConsoleInput(
  HANDLE hConsoleInput,
  CONST INPUT_RECORD *lpBuffer,
  DWORD nLength,
  LPDWORD lpNumberOfEventsWritten
);

Параметры

hConsoleInput
Дескриптор консольного буфера ввода. Дескриптор должен иметь права GENERIC_WRITE.
lpBuffer
Указатель на массив структур INPUT_RECORD, содержащий данные для записи во входной буфер.
nLength
Число элементов для записи во входной буфер.
lpNumberOfEventsWritten
Указатель на 32-х разрядную переменную, которая получит число реально записанных элементов.

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

В случае успеха возвращается ненулевое значение.
Если функция завершается неудачно, возвращается ноль. Для получения дополнительной информации вызывайте функцию GetLastError.

Замечания

Функция WriteConsoleInput помещает записи INPUT_RECORD в конец входного буфера. Входной буфер при необходимости растёт динамически для хранения необходимого количества записей.

  • Эта функция использует либо Unicode, либо 8-битовые символы из текущей кодовой страницы консоли. Кодовая страница консоли по умолчанию равна системной OEM странице.
    Для смены кодовой страницы используйте функции SetConsoleCP или SetConsoleOutputCP , или используйте команды chcp или mode con cp select=.
Смотрите также:
INPUT_RECORD, ReadConsoleInput, SetConsoleCP , SetConsoleOutputCP , PeekConsoleInput