Thema: Delphi Probleme mit EnumWindows

Einzelnen Beitrag anzeigen

neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: Probleme mit EnumWindows

  Alt 5. Nov 2005, 03: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!
  Mit Zitat antworten Zitat