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

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

type
   PWindows = ^TWindows;
   TWindows = record
     WindowHandle: HWND;
     WindowText: string;
   end;

 type
   TForm1 = class(TForm)
     Button1: TButton;
     TreeView1: TTreeView;
     procedure Button1Click(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;

 var
   Form1: TForm1;
   PNode, CNode: TTreeNode;
   AWindows: PWindows;

 implementation

 {$R *.DFM}

 function EnumChildWindowsProc(Wnd: HWnd; Form: TForm1): Bool; export;
   {$ifdef Win32} stdcall; {$endif}
 var
   Buffer: array[0..99] of Char;
 begin
   GetWindowText(Wnd, Buffer, 100);
   //if StrLen(Buffer)  0 then 
  if StrPas(Buffer) = '' then Buffer := 'Empty';
   new(AWindows);
   with AWindows^ do
   begin
     WindowHandle := Wnd;
     WindowText   := StrPas(Buffer);
   end;

   CNode := Form1.TreeView1.Items.AddChildObject(PNode,
                  AWindows^.WindowText + ':' +
                  IntToHex(AWindows^.WindowHandle, 8), AWindows);
   if GetWindow(Wnd, GW_CHILD)  0 then
   begin
     PNode := CNode;
     Enumchildwindows(Wnd, @EnumChildWindowsProc, 0);
   end;
   Result := True;
 end;

 function EnumWindowsProc(Wnd: HWnd; Form: TForm1): Bool;
   export; {$ifdef Win32} stdcall; {$endif}
 var
   Buffer: array[0..99] of Char;
 begin
   GetWindowText(Wnd, Buffer, 100);
   //if StrLen(Buffer)  0 then 
  if StrPas(Buffer) = '' then Buffer := 'Empty';
   new(AWindows);
   with AWindows^ do
   begin
     WindowHandle := Wnd;
     WindowText   := StrPas(Buffer);
   end;

   PNode := Form1.TreeView1.Items.AddObject(nil, AWindows^.WindowText + ':' +
     IntToHex(AWindows^.WindowHandle, 8), AWindows);
   EnumChildWindows(Wnd, @EnumChildWindowsProc, 0);
   Result := True;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   EnumWindows(@EnumWindowsProc, Longint(Self));
 end;

 procedure TForm1.FormDestroy(Sender: TObject);
 begin
   Dispose(AWindows);
 end;

 end.


 {**********************************************}
 {  Other Code by NicoDE 
{**********************************************}

 type
   PMyEnumParam = ^TMyEnumParam;
   TMyEnumParam = record
     Nodes: TTreeNodes;
     Current: TTreeNode;
   end;

 function EnumWindowsProc(Wnd: HWND; Param: PMyEnumParam): BOOL; stdcall;
 const
   MyMaxName = 64;
   MyMaxText = 64;
 var
   ParamChild: TMyEnumParam;
   ClassName: string;
   WindowText: string;
 begin
   Result := True;
   SetLength(ClassName, MyMaxName);
   SetLength(ClassName, GetClassName(Wnd, PChar(ClassName), MyMaxName));
   SetLength(WindowText, MyMaxText);
   SetLength(WindowText, SendMessage(Wnd, WM_GETTEXT, MyMaxText, lParam(PChar(WindowText))));
   ParamChild.Nodes   := Param.Nodes;
   ParamChild.Current := Param.Nodes.AddChildObject(Param.Current,
     '[' + ClassName + '] "' + WindowText + '"' + ' Handle: ' + IntToStr(Wnd), Pointer(Wnd));
   EnumChildWindows(Wnd, @EnumWindowsProc, lParam(@ParamChild));
 end;


 procedure TForm1.Button1Click(Sender: TObject);
 var
   Param: TMyEnumParam;
 begin
   Param.Nodes := TreeView1.Items;
   Param.Current := TreeView1.TopItem;
   TreeView1.Items.BeginUpdate;
   EnumWindows(@EnumWindowsProc, lParam(@Param));
   TreeView1.Items.EndUpdate;
 end;
Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования