AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte EnumProcesses
Thema durchsuchen
Ansicht
Themen-Optionen

EnumProcesses

Ein Thema von Luckie · begonnen am 8. Aug 2007 · letzter Beitrag vom 25. Dez 2009
Antwort Antwort
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
EnumProcesses
Aktuelle Version: 1.0.0.17

Eigentlich wollte ich nur alten Code von mir sauber in eine Klasse kapseln, allerdings ist dann das Testprogramm doch ganz brauchbar geworden, wie ich denke.

EnumProcesses listet alle Processes im System auf und kann optional folgende Informationen anzeigen:
  1. ProzessID
  2. ProzessID des Eltrenprozesses
  3. Dateiname des Prozesses
  4. Dateiname inklusive Pfad des Prozesses
  5. Besitzer des Prozesse
  6. Basis Prioritätsklasse
  7. Anzahl der Threads eines Prozesses
  8. Anzahl der geladenen Module eines Prozesses
  9. Zeitstempel wann der Prozess erzeugt wurde
  10. CPU Nutzung des Prozesses
Wird das Programm ohne Parameter aufgerufen, werden die PID, der Dateiname und der Besitzer ausgegeben.

Mit dem Parameter /k:<PID> kann der Prozess mit der angegebenen ProzessID beendet werden.

Übersicht über die möglichen Kommandozeilenparamter:
Code:
Commandline switches:
        /I: ProcessID
        /J: Parent process ProcessID
        /F: Filename
        /P: Path inclusive filename
        /O: Process owner
        /C: Base priority class
        /T: Thread count
        /M: Module count
        /T: Createtime of process
        /U: CPU usage time
        /K:<PID>: Kill process with the given PID
Miniaturansicht angehängter Grafiken
enumprocesses_214.jpg  
Angehängte Dateien
Dateityp: zip enumprocesses_140.zip (40,5 KB, 219x aufgerufen)
Ein Teil meines Codes würde euch verunsichern.
 
shmia

 
Delphi 5 Professional
 
#2
  Alt 8. Aug 2007, 13:07
Der Code für function FormatW und function SysErrorMessage kommt zweimal vor. Das könnte man z.B. in eine eigene Unit namens SysUtilsNonVcl auslagern.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#3
  Alt 8. Aug 2007, 13:12
Ich weiß. Normalerweise benutze ich dazu auch meine Unit MpuTools.pas. Aber weil ich nur ein paar wenige Funktionen brauchte, habe ich die mir nur rauskopiert.
Michael
  Mit Zitat antworten Zitat
Nakaron

 
Delphi 2007 Professional
 
#4
  Alt 29. Aug 2007, 11:30
Hi Luckie,

ist es auch möglich mit deiner Unit die CPU Auslastung herauszubekommen je Prozess?
Momentan gibts ja nur die länge der CPU Nutzung.


Beste Grüße
Nakaron
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#5
  Alt 29. Aug 2007, 11:40
Nein, aber die kannst du dir ja selber ausrechnen anhand der CPU-Zeit.
Michael
  Mit Zitat antworten Zitat
Nakaron

 
Delphi 2007 Professional
 
#6
  Alt 29. Aug 2007, 12:11
Ich nehme mal an das ich die CPU Auslastung aus folgendem Code ausrechnen kann oder?

Delphi-Quellcode:
function PrintCPUTime(Process: TProcess): WideString;
var
  KernelTime64 : LARGE_INTEGER; //TFileTime;
  UserTime64 : LARGE_INTEGER;
  CPUTime64 : LARGE_INTEGER;
  CPUTimeft : TFileTime;
  st : TSystemTime;
  TimeStr : array[0..254] of WideChar;
  Kernel, User : Cardinal;
  dwTime : DWORD;
begin
  KernelTime64.LowPart := Process.KernelTime.dwLowDateTime;
  KernelTime64.HighPart := Process.KernelTime.dwHighDateTime;
  UserTime64.LowPart := Process.UserTime.dwLowDateTime;
  UserTime64.HighPart := Process.UserTime.dwHighDateTime;
  CPUTime64.QuadPart := KernelTime64.QuadPart + UserTime64.QuadPart;
  CPUTimeft.dwLowDateTime := CPUTime64.LowPart;
  CPUTimeft.dwHighDateTime := CPUTime64.HighPart;
  FileTimeToSystemTime(CPUTimeft, st);
  GetTimeFormatW(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT, @st, nil, TimeStr, SizeOf(TimeStr));
  Result := WideString(TimeStr);
end;
Ich habe mit den Werten von KernelTime64, UserTime64, CPUTime64 und CPUTimeft schon etwas rumprobiert. Da ich mich allerdings damit nicht auskenne, habe ich es bisher noch nicht rausbekommen.

Könntest du mir vielleicht einen Denkanstoß geben?

Beste Grüße
Nakaron
Andreas
  Mit Zitat antworten Zitat
h.slomka
 
#7
  Alt 17. Okt 2007, 12:09
Hallo Luckie,

ich glaube, ich habe ein Memory-Leak in Deinem Code gefunden.
In folgender Funktion aus den MPUProcessTools:

Delphi-Quellcode:
function SidToString(ASID: PSID): WideString;
var
  sDummy : PWideChar;
begin
  ConvertSidToStringSid(ASID, sDummy);
  Result := string(sDummy);
end;
Wird der zurückgegebene Buffer nicht freigegeben.

LocalFree(Cardinal(sDummy));
Gruß
  Mit Zitat antworten Zitat
Delphi-Laie

 
Delphi 10.1 Berlin Starter
 
#8
  Alt 25. Dez 2009, 17:41
Hallo Luckie, zunächst einmal: feines Programm!

Aber eines kann ich nicht nachvollziehen: Mit Deinem Programm kann man so ziemlich alles beenden, jedenfalls auch einige der Systemprozesse, die auch der ProcessExplorer der Sysinternals abgeschossen bekommt. Verwende ich die m.E. relevanten Befehle zum Beenden der Prozesse, komme ich jedoch nur auf gewöhnliche Beendbarkeit, wie sie auch der Taskmanager bietet: Systemprozesse bleiben unantastbar.

Meine „Forschungen“ sind inzwischen soweit gediegen (oder gediehen), daß bei mir mit diesem Befehl

hProcess:=OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE,False,PID) , auf Systemprozesse angewandt, hProcess gleich Null ist. Also, irgendetwas ist bei meinem simplen Aufruf anders als in Deinem Programm.


Darf ich Dich vorsichtig fragen, welches - von mir leider bisher nicht erkannte - Geheimnis Dein Programm beherbergt, daß es auch die meisten Systemprozesse terminieren kann?

Gruß

Delphi-Laie
  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 10:43 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