Fensterhandle anhand des Exe-Namens erhalten |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
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: 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;
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';
- Laufende Anwendung beenden
- Verwendung von CreateProcess
- Benachrichtigungen bei Fensterbewegungen abfangen
- Fenster auch im Client-Bereich verschieben
- Abfrage, bevor ein Programm/Formular geschlossen wird
- Ereignisreihenfolge beim Anzeigen eines Formulars
- Fenstergröße begrenzen
- Transparentes Fenster erzeugen
- Herausfinden, ob ein bestimmtes Programm gerade läuft
- Anwendung für eine bestimmte Zeit pausieren