AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte SysInfo mit einigen Fragen

SysInfo mit einigen Fragen

Ein Thema von S4SH1981 · begonnen am 27. Feb 2009 · letzter Beitrag vom 16. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2   
S4SH1981
Registriert seit: 13. Jul 2007
Hallo zusammen

Hier ein Sammelsurium von Systeminformation in einem Programm.

Habe da aber noch meine Probleme mit z.B. dem CPU Kram.
Name, Kerne, derzeitige Taktfrequenz habe ich.
Fehlen "nurnoch" MAximale genaue Taktfrequenz und die CPU Auslastung

Steh dazu noch auf dem Schlauch, wie ich die GB Werte der Festplatte ohne tausend NAchkommastellen angezeigt bekomme.
Und wie ich es hinkriege, dass ich nach Auswahl des Laufwerks die aktuellen Werte bekomme.

Sind mit Sicherheit einfach zu lösende vermeintliche Probleme.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Gauges, Registry, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Gauge1: TGauge;
    Gauge2: TGauge;
    Edit1: TEdit;
    Edit2: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Timer1: TTimer;
    Label14: TLabel;
    Edit14: TEdit;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//FUNKTIONEN
//------------------------------------------------------------------------------
//PROZESSORNAME
function GetProzessorName: string;
var reg: TRegistry;
begin
  result:='Unbekannter Prozessor';
  reg:=TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.OpenKey('Hardware\Description\System\CentralProcessor\0', false);
    result:=reg.ReadString('ProcessorNameString');
  finally
    reg.free;
  end;
end;

//DERZEITIGE PROZESSORAUSLASTUNG
function CalcCPUSpeed: Extended;
const
  DelayTime = 500; // measure time in ms
var
  TimerHi, TimerLo: DWord;
  PriorityClass, Priority: Integer;
begin
  try
    PriorityClass := GetPriorityClass(GetCurrentProcess);
    Priority := GetThreadPriority(GetCurrentThread);

    SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
    SetThreadPriority(GetCurrentThread,
                      THREAD_PRIORITY_TIME_CRITICAL);
    try
      Sleep(10);
      asm
        dw 310Fh // rdtsc
        mov TimerLo, eax
        mov TimerHi, edx
      end;
      Sleep(DelayTime);
      asm
        dw 310Fh // rdtsc
        sub eax, TimerLo
        sbb edx, TimerHi
        mov TimerLo, eax
        mov TimerHi, edx
      end;
    finally
      SetThreadPriority(GetCurrentThread, Priority);
      SetPriorityClass(GetCurrentProcess, PriorityClass);
    end;
    Result := TimerLo / (1000.0 * DelayTime);
  except
    Result := 0;
  end;
end;

//LAUFWERKE ERMITTELN
procedure GetDrives(const AItems: TStrings);
const
  DriveTypeTexts: array[DRIVE_UNKNOWN..DRIVE_RAMDISK] of string =
   ('Unbekannt', 'Kein Wurzelverzeichnis', 'Diskette', 'Festplatte', 'Netzlaufwerk', 'CDROM', 'RAMDisk');
var
  Drive: Char;
  DriveType: Integer;
  DriveMask: Integer;
  Flag: Integer;
