Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   CPU-Auslastung (https://www.delphipraxis.net/7686-cpu-auslastung.html)

Matze 19. Aug 2003 09:55


CPU-Auslastung
 
Liste der Anhänge anzeigen (Anzahl: 4)
Hi!
Ich habe ein kleines Programm geschrieben, das einem die aktuelle CPU-Auslastung anzeigt. (mithilfe dieses Forums. :wink: )
Nicht Besonderes.

Ich glaube aber, dass es nur unter Win NT/2000/XP geht, aber getestet habe ich das noch nicht.

Gruß Matze

Alexander 19. Aug 2003 10:04

Re: CPU-Auslastung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
funktioniert auch soweit ganz gut (unter XP Home getestet.).
Aber ich würde da vielleicht noch eine kleine Funktion einfügen. Und zwar sollte es vielleicht, wenn es nah genug am Bildschirmrand oder anderen Fenstern (das vielleicht nciht unbedingt...) automatisch (als Option) andocken.
Vom Design gefällt mir das kleine Tool sehr!

Aber ich habe noch eine kleine Unit (von Alexey A. Dynnikov), mit dem du es sogar unter Win 9x und ME zum Funktionieren bringen kannst. Desweiteren soll man damit auch mehrere CPU's kontrollieren können. -> Siehe Anhang.

PS: Noch ne kleine Frage: Wird die CPU-Auslastung per Timer oder Thread überprüft? es wäre besser einen thread zu nutzen, da resourcenschonender...

Matze 19. Aug 2003 10:07

Re: CPU-Auslastung
 
Hi!

Erstmal danke für's Testen.
Ich benutze keinen Timer. Deine Unit werde ich mir mal anschauen, danke auch dafür. Weißt du, wie man das macht, dass das Fenster "andockt"? Die Idee ist nämlich echt gut! :D

Gruß Matze

Stanlay Hanks 19. Aug 2003 10:14

Re: CPU-Auslastung
 
Hi! Also ich mach das immer so, mit dem Andocken.

Zuerst unter protected (musst du irgendwo über oder unter private und public schreiben) ne Message deklarieren:

Delphi-Quellcode:
procedure WMMove(var message: Tmessage);message WM_Move;
// Dann diesen Quelltext einfügen

und dann noch folgende Prozedur dazu schreiben:

Delphi-Quellcode:
procedure TForm1.WMMove(var message: Tmessage);
begin
 IF (Form1.Left > 0) AND (Form1.Left < 10) THEN
  Form1.Left := 0;
 IF (Form1.Top > 0) AND (Form1.Top < 10) THEN
  Form1.Top := 0;
 IF (Form1.Left < Screen.Width - Form1.Width) AND
    (Form1.Left > Screen.Width - Form1.Width -10) THEN
  Form1.Left := Screen.Width - Form1.Width;
 IF (Form1.Top < Screen.Height - Form1.Height) AND
    (Form1.Top > Screen.Height - Form1.Height - 30) THEN
  Form1.Top := Screen.Height - Form1.Height -30;
end;
Das mit dem -30 bei Top hab ich gemacht, weil das ding sonst unter der Taskleiste verschwindet.

Man liest sich, Stanlay :hi:

Alexander 19. Aug 2003 10:14

Re: CPU-Auslastung
 
Nicht wirklich :mrgreen:
Aber mit der API MoveWindow (siehe MSDN/PSDK) kannst du die Position ja schon mal verändern

Und dann kannst du dir ja die WM_MOVE-Message registrieren. Es sollte zumindest relativ einfahc sein, zu überprüfen, ob der Bildschirm zu ende ist oder nicht. Ob da ein fremdes Fenster ist, ist sicherlich schwieriger, da weiß ich im Moment auch nicht weiter....
Aber Bildschirmrand sollte nciht so das Problem sein, Bildschirmauflösung ermitteln und dann mit der eigenen Fensterposition vergleichen.

Matze 19. Aug 2003 10:16

Re: CPU-Auslastung
 
Danke erstmal.

@Stanlay: Ich probier deinen Vorschlag mal aus.

Gruß Matze

Alexander 19. Aug 2003 10:19

Re: CPU-Auslastung
 
Dieses -30 ist aber nciht sehr elegant, denn was ist wenn der User die Taskleiste größer oder sogar an einer anderen Stelle hat?
Ich glaube in der Code-Library steht was, über's Auslesen von Position und Größe der Taskbar drin.

Stanlay Hanks 19. Aug 2003 10:23

Re: CPU-Auslastung
 
Jaja....mach mich fertig....ich halt das ja aus. :evil:

Nö, im Ernst :mrgreen:

Ich weiß schon, dass es da Probleme geben könnte, wenn die Taskbar höher is. Aber der Vorschlag war ja nur so auf die Schnelle, weil ich den In meiner QT Sammlung gespeichert hatte. :wink:
Trotzdem hast du natürlich recht.

Man liest sich, Stanlay :hi:

Matze 19. Aug 2003 10:24

Re: CPU-Auslastung
 
Hi!

Hab Stanlay's Code mal verwendet und eine neue Version hochgeladen, da ich einen kleinen Bug entdeckt habe (zw. 60 und 100% wurde die Farbe grau, anstatt rot).

@alexander: Ich kann nichts Passendes finden, sorry.

Gruß Matze

Alexander 19. Aug 2003 10:37

Re: CPU-Auslastung
 
@Matze das sollte dir helfen:
http://www.delphipraxis.net/internal...ect.php?t=7229 und das hier sollten dir helfen:
http://www.delphipraxis.net/internal...ght=taskleiste
Damit wären die Positionsprobleme gelöst :mrgreen:

Ähm mir fällt noch was ein. Und zwar solltest du evtl. den Taskbareintrag entfernen - wäre vielleicht nicht schlecht...

Matze 19. Aug 2003 10:40

Re: CPU-Auslastung
 
Das "Aus der Taskbar verschwinden" mach ich schnel...
Aber durch deine Links dock das Fenster noch nicht an ein anderes an, man erfährt nur, wo sich sie taskbar befindet. :(

Alexander 19. Aug 2003 10:42

Re: CPU-Auslastung
 
So habe mir die neue Version ncoh mal angekuckt und habe gemerkt das man das Fenster vergrößern und verkleinern kann. Entweder du deaktivierst das oder vergrößerst auch die TGauge oder weas uach immer das ist :mrgreen:

Und man sollte das Fenster dann vielleicht auhc nciht über den Bildschirmran rüberschieben können.

Alexander 19. Aug 2003 10:46

Re: CPU-Auslastung
 
Ja aber .... :mrgreen:
Da habe ich ja gesagt das weiß ich auch nicht, wie es an andere Fenster ran geht...

Aber ich habe ja shcon gesagt, dass diese -30 nicht optimal ist (siehe oben). Deshalb musst du noch überprüfen, wo sich die Taskbar befindet, die Höhe und ob sie überhaupt angezeigt wird. Das wird dort auf den Seiten erklärt.

Matze 19. Aug 2003 10:51

Re: CPU-Auslastung
 
OK, danke. Also in der Taskbar wird's jetzt nicht mehr angezeigt (Version noch nicht oben). Jedoch bekomme ich das nicht hin, dass man das Fenster nicht aus dem Bildschirm schieben kann.

Ich hab's so probiert:

Code:
if Form1.Left<0 then Form1.Left:=0;
if Foerm1.Top<0 then Form1.Top:=0;
if Form1.Left>Screen.Width-Form1.Width then Form1.Left:=Screen.Width-Form1.Width;
if Form1.Top>Screen.Height-Form1.Height then Form1.Top:=Screen.Height-Form1.Height;
Also, ehrlich gesagt: ich weiß nicht so recht, wie man das macht.

Gruß Matze

Stanlay Hanks 19. Aug 2003 10:51

Re: CPU-Auslastung
 
Also ich denke, dass das nicht so einfach sein wird, zu überprüfen, ob ein anderes fenster "in der Nähe ist". So wie ich mir das vorstelle (obwohl ich mich da nicht besonders auskenne :oops:) müsste man doch eigentlich die Position von jedem Fenster überprüfen und dann entsprechend reagieren, oder?

Matze 19. Aug 2003 10:56

Re: CPU-Auslastung
 
Das wird dann aber etwas Größeres. :wink:
Ich lade gerade die Versio hoch, bei der das Prog nicht in der Taskbar zu sehen ist.

Alexander 19. Aug 2003 11:00

Re: CPU-Auslastung
 
Versuch mal so:
Delphi-Quellcode:
if (Form1.Left < 0) then
 Form1.Left := 0;

if ((Form1.Left + Form1.Width) > Screen.Width) then
 form1.Left := Screen.Width - Form1.Width;

if (form1.Top < 0) then
 Form1.Top := 0;

if ((Form1.Top + Form1.Height) > Screen.Height) then
 form1.Top := Screen.Height - Form1.Height;
Muss natürlich auch ins WM_Move. Ist allerdings nicht getestet...

Matze 19. Aug 2003 11:05

Re: CPU-Auslastung
 
Danke alexander, das geht jetzt schon mal. Ich lade es kurz hoch...

Alexander 19. Aug 2003 11:09

Re: CPU-Auslastung
 
ahh mist ich habe jetzt auch nicht die Taskleiste beachtet, die musst du natürlich hier noch beachten:
Delphi-Quellcode:
if ((Form1.Top + Form1.Height) > (Screen.Height {- taskleistenhöhe...})) then
 form1.Top := Screen.Height - Form1.Height;

Matze 19. Aug 2003 11:11

Re: CPU-Auslastung
 
So geht das schon, das Stanlay den Code mit dem Andocken an die Taskbar gepostet hat. Probiers doch mal aus. :wink:

Alexander 19. Aug 2003 11:14

Re: CPU-Auslastung
 
Ähm aber nur so lange wie die Taskleiste unten ist und genau die Höhe von 30 Pixeln hat....

Matze 19. Aug 2003 11:15

Re: CPU-Auslastung
 
Das stimmt! Ich probiere mal deinen Vorschlag aus.

Matze 19. Aug 2003 11:19

Re: CPU-Auslastung
 
Laut diesem Code:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  tl: HWnd;
  rah: TRect;
begin
  tl := FindWindow('Shell_TrayWnd', nil);
  GetWindowRect(tl, rah);
  tl := FindWindow('Shell_TrayWnd', nil);
  GetWindowRect(tl, rah);
  ShowMessage('Die Taskleiste fängt Links bei ' + IntToStr(rah.Left) +
              ' an, geht Rechts bis ' + IntToStr(rah.Right) +
              ', von Oben aus gesehen, fängt sie bei ' + IntToStr(rah.Top) +
              ' an und endet Unten bei ' + IntToStr(rah.Bottom));
end;
hab ich eine Bildschirmbreite von 1026, obwohl ich 1024 hab.
Ich geh dann mal offline, bis morgen.

Gruß Matze

Matze 19. Aug 2003 12:40

Re: CPU-Auslastung
 
Hi! Ich nochmal.

Gibt es die Möglichkeit, sich die CPU Auslastung als Diagramm darstellen zu lassen (ohne Excel, nur mit Delphi), so wie es Windows auch macht?

Gruß Matze

Alexander 19. Aug 2003 12:44

Re: CPU-Auslastung
 
Ähm ich meine unter Samples (und auf jeden Fall unter ActiveX) sind Diagramm-Komponentne, allerdings weiß ich nciht worauf, die ActiveX Komponenten zurückgreifen, also ob der Windows-User sie immer hat...

Stanlay Hanks 19. Aug 2003 13:27

Re: CPU-Auslastung
 
Hi! Unter "Zusätzliches" gibt es eine Komponente namens Chart. Ich schätze mal, die sollte dafür taugen.

Man liest sich, Stanlay :hi:


PS: Wer hat den : hi : smiley verändert? :mad:

Alexander 19. Aug 2003 13:46

Re: CPU-Auslastung
 
Dann halt dort :mrgreen:
war mir nciht sicher wo, wusste nur, dass es welche gibt ;-)

Was ist denn mit dem :hi:-Smilie los? :mrgreen:

Assarbad 19. Aug 2003 13:51

Re: CPU-Auslastung
 
@alexander: Schriebst du nicht "kleines Programm"??? *g*

Timer und Thread ist Abwaegungssache. Timer (Fenstertimer) brauchen weniger zusaetzliche Ressourcen als ein Thread - sind aber auch unzuverlaessiger UND werden ab Intervallen<=100ms unertraeglich fuer die Systemperformance. Kommt also drauf an :)

