Also bei Delphi 5 gibt es die
Unit TlHelp32, mit der sich ein Schnappschuss der Prozesse machen lässt. Aus dem Schnappschuß kann man dann Prozesse und deren Exe-Namen ermitteln. Natürlich auch die zugehörigen Fenster, aber ersters könnte ja schon reichen.
Hier mal ein Ausschnitt aus meinem Quellcode, denke das sollte fast schon reichen
Delphi-Quellcode:
uses TlHelp32, ShellApi;
var
Handle : THandle;
Continue : boolean;
ProcEntry : TProcessEntry32;
i : Integer;
begin
i := 0;
Handle := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0);
ProcEntry.dwSize := Sizeof(ProcEntry);
// gehe alle Prozesse durch (m.H. der TlHelp32 - Unit)
Continue := Process32First(
Handle, ProcEntry);
while Continue
do begin
SetLength(TaskListe,i +1);
// Daten zum Prozess ermitteln
ProcID := ProcEntry.th32ProcessID;
Threads := ProcEntry.cntThreads;
ExeFile := ProcEntry.szExeFile;
if ExeFile = '
[System Process]'
then
ExeFile := '
Leerlaufprozess';
// Nächster Prozess
Continue := Process32Next(
Handle, ProcEntry);
inc(i);
end;
CloseHandle(
Handle);
zum Fenster durchlaufen mal der Ausschnitt:
Delphi-Quellcode:
var
Current : hwnd;
i : Integer;
begin
// Erstes Fenster holen
i := 0;
Current := GetTopWindow(GetDesktopWindow);
while Current <> 0
do begin
// Daten zum Fenster ermitteln
visible := IsWindowVisible(Current);
iconic := IsIconic(Current);
handle := Current;
parent := GetParent(Current);
GetWindowThreadProcessID(Current, ProcID);
GetWindowText(Current, Titel, 255);
GetClassName(Current, Klasse, 255);
// Nächstes Fenster
Current := GetNextWindow(Current,GW_HWNDNEXT);
inc(i);
end;
end;
Die hier erhaltenen Informationen (z.B. ProcID) kann man mit der Information aus dem vorherigen Beispiel verknüpfen.
Die Variablen, auf die zugewiesen wird, sehen im Beispiel sinnlos aus. Das liegt daran, das ich den Code aus einem Programm ausgeschnitten hab' (da wird auf ein dyn. Record-Array zugewiesen)