AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

laufende Prozesse auflisten

Ein Thema von d3g · begonnen am 21. Jun 2002
Antwort Antwort
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#1

laufende Prozesse auflisten

  Alt 21. Jun 2002, 16:20
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:
var
  hSnap: THandle;

...

  hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
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.

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:
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 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.

Wie auch aus dem Beispiel zu erkennen, ist der Parameter szExeFile der Pfad zum Prozess, es gibt aber auch weitere Eigenschaften:

Code:
----------------------------------------------------------------------------------------
| 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                                             |
----------------------------------------------------------------------------------------
Zum Schluss noch einen Dank an Luckie, durch seine OpenSource-Software habe ich das hier gelernt.

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]
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz