![]() |
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 |
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... |
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 |
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:
// Dann diesen Quelltext einfügen
procedure WMMove(var message: Tmessage);message WM_Move;
und dann noch folgende Prozedur dazu schreiben:
Delphi-Quellcode:
Das mit dem -30 bei Top hab ich gemacht, weil das ding sonst unter der Taskleiste verschwindet.
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; Man liest sich, Stanlay :hi: |
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. |
Re: CPU-Auslastung
Danke erstmal.
@Stanlay: Ich probier deinen Vorschlag mal aus. Gruß Matze |
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. |
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: |
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 |
Re: CPU-Auslastung
@Matze das sollte dir helfen:
![]() ![]() 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... |
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. :( |
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. |
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. |
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:
Also, ehrlich gesagt: ich weiß nicht so recht, wie man das macht.
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; Gruß Matze |
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?
|
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. |
Re: CPU-Auslastung
Versuch mal so:
Delphi-Quellcode:
Muss natürlich auch ins WM_Move. Ist allerdings nicht getestet...
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; |
Re: CPU-Auslastung
Danke alexander, das geht jetzt schon mal. Ich lade es kurz hoch...
|
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; |
Re: CPU-Auslastung
So geht das schon, das Stanlay den Code mit dem Andocken an die Taskbar gepostet hat. Probiers doch mal aus. :wink:
|
Re: CPU-Auslastung
Ähm aber nur so lange wie die Taskleiste unten ist und genau die Höhe von 30 Pixeln hat....
|
Re: CPU-Auslastung
Das stimmt! Ich probiere mal deinen Vorschlag aus.
|
Re: CPU-Auslastung
Laut diesem Code:
Code:
hab ich eine Bildschirmbreite von 1026, obwohl ich 1024 hab.
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; Ich geh dann mal offline, bis morgen. Gruß Matze |
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 |
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...
|
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: |
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: |
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 ;) ![]() ![]() Joah is denn hoit scho Wainachtn??? |
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. |
Re: CPU-Auslastung
Hehe ... das ist nun wirklich kein Hit. Mach's doch einfach ;) Wozu ist denn der Source dabie ;)
|
Re: CPU-Auslastung
Hihi,
ich brauch das nciht zu machen, von mir gibt es schon die ![]() |
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 |
Re: CPU-Auslastung
Mahlzeit, haengt aber davon ab, ob sich meine TB automatisch versteckt oder nicht *g*
|
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:
Man liest sich, Stanlay :hi: |
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) |
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: |
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 |
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... |
Re: CPU-Auslastung
Bei mir zeigt das was ganz anderes an, als mein Prog oder der XP-Taskmagaer.
|
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...) ![]() 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. |
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