EnumWindowsProc - Nur von einem Fenster?
spacer
Autor Nachricht
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 328
Erhaltene Danke: 2



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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 11803
Erhaltene Danke: 146

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Mo 31.10.11 21:42 
Das wird ja schon in der Callback von EnumWindows aufgerufen. Man müsste es einfach mal debuggen.

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

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...
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

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
DRY DRY KISS

Für diesen Beitrag haben gedankt: LittleBen
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 31.10.11 22:26 
:shock: Wow! Vielen Danke!!! :)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home