BTW: Hier mal ein KLEINES Programm zum selben Thema ;)

CPU Usage (nonVCL mit Source) -> http://e.honeker.bei.t-online.de/images/cpuusage.png ... und platzsparen isses auch noch ;)

Joah is denn hoit scho Wainachtn???

Alexander 19. Aug 2003 13:56

Re: CPU-Auslastung
 
Jupp sagte ich...
Ist auch nicht schlecht (besonders schön klein :mrgreen: ) ;-)
Aber eine Kombination aus beiden wäre natürlich noch besser...
Sprich, wenn man auf das Icon klickt kommt so ein Fenster wie Matzes.

Assarbad 19. Aug 2003 14:09

Re: CPU-Auslastung
 
Hehe ... das ist nun wirklich kein Hit. Mach's doch einfach ;) Wozu ist denn der Source dabie ;)

Alexander 19. Aug 2003 15:34

Re: CPU-Auslastung
 
Hihi,
ich brauch das nciht zu machen, von mir gibt es schon die ApptoolBar, wo das auch angezeigt wird, es bietet aber ncoh einige mehr funktionen, Die CPU-Auslastung ist nur eine Funktion unter vielen :mrgreen:.

mika 19. Aug 2003 16:31

Re: CPU-Auslastung
 
Hallo,

