Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перечислить формы и дочерние формы

Delphi , Программа и Интерфейс , Формы

Перечислить формы и дочерние формы

Оформил: 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;

Формы:

  1. TForm1 - Это форма Delphi с двумя кнопками (Button1) и одним контролем TreeView (TreeView1). Она имеет два процедура:
    • Button1Click: Перечисляет все окна на системе, используя функцию EnumWindowsProc.
    • FormDestroy: Освобождает память, выделенную для AWindows.

Дочерние формы:

Нет дочерних форм в данном коде. Однако, кажется, что код предназначен для использования с контролем TreeView для отображения информации о окнах на системе.

Замечания:

  1. Код использует два процедура для перечисления окон:
    • EnumWindowsProc: Перечисляет верхние уровни окон и их дочерние окна.
    • EnumChildWindowsProc: Перечисляет дочерние окна заданного окна.
  2. Запись TMyEnumParam используется как параметр для функции EnumWindowsProc. Она содержит ссылку на элементы TreeView и текущий узел в TreeView.
  3. В процедуре Button1Click функция EnumWindowsProc вызывается с аргументом lParam(@Param) в качестве последнего аргумента. Это передает указатель на запись TMyEnumParam в функцию.

В статье описываются формы и дочерние формы в Delphi с использованием компонента TreeView для отображения иерархии окон.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:24:06/0.0057590007781982/1