Home » Tipps & Tricks » System » Prozesse » Fensterhandle anhand des Exe-Namens erhalten
Fensterhandle anhand des Exe-Namens erhalten
Will man ein Fensterhandle einer Anwendung bekommen, von der nur der Exe-Name und nicht der Fenstertitel bekannt ist, kann folgender Code verwendet werden:
uses TLHelp32; var WindowHandle: THandle; function MyEnumWindowProc(AHandle: HWND; LParam: LongWord): BOOL; stdcall; var ProcessID: DWORD; 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;
Wenn die Funktion GetWindowThreadProcessId unter älteren Delphi-Versionen einen Fehler verursacht, muss folgender Code ergänzt werden:
function GetWindowThreadProcessId(hWnd: HWND; var dwProcessId: DWORD): DWORD; stdcall; external 'user32.dll' name 'GetWindowThreadProcessId';