Ich gebe deinen Quellcode mal wieder mit ein paar Anmerkungen als Kommentar
Delphi-Quellcode:
PWindowDescr = ^TWindowDescr;
TWindowDescr =
record
hWnd : HWND;
ProcessID : Pointer;
Title :
String;
Klass :
String;
ExeName :
String;
End;
AWindowDescr =
array of PWindowDescr;
// Warum ein Array von Zeigern auf den Record anstatt eines Arrays of Records?
Var
wDescr : AWindowDescr;
// Alle offene Fenster suchen.
Function GetWindowList(
var wDescr: AWindowDescr): DWORD;
Var
IntI : Integer;
// Zähler füt die Fenster Handle
h_wnd : HWND;
// Fenster Handle
Index : Integer;
Begin
// Zähler initialisieren
IntI := 0;
h_wnd := GetTopWindow(0);
// Zuweisen von 100 Array Elementen of PWindowDescr
// Zum einlesen der Fenster Handle
Index := 100;
SetLength(wDescr, Succ(
index));
// also werden hier 101 Elemente angelegt, Zugreifbar mit Index 0 bis 100
New(wDescr[
index]);
// warum holst du dir den Speicher für nur einen Record (den an Index 100)? Was ist der Sinn?
ZeroMemory(wDescr[
index], SizeOf(wDescr[
index]^));
// warum initialisierst du den Record bei Index 100?
// Ich glaube der erste Parameter müsste noch ein ^ bekommen, weil sonst
// schreibt ZeroMemory die Array-Pointer-Liste mit 0'en voll anstatt des Records
Repeat
// Zähler um 1 erhöhen // warum? Willst du Index 0 nicht nutzen? Wenn vor dem Until ein Inc(IntI)
inc(IntI);
// Wenn mehr als High Fenster Handle gefunden
If IntI > High(wDescr)
Then
// Array um 10 erhöhen
SetLength(wDescr, High(wDescr) + 10);
// High() gibt dir den höchsten Index an, aber nicht die Anzahl der Elemente. SetLength() will die Anzahl der neuen Elemente, also Anzahl der Elemente bisher + 10, sprich: SetLength(wDescr, Length(wDescr) + 10);
// Fenster Handle ermitteln
h_wnd := GetWindow(h_wnd, GW_HWNDNEXT);
// Fenster Handle gefunden
If h_wnd <> 0
Then
begin
New(wDescr[IntI]);
// beachte hier: es ist der Index 100 schon initialisiert!
ZeroMemory(wDescr[IntI], SizeOf(wDescr[IntI]^));
// siehe oben: 1. Parameter sollte noch ein ^ bekommen
// Wert zuweisen
wDescr[IntI].hWnd := h_wnd;
// Window Informationen einlesen
GetWindowInfo(wDescr[IntI]);
end;
// Schleife durchlaufen bis kein Fenster Handle mehr existiert
until h_wnd = 0;
// Array Redimensionieren Fenster-Handle Count
SetLength(wDescr, IntI);
// wenn du oben das mit dem Inc(IntI) änderst, dann hier Succ(IntI) als höchstes Element setzen
// Ergebnis übergeben
Result := IntI;
End;
Ich hoffe das hilft und löst nicht wieder Beleidigungen aus...