hallo,
ich würde gerne anhand eines ExeNamens auf ein Fenster zugreifen und dessen Höhe auslesen lassen.
Nun ist mir auch die Problematik bekannt, dass ein ProcessHandle mehrere FensterHandles haben kann. Die gesuchte "exe" datei ist von meiner firma erstellt worden und hat immer nur ein fenster.
Mit folgenden Funktionen habe ich jedoch ein kleines Problem:
Delphi-Quellcode:
uses
...TlHelp32...;
...
function GetWindowHandleByExeName(const AExeName: string): THandle;
...
var
WindowHandle: THandle;
...
function MyEnumWindowProc(AHandle: THandle; LParam: LongWord): boolean;
stdcall;
var
ProcessID: THandle;
begin
ProcessID := 0;
GetWindowThreadProcessID(AHandle, ProcessID);
Result := not (ProcessID = LParam);
if not Result then
WindowHandle := AHandle;
end;
function GetWindowHandleByExeName(const AExeName: string): THandle;
var
SnapShot: THandle;
p: TProcessEntry32;
ProcessHandle: THandle;
begin
Result := 0;
WindowHandle := 0;
ProcessHandle := 0;
p.dwSize := SizeOf(p);
SnapShot := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0);
try
if Process32First(SnapShot, p) then
repeat
if AnsiLowerCase(AExeName) = AnsiLowerCase(p.szExeFile) then
ProcessHandle := p.th32ProcessID;
until (ProcessHandle <> 0) or not Process32Next(SnapShot, p);
EnumWindows(@MyEnumWindowProc, ProcessHandle);
Result := WindowHandle;
finally
CloseHandle(SnapShot);
end;
end;
(von hier erhalten:
https://www.delphi-treff.de/tipps-tr...mens-erhalten/)
>>> Compiler-Fehler bei:
GetWindowThreadProcessID(AHandle, ProcessID);
>>> Fehler-Beschreibung:
[dcc32 Fehler] UnitUsefullTools.pas(35): E2250 Es gibt keine überladene Version von 'GetWindowThreadProcessId', die man mit diesen Argumenten aufrufen kann
Der Compiler stört sich an der ProcessID, welches ein THandle ist. Lt. der Funktion wird jedoch ein DWORD benötigt.
Nur ist mir diese Funktion "MyEnumWindowProc" vom Ablauf nicht nachvollziehbar und weiß mir daher nicht selbst zu helfen.
(Die Funktion "GetWindowHandleByExeName" habe ich nachvollziehen können)
Könnt ihr mir da etwas unter die Arme greifen?