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;
}