WindowInfo
Структура
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
Имя окна. Для окон типа
Для панелей - имя текущего файлового объекта.
Для окна помощи - полный путь к просматриваемому HLF-файлу.
Для диалогов и меню - заголовок.
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);
}
Смотрите также: