Nimm dein Enum WindowsProc aus der Klasse raus und mach es so:
Delphi-Quellcode:
type
PMyEnumParam = ^TMyEnumParam;
TMyEnumParam = record
lb: TListbox;
end;
function GetWindows(const hWnd: Longword; Param: PMyEnumParam): LongBool;
stdcall;
var
Len: Longint;
S: string;
begin
Result := True;
if not (IsWindow(hWnd) and IsWindowVisible(hWnd)) then
Exit;
Len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0);
if Len > 0 then
begin
SetLength(S, Len);
SendMessage(hWnd, WM_GETTEXT, Len + 1, Longint(Pchar(S)));
Param.lb.Items.Add(s);
end;
// mit Result = False kann die Callbackfunktion vorzeitig verlassen werden
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Param: TMyEnumParam;
begin
Param.lb := Listbox1;
EnumWindows(@GetWindows, LPARAM(@Param));
end;
Wenn du es in der Klasse drin hast, wird automatisch der unsichtbare Self-Parameter mitgeführt von Delphi und dann passt die Deklaration nicht mehr wie sie eiegntlich von Windows sein müsste.