Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
Delphi 7 Architect
|
Re: Probleme mit EnumWindows
5. Nov 2005, 04:32
Mehrer Anfängerfehler, aber nix schlimmes!
Delphi-Quellcode:
type
THandleArray = array of THandle;
function FindAllWindows( const WindowCaption: String): THandleArray;
type
PParams = ^TParams;
TParams = record
Res : THandleArray;
WindowCaption : String;
end;
var params : TParams;
function _EnumWindowProc(_hwnd: HWND; _lparam: LPARAM): LongBool; stdcall; // ja,
// denn es beschreibt die reihenfolge und art wie parameter übergeben werden
var
cTitle : array [0..1023] of Char; // sollte reichen
begin
with PParams(_lparam)^ do
begin
if(_hwnd = 0) then // es wird immer ein gültiges Handle übergeben --> unnötig
begin
Result := False;
Exit;
end;
(* Warum so kompliziert
Len := GetWindowTextLength(_hwnd)+1;
SetLength(Title, Len);
GetWindowText(_hwnd, PChar(Title), Len);
Title := Trim(Title);
if (Title = WindowCaption) then // Hier kommt eine AV
begin
SetLength(Res, Length(Res)+1); // hier kommt die nächste AV
Res[Length(Res)-1] := _hwnd;
end; *)
GetWindowText(_hwnd, cTitle, SizeOf(cTitle);
if CompareText(cTitle, WindowCaption) = 0 then
begin
SetLength(Res, Length(Res)+1);
Res[Length(Res)-1] := _hwnd;
end;
end;
end;
begin
SetLength(params.Res, 0);
params.WindowCaption := WindowCaption;
EnumWindows(@_EnumWindowProc, @params); // der zweite Parameter dient als Platzhalter für
// zusätzliche Parameter, da nicht auf die andere localen Variablen von FindAllWindows
// zugegriffen werden kann. Das ganze hat was mit dem Runtime-Stack zu tun.
Result := Res;
end;
Das sollte Funktionieren. Ist aber ungetestet.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
|
|
Zitat
|