Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   MyTaskManager v0.3.2.1 (https://www.delphipraxis.net/85134-mytaskmanager-v0-3-2-1-a.html)

Darkmorph 26. Jan 2007 12:44


MyTaskManager v0.3.2.1
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
hier mein erstes Programm, dass ich veröffentliche. Es ist ein Ersatz für die Prozesssparte vom Task-manager. Es zeigt standardmäßig alle Prozesse an, die arbeiten, also CPUTime nutzen. Man kann über eine Checkbox jedoch alle Prozesse anzeigen lassen. Man kann auch einen Prozess markieren und diesen durch Klick auf den Kill-Button killen. Die Refreshrate läßt sich über eine Trackbar einstellen, von 250ms-1500ms. Das Programm wird nur in der TaskBar-Notification-Area angezeigt, ein rechts oder linksklick auf dem Symbol bewirkt, das es angezeigt oder versteckt wird. Dieses Programm schreibt nichts in die Registry und hinterläßt auch keine Dateien auf dem PC.

Ich freue mich auf konstruktive Kritik und Verbesserungsvorschläge!

TODO:
aus einem mir noch! unbekannten Grund wird bei einigen Systemprozessen der Memory-Usage nicht richtig angezeigt, bin aber an der Beseitigung des Fehlers.

Müßte unter allen Windows-Versionen lauffähig sein, getestet habe ich es aber nur unter Windows XP (Professional).


MfG
Benjamin

Matze 26. Jan 2007 12:57

Re: MyTaskManager v0.3.2.1
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

irgendwie stimmt was nicht ganz. Dein Programm zeigt einen Prozess zu wenig an und die CPU-Auslastung ist auch nicht ganz korrekt (sofern der TaskManager und der Process Explorer das korrekt anzeigen). Die RAM-Anzeige passt auch nicht. :gruebel:

Wie kann man dein Programm wiederherstellen, wenn es minimiert ist? Ich habe kein Kontextmenü und ein Doppelklick aufs TNA-Icon ist auch nutzlos. Schön wäre die Anzeige der CPU/RAM-Auslastung in der TNA.

Im Anhang mal ein Screenshot, da siehst du, dass manches nicht so passt.

Darkmorph 26. Jan 2007 13:36

Re: MyTaskManager v0.3.2.1
 
Zitat:

Zitat von Matze
Hi,

irgendwie stimmt was nicht ganz. Dein Programm zeigt einen Prozess zu wenig an und die CPU-Auslastung ist auch nicht ganz korrekt (sofern der TaskManager und der Process Explorer das korrekt anzeigen). Die RAM-Anzeige passt auch nicht. :gruebel:

Wie kann man dein Programm wiederherstellen, wenn es minimiert ist? Ich habe kein Kontextmenü und ein Doppelklick aufs TNA-Icon ist auch nutzlos. Schön wäre die Anzeige der CPU/RAM-Auslastung in der TNA.

Im Anhang mal ein Screenshot, da siehst du, dass manches nicht so passt.


Also die Prozessanzahl wird jetzt richtig angezeigt, hatte damit zu tun, das mein Programm den System-Idle-Prozess nicht berücksichtigt, da mein Programm den selbst errechnet.
Zu den Unkorrektheiten bei der Anzeige der CPU-Auslastung der einzelnen Tasks kann ich nur sagen, das ich nicht 100%ig sagen kann woran das liegt, weil mir der Source-Code von dem Process-Explorer nicht vorliegt. Eine Möglichkeit ist, das die unterschiedliche Refreshrate ihren Teil dazu beiträgt und eine andere ist, dass der Process-Explorer möglicherweise eine andere Methode nutzt, um an die CPUTimes der einzelnen Prozesse zu kommen.
Ein Rechts- oder Links klick auf das Symbol bewirkt das Verstecken oder Anzeigen meines Programms. hatte in der vorherigen Version nicht (richtig) funktioniert, da ich die Option Always-Stay-On-Top nicht im Quellcode aktiviert hatte.

Und nun, zu deinem Feature-Request. Da ich auf dem Gebiet der TNB-Manipulation noch nicht allzuviel Ahnung habe, was ich aber ändern werde, kann das noch ein kleines Weilchen 2-3Tage dauern, bis das realisiert wird.

Vielen Dank für deine Aufmerksamkeit und keep up the good work ;)

mfg
Benjamin

Luckie 26. Jan 2007 13:55

Re: MyTaskManager v0.3.2.1
 
Wenn die Liste der Prozesse länger ist, als das Fenster hoch und man runter scrollt, springt die Anzeige immer wieder nach oben, so dass man die letzten Prozesse nur ganz kurz sieht.

Wie sieht es mit Spaltenüberschriften aus? Was wird da zum Beispiel für ein Speicherverbrauch in der letzten Spalte angezeigt?

Schön wäre noch den jeweiligen Benutzer zu den Prozessen anzuzeigen.

Wenn ich einen Prozess beenden will, der sich nicht beenden lässt, erhalte ich keine Fehlermeldung. Warum nicht?

Darkmorph 29. Jan 2007 10:39

Re: MyTaskManager v0.3.2.1
 
Zitat:

Zitat von Luckie
Wenn die Liste der Prozesse länger ist, als das Fenster hoch und man runter scrollt, springt die Anzeige immer wieder nach oben, so dass man die letzten Prozesse nur ganz kurz sieht.

Wie sieht es mit Spaltenüberschriften aus? Was wird da zum Beispiel für ein Speicherverbrauch in der letzten Spalte angezeigt?

Schön wäre noch den jeweiligen Benutzer zu den Prozessen anzuzeigen.

Wenn ich einen Prozess beenden will, der sich nicht beenden lässt, erhalte ich keine Fehlermeldung. Warum nicht?

So,
Neue Version ist draussen... Ist immer noch nicht wirklich schön, aber funktional :)
Beim nicht erfolgreichen beenden von Programmen gibt es jetzt Fehlermeldungen...
Spaltenüberschriften sind jetzt auch vorhanden, auch wenn nich schön :)
Die Anzeige springt jetzt nicht mehr...

Bitte meldet mir, falls es doch noch irgendwo hackt.

So, als nächstes möchte ich Userdraw in der Listbox realisieren (also prozesso über 30% rot zeichnen usw) und dann vielleicht mal Sortierung einführen...


mfg Benjamin

Luckie 29. Jan 2007 10:43

Re: MyTaskManager v0.3.2.1
 
Warum nimmst du eigentlich keinen Listview?

Du kannst ja mal gucken, was der Taskmanager noch so alles anzeigt und dir da Anregungen holen, was du noch alles anzeigen könntest. Eine Gruppierung nach Parent- und deren Childprozessen wäre eventuell auch schön.

PS: Alle Dateien, die mit einer Tilde anfangen, die DCUs usw. brauchen nicht mit ins Archiv.

Darkmorph 29. Jan 2007 13:57

Re: MyTaskManager v0.3.2.1
 
So neue Version 0.3.3.3 ist geupped...

Hi Lucki, werde mir die Listview-Komponente mal ansehen... hab ich noch nicht mit gearbeitet, also kann ich dazu nix sagen.
Neues Feature: Prozesse die unter 10% CPU-Time verbrauchen werden blau gemalt und alle die drüber sind rot :)
meine erste USER-DRAW-LISTBOX :)

mfg

Benjamin

Darkmorph 30. Jan 2007 12:56

Re: MyTaskManager v0.3.2.1
 
so, hab mal wieder eine Neue Version kompiliert.
Ab sofort gibts ein PopUp-Menu, welches man durch Rechtsklick auf das Symbol in der Notify Area und durch Klick aufs Programm selber erreicht. Das Programm merkt sich ausserdem ab sofort, wo es beim letzten Beenden positioniert war, d. h. wenn es wieder gestartet wird, erscheint es an genau dieser Stelle. Darüber hinaus wurden einige Bugfixes vorgenommen.

