Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Получение списка окон, с возможностью указания типа окна

Автор: VID
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение списка окон, с возможностью указания типа окна

Процедура заполняет список List именами окон, в ОС.
ПАРАМЕТРЫ:
YourApplicationHandle - дескриптор приложения,
вызывающего процедуру (Application.Handle);
ShowOwnWindow - указание на то, что в списке List,
должно быть также имя окна вызвавшего процедуру;
ShowInvisibleWindows - укание на отображение в List имён невидимых окон;
ShowChildWindows - указание на отображение в LIST имён дочерних окон;
ShowNoHeadWindows - отображение списка окон, без заголовков;
ShowMainWindows - отображение родительских окон.

Также для каждой строки списка LIST добавляется объект (Object),
который содержит указатель дескриптор окна.
При обнаружении недостатков, или вопиющей неоптимальности кода - пишите :)

Зависимости: sysutils, classes, windows, UBPFD.GetWordListFromText
Автор:       VID, vidsnap@mail.ru, ICQ:132234868, Махачкала
Copyright:   VID
Дата:        02 мая 2002 г.
***************************************************** }

procedure GetWindowsList(List: TStrings; YourApplicationHandle: HWND;
  ShowOwnWindow, ShowInvisibleWindows, ShowChildWindows, ShowNoHeadWindows,
  ShowMainWindows: Boolean);
var
  Wnd: hWnd;
  buff: array[0..127] of Char;
  I: integer;
  CanShowIt: Boolean;
  WindowType, UnAcceptWinTypes: string;
  WordList: TStringList;
begin
  List.Clear;
  Wnd := GetWindow(YourApplicationHandle, gw_HWndFirst);
  WordList := TStringList.Create;
  while Wnd <> 0 do
  begin
    WindowType := '';
    if Wnd = YourApplicationHandle then
      WindowType := WindowType + ' own '; {собственное окно}
    if IsWindowVisible(Wnd) = null then
      WindowType := WindowType + ' invisible '; {-Невидимые окна}
    if GetWindow(Wnd, gw_child) <> 0 then
      WindowType := WindowType + ' child '; {-Дочерние окна}
    if GetWindowText(Wnd, buff, sizeof(buff)) = 0 then
      WindowType := WindowType + ' nohead '; {-Окна без заголовков}
    if GetWindow(Wnd, gw_Owner) <> 0 then
      WindowType := WindowType + ' main '; {-Главные окна}

    UnAcceptWinTypes := '';
    if ShowOwnWindow = False then
      UnAcceptWinTypes := UnAcceptWinTypes + ' own ';
    if ShowInvisibleWindows = False then
      UnAcceptWinTypes := UnAcceptWinTypes + ' invisible ';
    if ShowChildWindows = False then
      UnAcceptWinTypes := UnAcceptWinTypes + ' child ';
    if ShowNoHeadWindows = False then
      UnAcceptWinTypes := UnAcceptWinTypes + ' nohead ';
    if ShowMainWindows = False then
      UnAcceptWinTypes := UnAcceptWinTypes + ' main ';
    CanShowIt := True;
    GetWordListFromText(UnAcceptWinTypes, ' ', WordList, False, False);
    if WordList.Count > 0 then
    begin
      I := -1;
      repeat
        I := I + 1;
        if Pos(WordList.Strings[i], WindowType) > 0 then
          CanShowIt := False;
      until (I = WordList.Count - 1) or (CanShowIt = False);
    end;
    if CanShowIt = True then
    begin
      GetWindowText(Wnd, buff, sizeof(buff));
      I := List.Add(StrPas(buff));
      List.Objects[I] := Pointer(Wnd);
    end;
    Wnd := GetWindow(Wnd, gw_hWndNext);
  end;
  WordList.Free;
end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetWindowsList(memo1.Lines, self.Handle, true, false, false, true, true);
end;
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay