Handle auf ein Fenster einer anderen Anwendung bekommen |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
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;
- Laufende Anwendung beenden
- Verwendung von CreateProcess
- Herausfinden, ob ein bestimmtes Programm gerade läuft
- Anwendung für eine bestimmte Zeit pausieren
- Mehrfachstart verhindern
- Programm vor dem Taskmanager verstecken
- Alle sichtbaren Fenster minimieren/wiederherstellen
- Ermitteln ob eine Exe-Datei läuft
- Auflisten aller Fenster
- Button klicken