begin
  DriveMask:=GetLogicalDrives;
  flag:=1;
  for Drive := 'Ato 'Zdo
  begin
    if (flag and DriveMask)<>0 then
    begin
      DriveType := GetDriveType(PChar(Format('%S:\',[Drive]) ) ) ;
      AItems.Add(Format('%s: %s', [Drive, DriveTypeTexts[DriveType]]));
    end;
    flag:=flag shl 1;
  end;
end;

//ANZAHL DER PROZESSOREN ERMITTELN
function GetNumberOfProcessors: Integer;
var
  SystemInfo: TSystemInfo;
begin
  GetSystemInfo(SystemInfo);
  Result:=SystemInfo.dwNumberOfProcessors;
end;

//WINDOWS UPTIME
procedure GetWindowsUpTime(var ADay, AHours, AMinutes, ASeconds: Integer);
const
  OneDay : Integer = 1000 * 60 * 60 * 24;
  OneHour : Integer = 1000 * 60 * 60;
  OneMinutes : Integer = 1000 * 60;
  OneSecond : Integer = 1000;
var
  Start : Integer;
  d, h, m, s: Integer;
begin
  Start:=GetTickCount;

  ADay:=Start div OneDay; //Tage

  d:=Start mod OneDay;
  AHours:=d div OneHour; //Stunden

  h:=d mod OneHour;
  AMinutes:=h div OneMinutes; //Minuten

  s:=h mod OneMinutes;
  ASeconds:=s div OneSecond; //Sekunden
end;

//PROGRAMMSTART
//------------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
var
  Memory: TMemoryStatus;
  freeCaller, total: Int64;
begin
  GetDrives(listbox1.Items);
  edit1.text:=GetProzessorName;
  edit2.Text := inttostr(GetNumberOfProcessors);
  Memory.dwLength := SizeOf(Memory);
  GlobalMemoryStatus(Memory);
  edit6.text:=IntToStr(Memory.dwTotalPhys div 1024 div 1024) +' MB';
  GetDiskFreeSpaceEx('c:', freeCaller, total, nil);
  edit9.text:=floatToStr(total div 1024 div 1024 / 1024) +' GB';

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Tage, Stunden, Minuten, Sekunden: Integer;
  Memory: TMemoryStatus;
  SystemPowerStatus: TSystemPowerStatus;
  freeCaller, total: Int64;
begin
  edit4.Text:=IntToStr(Round(CalcCPUSpeed))+ ' MHz';
  GetWindowsUpTime(Tage, Stunden, Minuten, Sekunden);
  edit11.text :=Format('%d Tage %d Stunden %d Minuten %d Sekunden', [Tage, Stunden, Minuten, Sekunden]);
  Memory.dwLength := SizeOf(Memory);
  GlobalMemoryStatus(Memory);
  gauge1.MaxValue := Memory.dwTotalPhys;
  gauge1.Progress := Memory.dwAvailPhys;
  gauge2.MaxValue := Memory.dwTotalPhys;
  gauge2.Progress := Memory.dwTotalPhys - Memory.dwavailPhys;
  //Freier Arbeitsspeicher
  edit7.Text := inttostr(Memory.dwAvailPhys div 1024 div 1024)+ ' MB';
  edit8.Text := inttostr(Memory.dwTotalPhys div 1024 div 1024 - Memory.dwavailPhys div 1024 div 1024)+ ' MB';
  GetSystemPowerStatus(SystemPowerStatus);
  with SystemPowerStatus do begin
  // Wird das System mit Wechselstrom oder Akku betrieben ?
    case ACLineStatus of
      0: edit12.text := 'System wird mit Akku betrieben';
      1: edit12.text := 'System wird mit Wechselstrom betrieben';
      else Label5.Caption := 'Unbekannter Status';
    end;
    // Ladezustand der Batterie
    case BatteryFlag of
      1 : edit13.text := 'Hoher Ladezustand';
      2 : edit13.text := 'Niedriger Ladezustand';
      4 : edit13.text := 'Kritischer Ladezustand';
      8 : edit13.text := 'Die Batterie wird geladen';
      128: edit13.text := 'Es existiert keine System-Batterie';
      255: edit13.text := 'Unbekannter Status';
    end;

    // Ladezustand in Prozent
    if BatteryLifePercent <> 255 then
      edit14.text := IntToStr(BatteryLifePercent) + ' %'
    else
      edit14.text := 'Unbekannter Status';
  end;
  Memory.dwLength := SizeOf(Memory);
  GlobalMemoryStatus(Memory);
  GetDiskFreeSpaceEx('c:', freeCaller, total, nil);
  edit10.text:=floattostr(freeCaller div 1024 div 1024 / 1024)+' GB';
  end;

end.
Angehängte Dateien
Dateityp: rar sysinfos_165.rar (185,5 KB, 76x aufgerufen)
 
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#2
  Alt 27. Feb 2009, 21:58
Zitat von S4SH1981:
... Steh dazu noch auf dem Schlauch, wie ich die GB Werte der Festplatte ohne tausend NAchkommastellen angezeigt bekomme ...
Dieses kanst Du über den Befehl Delphi-Referenz durchsuchenFormat lösen.
Rolf Warnecke
  Mit Zitat antworten Zitat
S4SH1981
 
#3
  Alt 27. Feb 2009, 23:54
Folgende Situation:

Am Laptop Delphi 2005 habe ich bei Festplatte z.B. 50,5050505050505
Am DesktopPC Delphi 2005 ohne was am Code zu machem habe ich 132,123

Muss ich das verstehen?
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

 
Delphi 2007 Enterprise
 
#4
  Alt 28. Feb 2009, 00:00
Zitat von S4SH1981:
Folgende Situation:

Am Laptop Delphi 2005 habe ich bei Festplatte z.B. 50,5050505050505
Am DesktopPC Delphi 2005 ohne was am Code zu machem habe ich 132,123

Muss ich das verstehen?
Öhmm, lass mich raten, die Festplatten sind unterschiedlich groß; oder was willst Du uns damit sagen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#5
  Alt 28. Feb 2009, 00:20
Ich glaube, er meinte die Anzahl der Nachkommastellen. Bei der einen Festpaltte passt es wohl zufälligerweise mit den drei Nachkommastellen.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

 
Delphi 2007 Enterprise
 
#6
  Alt 28. Feb 2009, 01:11
Zitat von Luckie:
Ich glaube, er meinte die Anzahl der Nachkommastellen. Bei der einen Festpaltte passt es wohl zufälligerweise mit den drei Nachkommastellen.
Das kann sein. Format() (wie RWarnecke schon erwähnt hat) richtig angewandt, und dann passt das.
Mein Beitrag war, an und für sich, nur als "zeig mal, was Du bisher gemacht hast" gemeint...
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#7
  Alt 28. Feb 2009, 08:23
Ich benutze gerne diese Funktion um die Größe der Platte anzuzeigen.
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//
// Funktion zum bestimmen der Größe in Byte, KiloByte, MegaByte, GigaByte oder
// TeraByte
//
function FormatSize(SizeB: Extended): String;
begin
  if SizeB>1099511627776 then result:=Format('%f TB',[SizeB/1024/1024/1024/1024]) else
  if SizeB>1024*1024*1024 then result:=Format('%f GB',[SizeB/1024/1024/1024]) else
  if SizeB>1024*1024 then result:=Format('%f MB',[SizeB/1024/1024]) else
  if SizeB>1024 then result:=Format('%f KB',[SizeB/1024]) else
  if SizeB>=0 then result:=Format('%f Byte',[SizeB]);
end;
Rolf Warnecke
  Mit Zitat antworten Zitat
Micha88
 
#8
  Alt 28. Feb 2009, 17:08
Ich hab das ganze Ding mal UNFACHMÄNNISCH und nur SPORADISCH abgeändert, Anhang
Angehängte Dateien
Dateityp: zip sysinfo_418.zip (16,0 KB, 43x aufgerufen)
  Mit Zitat antworten Zitat
hathor
 
#9
  Alt 1. Mär 2009, 08:58
Zitat von MichaelLinden:
Ich hab das ganze Ding mal UNFACHMÄNNISCH und nur SPORADISCH abgeändert, Anhang
Im Prinzip besser, aber noch fehlerhaft:

Maximale Taktfrequenz - derzeitige Taktfrequenz: vertauscht, gerundet sähe es besser aus:
edit4.Text:=IntToStr(Round(vMaxFrequ div 100 +1)* 100)+ ' MHz';
edit3.Text:=IntToStr(Round(vCurrFrequ div 100 +1)* 100)+ ' MHz';

Prozessorauslastung: bei Mehrkern-CPU einzeln messen

Festplatte 1 Kapazität: Bezeichnung falsch, Wert gilt nur für C:

Ladezustand der Batterie: Edit13 -> unschön
  Mit Zitat antworten Zitat
Hobby-Programmierer

 
Delphi XE Starter
 
#10
  Alt 1. Mär 2009, 13:29
Zitat von hathor:
Prozessorauslastung: bei Mehrkern-CPU einzeln messen
Hallo ...,
hat jemand lauffähigem Code um die einzelnen Kerne auszulesen ? Habe schon einige Codefragmente getestet, leider immmer ohne Erfolg ...
Mario
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf