Ich hab's jetzt endlich geschafft, das richtige Fensterhandle und die richtigen Fensterkoordinaten zu bekommen. Dazu musste ich die Funktion
GetMainAppWndFromPid etwas ändern:
Delphi-Quellcode:
function GetMainAppWndFromPid(PID: DWORD): THandle;
type
PSearch = ^TSearch;
TSearch = record
PID: DWORD;
Wnd: THandle;
end;
var
SearchRec: TSearch;
function EnumWindowsProc(Wnd: THandle; Res: PSearch): Boolean; stdcall;
var
WindowPid: DWORD;
begin
WindowPid := 0;
GetWindowThreadProcessId(Wnd, @WindowPid);
if (WindowPid = Res^.PID) then //and IsMainAppWindow(Wnd) then // <--- <--- <---
begin
Res^.Wnd := Wnd;
Result := False;
end
else
Result := True;
end;
begin
SearchRec.PID := PID;
SearchRec.Wnd := 0;
EnumWindows(@EnumWindowsProc, Integer(@SearchRec));
Result := SearchRec.Wnd;
end;
Ich habe die Bedingung
and IsMainAppWindow(Wnd) rausgenommen (s. oben), weil mein gesuchtes Fenster kein Hauptfenster hat. Die Frage ist jetzt aber, wie ich diese Funktion so verallgemeinern kann, dass sie mit allen Fenstertypen funktioniert?