ich habe mir dein programm zwar (noch) nicht angesehen weil ich grade
bei der arbeit bin aber was ich hier so überflogen habe wegen andocken
am rand, da kann ich vielleicht kurz was sagen wegen der traybar.

nehmt doch anstatt screen.width z.b.: screen.workareawidth, da ist die
taskbar schon mit drin weil diese als wert nur den nutzbaren bereich
des bildschirms zurückgibt (soweit ich weiss). Das gleiche gilt auch
mit screen.workareaheigth.


so, ich muss weg, hab feierabend :)
bis morgen ihr alle.



mfg, mika

Assarbad 19. Aug 2003 16:43

Re: CPU-Auslastung
 
Mahlzeit, haengt aber davon ab, ob sich meine TB automatisch versteckt oder nicht *g*

Stanlay Hanks 19. Aug 2003 16:49

Re: CPU-Auslastung
 
@mika Also das mit dem "WorkArea" wusste ich auch noch nicht. Das is cool!

@Assarbad: verändert sich diese Screen.WorkAreaHeight usw Variable, wenn die Taskbar eingeblendet wird, oder wird die nur beim Programmstart "gefüllt"? Würde mich interessieren, weil ich zu dem Thema in der OI nu folgendes gefunden hab:

Zitat:

Mit WorkAreaHeight läßt sich die Höhe des nutzbaren Bereichs auf dem Hauptbildschirm ermitteln. WorkAreaHeight unterscheidet sich von der Eigenschaft Height darin, daß die Flächen abgezogen werden, die auf dem Desktop von der Taskleiste und eventuell von Symbolleisten belegt sind.
Da steht nix, wie ob diese Variable angepasst wird...

