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); }
Смотрите также: