Home » Tipps & Tricks » System » Prozesse » Ermitteln, welche EXE hinter einem Fensternamen steckt

Ermitteln, welche EXE hinter einem Fensternamen steckt

Die Unit TLHelp32 führt normalerweise ein unerkanntes Schattendasein in der RTL. Es stecken jedoch sehr viele nützliche Funktionen in ihr. Unter anderem können wir auch herausfinden, welche Exe-Datei hinter einem Fensterhandle steckt.Unsere Funktion GetExeNameByWindowTitle erwartet zwei Parameter: fenstertitel gibt an, um welches Fenster es geht; ergebnis ist ein Ausgabeparameter, der eine Liste von EXE-Namen zurückliefert.

uses TLHelp32;
procedure GetExeNameByWindowTitle(fenstertitel: string; var ergebnis: TStringList);
var PID: DWord;
  aSnapShotHandle: THandle;
  ContinueLoop: Boolean;
  aProcessEntry32: TProcessEntry32;
begin
  ergebnis.clear;
  GetWindowThreadProcessID(FindWindow(nil, PChar(fenstertitel)), @PID);
  aSnapShotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  try
    aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
    ContinueLoop := Process32First(aSnapShotHandle, aProcessEntry32);
    while Integer(ContinueLoop)  0 do begin
      if aProcessEntry32.th32ProcessID = PID then
        ergebnis.Add(aProcessEntry32.szExeFile);
      ContinueLoop := Process32Next(aSnapShotHandle, aProcessEntry32);
    end;
  finally
    CloseHandle(aSnapShotHandle);
  end;
end;

Beispiel des Aufrufs (Ergebnis wird in einer Listbox angezeigt):

procedure TForm1.Button1Click(Sender: TObject);
var sl: TStringList;
begin
  sl:=TStringList.Create;
  try
    GetExeNameByWindowTitle('HTML Editor', sl);
    ListBox1.Items.AddStrings(sl);
  finally
    sl.free;
  end;
end;