# 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
Имя окна. Для окон типа `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