@Luckie
Ich hab mir die TListview-Komponente grob angeschaut und werde in nächster Zeit bestimmt auch diese bei meinem Programm einführen, nur müsste ich zuviele Anpassungen vornehmen, die ich vermeiden will, solange mein Programm noch nicht 100%-Bugfree ist...

mfg
Benjamin

Luckie 30. Jan 2007 13:01

Re: MyTaskManager v0.3.2.1
 
Zitat:

Zitat von Darkmorph
nur müsste ich zuviele Anpassungen vornehmen,

Dann ist es schlecht designet. Daten sollten von der Programmoberfläche immer, aus genau diesem Grund, getrennt verwaltet werden. Ich würde es machen wie mit dem Bank Beispiel aus dem Unterricht: Jeder Prozess ist eine Klasse und alle Prozess-Objekte werden in einer Containerklasse verwaltet.

Darkmorph 30. Jan 2007 13:30

Re: MyTaskManager v0.3.2.1
 
wenn du dir den source-code ansehen würdest, würdest du merken das ich es getrennt habe...
nur will ich jetzt erst das prog einigermassen funktional bekommen, bevor ich schönungsarbeiten vorantreibe...

außerdem habe ich noch nie mit der TListview gearbeitet und müsste mich da erst hineinarbeiten und dazu hab ich momentan nicht die Zeit und Muse :P

mfg
benjamin

PS: Ich weiß schon so ungefähr was Objektorientierung bedeutet :P
Ziehst du immer ohne vorher in quellcode geschaut zu haben über jenen her?

Luckie 30. Jan 2007 13:37

Re: MyTaskManager v0.3.2.1
 
Ich bin doch nicht über dich hergezogen. Nur hat mich deine Bemerkung mit den vielen Anpassungen dazu verleitet zu denken, dass du eben nicht Daten und Oberfläche getrennt hast, denn warum müsstest du sonst so viele Anpassungen machen?

Darkmorph 30. Jan 2007 13:41

Re: MyTaskManager v0.3.2.1
 
@luckie
ok... sorry, war wohl bissel in meinem Stolz getroffen *g*
Gibt bestimmt auch einiges was man besser machen kann.
ab Version 0.4 werd ich die TListview einführen, versprochen =)
bis dahin bitte bugs und ähnliches melden, wenn möglich

mfg Benjamin

himitsu 30. Jan 2007 17:53

Re: MyTaskManager v0.3.2.1
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Müßte unter allen Windows-Versionen lauffähig sein
dazu kann ich nur mals auf's MSDN/PSDK verweisen ... hier mal ein Auszuzug aus dem Vista-PSDK

Zitat:

GetProcessMemoryInfo

Requirements:
Client: Requires Windows Vista, Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0.
Server: Requires Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.
Kurzgesagt nur WinNT+ (kein WinME und Win9x)


:warn: Das mit CreateToolhelp32Snapshot erstellte Handle wird nicht wieder freigegeben!


Delphi-Quellcode:
//wenn erster Durchlauf erfolgreich, dann...
if Process32First(hSnap, pe32) = TRUE then begin
  //solange ein Prozess gefunden wird
  while Process32Next(hSnap, pe32) = TRUE do begin
Der erste Prozess wird nicht ausgewertet.


@Luckie: weniger Prozesse laufen lassen? :zwinker:
Na ja, er leert bei jedem Refresh die ListBox und füllt sie neu, wobei natürlich der der Cursor nach oben gesetzt wird.





Im Anhang ma was kurzes von mir, verwendet wurde nur CreateToolHelp32SnapShot, GetProcessTimes und GetProcessMemoryInfo.
Und nich dat sich wer wundert ... funktionieren tut nur die CheckBox und teilweise die TreeView ... sonsts nüschts :oops:
och ja, die 4 Zahlen bei den Modulen stimmen och nich mit der Spaltenüberschrift überein...
3:GlobalUsageCount 4:ModuleUsageCount 5:ModuleBaseAddress 6:ModuleBaseSize



