Autor Beitrag
Hochhaus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: So 29.12.13 18:22 
Hallo allerseits !

da ich mich bei systemnaher Programmierung nicht gut auskenne, habe ich die folgende Frage: Gibt es kurze Delphi-Programme, die als Ausgabe die verwendete CPU und Taktfrequenz liefern ? CPU's unter dem Pentium III müssen natürlich nicht erkannt werden, mich interessieren die Folgenden:

1) Pentium III / 4
2) Core-Prozessoren wie Core 2 Duo oder i3-i7
3) Aktuelle AMD-CPU's

Danke im Voraus für jede Hilfe !


Hochhaus


Dies benötige ich, um in einem Programm festzustellen, ob ein PC gewisse Mindestanforderungen erfüllt.
Google liefert mir -> www.marlem-software....read.php?postid=4959
Das hilft aber nicht weiter ...
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 29.12.13 18:49 
Schau mal nach bei diesem Registry-Pfad nach:

ausblenden Quelltext
1:
HKEY_LOCAL_MASHINE\HARDWARE\					


Zumindest unter WIndows XP findest du dort einige Hardware-Informationen.

Wenn du unter

ausblenden Quelltext
1:
HKEY_LOCAL_MASHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\					


schaust, findest du die einzelnen centralen Prozessor-Kerne. Zumindest glaube ich, dass das die einzelnen Kerne sind, weil an dem einfachen Rechner, an dem ich gerade bin, hab ich nur den Unterordner '0', wa vermutlich den kleinen Ein-Kern-Prozessor meint.

Auf jeden Fall findest du da die wichtigsten Informationen. Tiefer ins Detail geht über den Weg nicht, aber bevor du jetzt anfängst, die komplette Hardware des Rechners auszulesen und zu analysieren, sollte das ausreichen :D



PS:

Das hab ich nicht aus meinem Gedächtnis gekramt, sondern mit Hilfe von Google innerhalb weniger Sekunden gefunden :P
Ein kurzer Blick an den gefundenen Registry-Pfad hat mir dann alles Weitere gesagt ^^

Ich kenne noch einen anderen Weg, den müsste ich aber auch erst suchen und der war in C#, für dich also wahrscheinilch nutzlos.




Edit:

Hab nochwas gefunden:

www.mycsharp.de/wbb2...d.php?threadid=49582

Ähnlich wie die C#-Lösung, die ich mal hatte, aber ich denke, der Weg, der dort beschrieben ist, funktioniert auch unter Delphi.
Im Prinzip wird ja nur eine Select-Abfrage an die Datenbank "Win32_OperatingSystem" gesendet und die Ergebnisse ausgewertet.
Wie du das unter Delhi machst, kann ich dir nicht sagen, ich bin nur ein kleiner C#-Knecht ^^

Hab sowas ähnliches mal gemacht um Informationen über bereits installierte Software zu erhalten und hab das Maimum an möglichen Informationen bekommen, was auch ein bisschen gedauert hat. Am Arbeits-Rechner hat das rund ne Minute gedauert, an meinem privaten Rechner "nur" 8 Sekunden. Ob das an der Tatsache liegt, dass in der Regel zu SOftware installiert ist und ob das in deinem Fall dann schneller geht, musst du aus testen.


Noch ein Edit:

Unter WIndows XP gibt es ein Tool, das nennt sich "command.com"
Einfach über die cmd.exe öffnen, für das Fenster in der Höhe den Buffer deutlich größer einstellen und dann "Systeminfo" eingeben.
Warum den Buffer größer stellen: Bei mir sind 600 Hotfixes installiert und jeder bekommt ne eigene Zeile. ^^

Für diesen Beitrag haben gedankt: Hochhaus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 29.12.13 19:23 
Das Problem an der Sache ist, dass eine aktuelle CPU keine besonders hohe Taktfrequenz haben muss, vor allem in Laptops. Ein reiner Test darauf hilft also nicht viel.

Du könntest einen Hinweis über das Windows System Assessment Tool bekommen. Die winsat.exe mit Parameter "disk" bzw. "cpu -compression" liefert ganz gute Anhaltspunkte.

Ansonsten ist die schon erwähnte WMI eine gute Anlaufstelle.

Für diesen Beitrag haben gedankt: Hochhaus
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 29.12.13 19:38 
Oder er fragt einfach den Prozessor ab und "schätzt" dann anhand der Serie und des Modells (nennt man das so? Ich meine z.B. i7-4771) ob die Leistung ausreicht.
Ich würde dann aber auch maximal nur eine Warnung ausgeben, dass es dann eventuell nicht funktioniert.

Besser finde ich, wenn du die benötigte Hardware einfach nur dazu schreibst und im Programm gar nicht beachtest, zumindest hab ich bisher kaum Programme gesehen, die das selber tun.
Was mir so spontan noch einfällt, wäre Skyrim, das über ein extra Tool die Infos ausgelesen und die EInstellungen dann automatisch konfiguriert hat, aber das war dann ein extra Tool und nicht das eigentliche Programm.




So am Rande:

Gibt es eigentlich online eine Tabelle von Prozesoren mit den jeweiligen Hardware-Spezifikationen, die man einfach automatisch abrufen kann? So aus dem HTML-Quelltext der Webseite von zum Beispiel Intel das raus zu wühlen, wäre mir zu umständlich und fehleranfällig.
Also im Prinzip eine Datenbank, wo man das automatisch abfragen lassen kann, was man so an Infos zum vorhandenen Prozessor benötigt.

Für diesen Beitrag haben gedankt: Hochhaus
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: So 29.12.13 19:39 

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: So 29.12.13 19:44 
user profile iconmandras hat folgendes geschrieben Zum zitierten Posting springen:
vielleicht hilft einer hiervon:

