Перечислить формы и дочерние формы
Оформил: 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 ;
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Перечислить формы и дочерние формы", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:
Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи , в сообщение обязательно указывайте название или ссылку на статью!