OpenW
Функция
OpenW
вызывается Far Manager'ом для запуска плагина.
HANDLE WINAPI OpenW( const struct OpenInfo *Info );
Параметры
Info
Указатель на структуру OpenInfo, Far Manager передает служебную информацию об открытом плагине.
В начале функции проверьте, что поле
В начале функции проверьте, что поле
OpenInfo.StructSize >= sizeof(OpenInfo)
.Возвращаемое значение
Eсли функция завершается успешно, то возвращаемое значение - описатель плагина. Этот описатель позже будет передаваться другим функциям плагина для того,
чтобы позволить им различать различные копии загруженного плагина. Формат и содержание описателя не важны для Far Manager'а - они могут быть, к примеру,
адресом внутреннего объекта плагина, или адресом структуры с данными плагина, или любым другим уникальным идентификатором, отличным от нуля.
В случае неудачного завершения функции, возвращаемое значение должно равняться NULL
.
Внимание!
- Если значение поля OpenInfo::OpenFrom, принимаемое плагином, равно
OPEN_FROMMACRO
, то возвращаемое значение формируется по правилам:
- Если плагин вернул0
, макросу возвращаетсяfalse
.
- Если плагин вернул1
илиINVALID_HANDLE_VALUE
, макросу возвращаетсяtrue
.
- Чтобы вернуть макросу более одной величины (или одну величину не-булевого типа), плагин должен заполнить структуру FarMacroCall и вернуть в Far Manager указатель на эту структуру.
- Если плагин хочет открыть панель, он должен поместить её описатель в начальный элемент массиваValues
структуры FarMacroCall и вернуть в Far Manager указатель на эту структуру. Элемент должен быть типаFMVT_PANEL
. Макросу возвращается значениеtrue
.
Замечания
- Вы можете использовать эту функцию для реализации плагинов, работающих без создания файловых панелей. Просто выполните все необходимые действия и верните
NULL
. - В случае, если плагин вызывает функцию после удачного выполнения 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; }