msdn.microsoft.com/e...23%28v=vs.85%29.aspx
msdn.microsoft.com/e...58%28v=vs.85%29.aspx
msdn.microsoft.com/e...84%28v=vs.85%29.aspx


Leider nicht ! Ich kann mit C/C++/C# etc. nicht viel anfangen ...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 29.12.13 20:34 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Leider nicht ! Ich kann mit C/C++/C# etc. nicht viel anfangen ...
Das ist doch in Delphi der selbe API Aufruf. Nur die Syntax ist eben etwas anders.

Für diesen Beitrag haben gedankt: Hochhaus
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: So 29.12.13 21:30 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
type

// ist bei D6 nicht in Windows.pas deklariert,
// daher hier.
 TProcessorPowerInformation = packed record
  Number: cardinal;
  MaxMhz: cardinal;
  CurrentMhz: cardinal;
  MhzLimit: cardinal;
  MaxIdleState: cardinal;
  CurrentIdleState: cardinal;
 end;
 AProcessorPowerInformation = packed array [word]of TProcessorPowerInformation;
 PAProcessorPowerInformation = ^AProcessorPowerInformation;
// muß hier deklariert werden, da in D& nicht in Windows.Pas enthalten
function CallNtPowerInformation(InformationLevel: DWORD; InPutBuffer: Pointer; InputBufferSize: ULONG; OutPutBuffer:
  Pointer; OutPutBufferSize: ULONG): DWORD; stdcallexternal 'PowrProf.dll';



procedure TForm1.FormCreate(Sender: TObject);
var SI:TSystemInfo; // TSystemInfo ist in Windows.pas deklariert
    PInfo:PAProcessorPowerInformation;
    Status: integer;
    i:integer;
begin
 Memo1.lines.Clear;
 GetSystemInfo(SI);
 Memo1.Lines.Add ('Hardware information:');
 Memo1.Lines.Add (format ('OEM ID: %u',[SI.dwOEMId]));
 Memo1.Lines.Add (format ('Number of Processors: %u',[SI.dwNumberOfProcessors]));
 Memo1.Lines.Add (format ('Page Size: %u',[SI.dwPageSize]));
 Memo1.Lines.Add (format ('Processor Type: %u',[SI.dwProcessorType]));
 Memo1.Lines.Add (format ('Minimum application address: %x',[integer(SI.lpMinimumApplicationAddress)]));
 Memo1.Lines.Add (format ('Maximum application address: %x',[integer(SI.lpMaximumApplicationAddress)]));
 Memo1.Lines.Add (format ('Active Processor Mask: %u',[SI.dwActiveProcessorMask]));
 Memo1.Lines.Add ('');
 Memo1.Lines.Add ('Hardware information:');
 getmem (PInfo,SI.dwNumberOfProcessors*sizeof(TProcessorPowerInformation));
// ZeroMemory(PInfo, sizeof(TProcessorPowerInformation)*SI.dwNumberOfProcessors);
 Status := CallNTPowerInformation(11nil0, pinfo, sizeof(TProcessorPowerInformation)*SI.dwNumberOfProcessors);
 for i:=0 to SI.dwNumberOfProcessors-1 do begin
  Memo1.Lines.Add (format ('Processor Number: %u',[PInfo^[i].Number]));
  Memo1.Lines.Add (format ('max MHz: %u',[PInfo^[i].MaxMhz]));
 end;

end;

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 30.12.13 15:02 
Zu Deinem Quelltext finde ich mit Google

//Sorry, kein Delphi

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
typedef struct _SYSTEM_INFO {
  union {
    DWORD  dwOemId;
    struct {
      WORD wProcessorArchitecture;
      WORD wReserved;
    }
;
  };
  DWORD     dwPageSize;
  LPVOID    lpMinimumApplicationAddress;
  LPVOID    lpMaximumApplicationAddress;
  DWORD_PTR dwActiveProcessorMask;
  DWORD     dwNumberOfProcessors;
  DWORD     dwProcessorType;
  DWORD     dwAllocationGranularity;
  WORD      wProcessorLevel;
  WORD      wProcessorRevision;
} SYSTEM_INFO;



Wo versteckt sich die genauere Prozessorbezeichnung ? dwProcessortype (586) liefert nur eine Prozessorgruppe, nicht aber die genaue Prozessorbezeichnung.

Hochhaus
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 30.12.13 15:24 
Einmal Tante Google benutzt und das hier gefunden im Delphi-Treff. Unter Hardware gibt es passende Titel.
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 30.12.13 16:24 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Einmal Tante Google benutzt und das hier gefunden im Delphi-Treff. Unter Hardware gibt es passende Titel.


Das ist ja eine Super-Sammlung an Proggis ! Nach was genau hast Du in Google gesucht ?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 30.12.13 16:38 
Suche bei Google DELPHI SYSTEMINFORMATIONEN AUSLESEN
Wenn ich es in der Entwickler-Ecke und Delphi-Praxis nicht finde, schaue ich im Schweizer Delphi-Forum und im Delphi-Treff nach. Findet man es dort auch nicht, ist das oft so speziell, dass man sich selbst in die Materie einarbeiten muss.
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 30.12.13 17:41 
Hallo

ich habe den Tipp mit der Registry ausprobiert. Der Pfad ist korrekt. Trotzdem liefert die Funktion

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
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;


einen leeren String zurück. Das Debuggen zeigt, dass der String leer abgefüllt wird. Ich habe dann mit
RegEdit gesucht, und ... der Eintrag fehlt bei mir ! Weiss jemand Rat ?



Hochhaus
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 30.12.13 17:56 
Reg := TRegistry.Create(KEY_READ);

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 30.12.13 18:01 
Das war's ! Vielen Dank !