Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 31.10.11 19:51 
Hallo Zusammen,
um alle Fenster und Unterfenster aller geöffneten Fenster auszulesen, habe ich folgenden Code gefunde.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
type
  PWindows = ^TWindows;
  TWindows = record
    WindowHandle: HWND;
    WindowText: string;
  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;

Funktioniert auch echt super!
Aber ich komm einfach nicht drauf, was ich tun muss, um nur die Unterfenster eines einzigen Fensters zu bekommen.

Wisst ihr, was ich dafür im Code ändern muss?

Viele Grüße,
Benny
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Mo 31.10.11 21:05 
user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:

Aber ich komm einfach nicht drauf, was ich tun muss, um nur die Unterfenster eines einzigen Fensters zu bekommen.

Anstatt EnumWindows musst du einfach EnumChildWindows verwenden.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 31.10.11 21:42 
Das wird ja schon in der Callback von EnumWindows aufgerufen. Man müsste es einfach mal debuggen.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 31.10.11 21:43 
Das mit dem Debuggen habe ich auch schon probiert, doch es hat mich nur verwirrt...
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 31.10.11 21:53 
Einfach zerlegen in zwei Teile, in meinem Beispiel Button alle Hauptfenster in eine Listbox anzeigen
auf Doppelklick Eintrag in Baum übernehmen und alle Untereinträge einfügen
Einloggen, um Attachments anzusehen!
_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: LittleBen
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 31.10.11 22:26 
:shock: Wow! Vielen Danke!!! :)