Ermitteln, welche EXE hinter einem Fensternamen steckt |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
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;
- 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