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;