Man liest sich, Stanlay :hi:

Assarbad 19. Aug 2003 17:08

Re: CPU-Auslastung
 
Veraendert sich glaube ich nicht.

Aber du kannst da eine Message abfangen: WM_SETTINGCHANGE

Da wuerdest du sehen, ob es geupdated wird oder nicht. Und ausserdem reagierst du so auf eine Aenderung dieser Einstellung (und auch zB von Aufloesungsaenderung etc)

Stanlay Hanks 19. Aug 2003 17:16

Re: CPU-Auslastung
 
Aha, Danke! Das heißt im Endeffekt, dass ich diese Message abfangen müsste, und dabei die Position der Taskleiste abfragen müsste, oder?

Man liest sich, Stanlay :hi:

Matze 19. Aug 2003 19:37

Re: CPU-Auslastung
 
Hi!

@Mika: Danke für den Tipp (screen.workareawidth) :mrgreen:

@alexander: Dein Vorschlag mit der Unit, die unter Win9x laufen soll geht überhaupt nicht.

1. Das Programm zeigt dann an, dass ich 2 Prozessoren habe mit jeweils der gleichen Auslastung (habe ich aber nicht, sondern 3 :wink: , Spaß: ich hab nur einen)
2. Die CPU-Auslastung stimmt auch nicht.
3. Aber trotzdem danke für den Tipp.

Gruß Matze

Alexander 19. Aug 2003 21:02

Re: CPU-Auslastung
 
?
Also das Problem mit den 2 Prozessoren hatte ich auch, da sie beide das gleiche anzeigen, habe ich halt einen Prozessor abgezogen. Frei nach dem Motto, was nicht passt wird passend gemacht....

Aber was stimmt denn nicht mit der Auslastung? Die stimmt einwandfrei (bis auf dass er manchmal negative Zahlen anzeigt, so knapp unter null, aber das kann man ja auch abfangen)
Aber sonst stimmt das einwandfrei...Ich habe das zumindest bei mir ne Zeitlang unter XP mit dem Taskmanager verglichen...

Matze 19. Aug 2003 21:04

Re: CPU-Auslastung
 
Bei mir zeigt das was ganz anderes an, als mein Prog oder der XP-Taskmagaer.

Alexander 19. Aug 2003 21:22

Re: CPU-Auslastung
 
*Grrr*
Kannst du dir mal mein Tool ankucken, ob das dort genau so ist? Wäre nett (kannst dann ja auf der Seite des Links posten...)
Klick
Weil wenn dass bei dir dort genauso ist, dann dreh ich noch mal durch :mrgreen:
Habe mich so gefreut, eine Unit gefunden zu haben, die die Funktion auch unter Win9x beitet...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.
Seite 1 von 3  1 23      

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