Home | Software | Technologies | Clients | Printing | News | Delphi | Contact
{*****************************************************************************} // The following is an example of how to enumerate windows and child windows // and then load them into a TreeView component for display // // Author: Pawel Michalowski, B.Sc.Cs. // E-Mail: pawel (at) michalowski (dot) net // Web: http://www.winshots.com/delphi/ // // Copyright © 2009 Pawel Michalowski. All Rights Reserved. // Copyright © 2009 Winshots Technologies, Inc. All Rights Reserved. {*****************************************************************************} { Disclaimer: The following code is FREE and it is provided on the "AS-IS" bases. Winshots Technologies or Pawel Michalowski will not take any responsibility whatsoever for any unwanted effects such as loss of profit, damage or otherwise caused by the use of this sample code. BY DOWNLOADING AND USING THIS SOURCE CODE, YOU INDICATE YOUR ACCEPTANCE OF THESE TERMS AND CONDITIONS. } 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. 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;
Copyright © 1999-2009, Winshots Technologies, Inc. All Rights Reserved.