![]() |
laufende Prozesse auflisten
Auflisten aller laufenden Prozesse
Zum Auflisten aller laufenden Prozesse gibt es eine Funktion, die einen "Snapshot" der Prozesse macht: CreateToolhelp32Snapshot. Diese Funktion befindet sich, wie auch aus dem Namen zu erschließen, in der Unit TLHelp32. Sie hat noch verschiedene Funktionen, wie das Auflisten aller Threads oder Module, jedoch sind für uns ja nur die Prozesse von Bedeutung. Um einen Snapshot zu erstellen ruft man CreateToolhelp32Snapshot so auf:
Delphi-Quellcode:
Der erste Parameter, TH32CS_SNAPPROCESS, gibt an, dass ein Snapshot der laufenden Prozesse gemacht werden soll. Der zweiter Parameter wird ignoriert, er ist nur nötig, wenn die Module oder die Heaplist eines Prozesses herausgefunden werden sollen, dann gibt er nämlich an, von welchem Prozess. CreateToolhelp32Snapshot gibt INVALID_HANDLE_VALUE zurück, wenn die Funktion fehlschlägt. Zum Schluss muss hSnap mit CloseHandle freigegeben werden.
var
hSnap: THandle; ... hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); Um nun die einzelnen Prozesse herauszufiltern, gibt es einen Record, ProcessEntry32. Dessen Parameter dwSize muss zuerst mit SizeOf(ProcessEntry32) gefüllt werden, dann kann man ihn benutzen. Um nun in der Liste der Prozesse, im Beispiel oben hSnap, navigieren zu können gibt es mehrere Funktionen, ähnlich FindFirst und FindNext, nämlich Process32First und Process32Next. Mit diesen Funktionen holen wir den ersten Prozess und dann alle folgenden aus hSnap und jeder kommt jeweils in ein ProcessEntry32, hier ein Beispiel für die Anwendung:
Delphi-Quellcode:
Wie zu sehen, haben Process32First und Process32Next zwei Argumente: das erste ist der Snapshot und das zweite der Record in den der gefundene Prozess geshrieben wird. Beide Funktionen geben im Fehlerfall False zurück, bei Erfolg True.
program ListProc;
uses Windows, TLHelp32, SysUtils; var hSnap: THandle; ProcEntry: TProcessEntry32; s: String; begin hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap <> INVALID_HANDLE_VALUE) then begin ProcEntry.dwSize := SizeOf(ProcessEntry32); if (Process32First(hSnap, ProcEntry)) then begin s := ProcEntry.szExeFile; MessageBox(0, PChar('Process: ' + ExtractFileName(s) + #10#13 + 'Path: ' + ExtractFilePath(s)), 'Process Info', 0); while Process32Next(hSnap, ProcEntry) do begin s := ProcEntry.szExeFile; MessageBox(0, PChar('Process: ' + ExtractFileName(s) + #10#13 + 'Path: ' + ExtractFilePath(s)), 'Process Info', 0); end; end; end; CloseHandle(hSnap); end. Wie auch aus dem Beispiel zu erkennen, ist der Parameter szExeFile der Pfad zum Prozess, es gibt aber auch weitere Eigenschaften:
Code:
Zum Schluss noch einen Dank an
----------------------------------------------------------------------------------------
| cntUsage | Referenzzähler des Prozesses (ein Prozess existiert so lange, | | | bis sein Referenzzähler 0 ist) | ---------------------------------------------------------------------------------------- | th32ProcessID | Prozess-ID | ---------------------------------------------------------------------------------------- | th32DefaultHeapID | DefaultHeap-ID | ---------------------------------------------------------------------------------------- | th32ModuleID | Modul-ID | ---------------------------------------------------------------------------------------- | cntThreads | Anzahl der Threads | ---------------------------------------------------------------------------------------- | th32ParentProcessID | ID des Parent-Prozesses | ---------------------------------------------------------------------------------------- | pcPriClassBase | Prozesspriorität | ---------------------------------------------------------------------------------------- ![]() ![]() Naja, dann noch viel Spaß bei rumspielen ;-). MfG, d3g [edit=Matze][code] durch [delphi]-tags ersetzt und Code formatiert. Mfg, Matze[/edit] [edit=flomei]Wir "räumen auf", daher Titel geändert... Mfg, flomei[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz