Home » Tipps & Tricks » System » Prozesse » Handle auf ein Fenster einer anderen Anwendung bekommen
Handle auf ein Fenster einer anderen Anwendung bekommen
Am einfachsten ist es, die Windows-API-Funktion FindWindow zu verwenden, um ein bestimmtes Fenster zu lokalisieren – vorausgesetzt, man kennt den genauen Fenstertitel oder den Klassennamen. Wenn man nur einen Teil des Fenstertitels kennt (z.B. ‚Netscape – ‚ + irgendeine unbekannte URL), muss die Funktion WindowsEnumWindows verwendet werden, um alle aktiven Fenster zu erfassen. Anschließend wird mit den Funktionen GetWindowsText und GetClassName geprüft, ob ein Fenster dabei ist, nachdem gesucht wird.Der folgende Code gibt das Handle des ersten Fensters zurück, dessen Fenstertitel teilweise und dessen Klassenname exakt (wenn angegeben) mit den Suchangaben übereinstimmt, und bringt es in den Vordergrund.
type PFindWindowStruct = ^TFindWindowStruct; TFindWindowStruct = record Caption: string; ClassName: String; WindowHandle: THandle; end; function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): boolean; stdcall; var lpBuffer: PChar; WindowCaptionFound: boolean; ClassNameFound: boolean; begin GetMem(lpBuffer, 255); result:=true; WindowCaptionFound:=false; ClassNameFound:=false; try if GetWindowText(hWindow, lpBuffer,255)>0 then if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer))>0 then WindowCaptionFound:=true; if PFindWindowStruct(lParam).ClassName='' then ClassNameFound:=true else if GetClassName(hWindow, lpBuffer, 255)>0 then if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer))>0 then ClassNameFound:=true; if (WindowCaptionFound and ClassNameFound) then begin PFindWindowStruct(lParam).WindowHandle:=hWindow; result:=false; end; finally FreeMem(lpBuffer, sizeof(lpBuffer^)); end; end; function FindAWindow(WinCaption: string; WinClassName: string): THandle; var WindowInfo: TFindWindowStruct; begin with WindowInfo do begin caption := WinCaption; className := WinClassName; WindowHandle := 0; EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo)); result := WindowHandle; end; end; procedure TForm1.Button1Click(sender: TObject); var TheWindowHandle: THandle; begin TheWindowHandle:=FindAWindow('Netscape -', ''); if TheWindowHandle=0 then ShowMessage('Window not found!') else BringWindowToTop(TheWindowHandle); end;