Wie kann ich die Programmdatei (*.exe) einer Anwendung über deren Fensterhandle ermittteln?


Hier ein Beispiel von Christian Kästner, das allerdings nicht unter Windows NT funktioniert:

uses TLHelp32, ShellApi;

var PID : DWord;
    aSnapshotHandle : THandle;
    ContinueLoop : BOOL;
    aProcessEntry32 : TProcessEntry32;
begin
  GetWindowThreadProcessID(FindWindow('Fenstertitel',nil), @PID);
  aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  aProcessEntry32.dwSize := Sizeof(aProcessEntry32);
  // gehe alle Prozesse durch (m.H. der TLHelp32 - Unit)
  ContinueLoop := Process32First(aSnapshotHandle, aProcessEntry32);
  while integer(ContinueLoop)<>0 do begin
    // gesuchter Prozess (PID) in der Liste aller Prozesse gefunden?
    if aProcessEntry32.th32ProcessID = PID then
      FileList.Items.Add(aProcessEntry32.szExeFile);
    ContinueLoop := Process32Next(aSnapshotHandle, aProcessEntry32);
  end;
  CloseHandle(aSnapshotHandle);
end;
Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:

Wie kann aus meinem Programm heraus eine andere Anwendung schließen?
Wie bekomme ich Zugriff auf alle geöffneten Fenster?


Delphi FAQ