[add]
so, die (neuen) Beiträge #5-#12, sowie die neue Version werd' ich mir dann in Ruhe daheim durchsehn ._.

(lag leider die letzten Tage etwas flach :( ... da wurde es halt nichts mit Abschicken)

Darkmorph 31. Jan 2007 08:37

Re: MyTaskManager v0.3.2.1
 
@himitsu

ich bin ausser mit der einfachen Listbox nicht wirklich sehr gut vertraut mit den anderen Anzeige-Komponenten. Wie
erstellt man mehrere Spalten bei Treeviews? (vielleicht Treeview mit listbox kombiniert?)

Danke für den Hinweis mit den CreateSnapshot-Handle, hab ich mittlerweile gefixed.
Kannste deine Sourcen bitte auch zur Verfügung stellen, damit ich mir mal anschauen kann, wie du das gelöst hast?


MfG Benjamin

himitsu 31. Jan 2007 12:45

Re: MyTaskManager v0.3.2.1
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, deine neue Version hab ich mir noch nicht angesehn und hier (unter Win9x und Linux) läuft es ja nicht.


Gern doch, mußte aber erst noch etwas aufräumen. Mir ging es ja nicht so gut und dementsprechend sah der Code leider auch aus. :nerd:

Das Wichtigste findest du in der Timer-Prozedur.





Aber nicht zuviel erwarten, erstens gibt's keine Kommentare und dann ist im Gegensatz zu deinem Programm und auch nochmal Luckies "Vorschlag" Daten und Oberfläche zu trennen, beider verbunden ... also die VirtualTreeView verwaltet auch gleich die Daten mit. So erstpare ich mir dieses und auch gleich noch das zusätzliche übergeben an die TreeView (für die Anzeige) ... halt keine mehrfachen Daten und schnellere Verarbeitung :roll: ... aber laß dich davon nicht beeinflussen ^^


PS: also ich versuche ja auch kaum Fremdkomponenten zu verwenden (du glaubs karnicht wie weit ich schon einige von Delphis Komponenten vergewaltigt hab und was die eigentlich leisten können, wenn man es aus denen nur rauskizelt),
aber es ist schon einfacher, wenn man fertige Komponenten nimmt, welche schon das "alles" können.

Ich denk mal die JEDIs und VirtualTreeView sind schon eine echt gute und vorallem kostenlose Ergänzung für Delphi :angel:

PSS: wenn ich jetzt noch rausgefunden hätte, warum die Unicodeversionen (z.B. Process32FirstW) nicht funktionieren, dann hätte ich die auch eingebaut gelassen ... da ich aber keine "Lust" hatte jetzt noch den ganzen Code zu ändern, wundere dich also nicht warum da die Strings etwas hinundherkonvertiert werden :stupid:

Luckie 31. Jan 2007 12:52

Re: MyTaskManager v0.3.2.1
 
Ich glaube, jetzt geht es etwas durcheinander. Würdest du bitte dein Programm in einem separaten Thread vorstellen? Danke.

himitsu 31. Jan 2007 13:08

Re: MyTaskManager v0.3.2.1
 
keine Sorge, ich werd' es eh nicht weiterentwickeln (gibt ja genug davon) ... wenn ich heute/morgen abend noch Zeit finde, dann kommen noch ein paar Kommentare/Leerzeilen rein und das war es auch schon.
(ich bin aber schon froh, daß der Code jetzt erstmal lesbar ist)

notfalls können wir es auch löschen und ich schick es ihm einfach per PN.
(aber ich denk' andere können ruhig och ma reingucken)



ich hatte einfach lange Weile (im Bett) und leider nich die Nerven und Ruhe für was "anspruchsvolleres" ... da hab ich einfach mal geguckt was man wit den schon in Darkmorphs Programm vorhandenen Funktionen noch alles machen kann.

himitsu 3. Feb 2007 13:24

Re: MyTaskManager v0.3.2.1
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, Unicode geht nun doch, jetzt gibt es zumindestens beim Auslesen (in Timer1Timer) keinem Unterschied zwischen Ansi und Wide :angel:
(Unicode und dwSize für Ansi passen halt nicht zusammen :wall: )

Bei TH32CS_SNAPMODULE/Module32First hatte ich übersehn, daß es die ModuleID nicht mehr gibt und da sie überall immer nur 1 ist, wurden beim Auslesen alle Module übereinandergeschrieben (da halt gleiche IDs).

Ansonsten hab ich nun auch ein paar Kommentare mit eingebaut :angel:




Dann hätte ich noch was nützliches Vorzuschlagen, welches vorallem Programmierer gut benötigen könnten:
  • Prozesse/Thread anhalten/fortsetzen
  • voller Prozesspfad
    also das auch Verzeichnis anzeigen, wo sich die EXE versteckt
    (diese und andere Infos würden sich z.B. in einem Hint, oder zusätzlischem Fenster praktisch unterbringen lassen)
  • Startparameter mit anzeigen
    (ich weiß jetzt zwar nicht wie, da GetCommandLine nur im aktuellen Prozess arbeitet, aber irgendwie muß es ja gehn)
  • DumpFiles erstellen (Speicherabbilder und sowas)
    dafür würde sich MSDN-Library durchsuchenMiniDumpWriteDump gut eignen
  • die Prioritäg der Prozesse und Threads zeigen/ändern (MSDN-Library durchsuchenGetPriorityClass/MSDN-Library durchsuchenGetThreadPriority)
  • für MultiProzessorSystem wäre es wohl nett, wenn angezeigt würde auf welchem Prozessor die Threads laufen und natürlich sollte man dieses auch ändern können
  • wenn man DefaultWerte für Programme festlegen könnte, wäre es super.
    möglichst auch mit Platzhalter, so daß auch gleich ganze Verzeichnisse behandelt werden können.

    festzulegen würde ich z.B. gern:
    • den Prozessor (also wo das Programm läuft)
    • Startpriorität (sobald das Programm gestartet wird, soll diese zugewiesen werden)
    • maximale CPU-Belastung (bei Überschreitung wird die Priorität runtergeschraubt)
    • ob das programm überhaupt laufen darf (wenn nicht dann beenden)
    • und welche programme immer laufen müssen (halt andersrum, also wenn's nicht läuft dann starten)
    • AlwaysOnTop beim Programmfenster festlegen (bei vielen Programmen läßt sich sowas leider nicht ändern)
  • wie Luckie schon sagte: ein/zwei TrayIcons für CPU/RAM/Pagefile-Auslastung wären nett
  • ...
Zu vielen Dingen gibt's in der DP schon einige Threads, dort kannst du dir ruhig die nötigen Infos holen und notfalls nochmal fragen. :angel:

Die Startparameter und DumpFiles sind inzwischen zwar im Vista-Taskmanager enthalten, aber wer nutzt schon Vista.
(die Beta läuft ja noch bis Juli und mal sehn ob sich Vista dann langsam mal lohnt)


PS: es wäre wirklich schöner, wenn die "überflüssigen" Dateien nicht im Archiv mit ausgeliefert würden.
Es gibt zwar einige Programme zum löschen dieser Dateien,
aber soeine Winzige BatchDatei reicht auch schon aus (kannt ja mal in einigen der Projekte hier in der DP nachsehen ... viele haben solch kleine .BAT-, oder .CMD-Dateien dafür mit drin)

andresilvaus 11. Mai 2007 14:40

Re: MyTaskManager v0.3.2.1
 
hi,
can i translate this into portuguese?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 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