Comment obtenir des informations sur le système (CPU, RAM,OS) en C++ ?

Comment obtenir des informations sur le système (CPU, RAM,OS) en C++ ? - Programmation

Marsh Posté le 06-04-2001 à 18:10:54    

Je suis en train de concevoir un petit programme en C++ (avec Borland Builder C++ 5) or j'aimerais savoir comment obtennir des information sur le systeme qu'il l'éxécute (info sur le modele de CPU, la quantité de RAM, la version de l'OS...).
 
J'ai éssayé avec les fonctions du type get system info mais a part me dire que mon athlon est un 586  :pt1cable: (786 en réalité) ca va pas plus loin.
 
Windows dans les proprietés systemes arrive pourtant a m'indentifier les informations nécessaires.
 
Vous avez une idée pour identifier le systeme  ?

Reply

Marsh Posté le 06-04-2001 à 18:10:54   

Reply

Marsh Posté le 06-04-2001 à 18:21:07    

OS & RAM via les API de l'OS/Base de registre...
 
Identification modèle CPU => Instruction CPUID en asm, introduite par Intel pour le pentium... Cherche chez Intel pour avoir les infos de bases, puis va chez AMD pour savoir les ID en fonctions des CPUs AMD.
(quoique les dernières revs de 486 ont supportés CPUID je crois...)
D'ou le nom de WCPUID... & autres consors...
 
Mesure fréquence CPU => Instruction RDTSC en asm, historiquement idem.
Elle te retourne (par défaut) dans EDX:EAX un compteur qui est incrémenté à chaque tick d'horloge CPU interne, t'a cas poser un timer et tu pourra mesurer alors la freq CPU de manière on ne peu plus précise....

Reply

Marsh Posté le 06-04-2001 à 18:35:56    

C'est bien ca le probleme, j'ai commencé avec les instructions CPUID, mais j'ai pas trop le niveau pour maitriser.
 
Il aurait-il un moyen de lire dans la base de registre (windows indentifiera à ma place).

Reply

Marsh Posté le 06-04-2001 à 19:50:42    

bah, là je sais pas quel "degré" de précision tu trouvera...
mais je pas l'interêt d'afficher ce qu'il y a dans le premier onglet des "Propriétés système"... m'enfin c'est toi qui voit...
tu remaqueras que l'emploi de l'asm en C++ Builder et super cool...
 
t'as juste à faire un  
asm {
 mov eax,...
}
et rulez...

Reply

Marsh Posté le 07-04-2001 à 11:21:35    

peux-tu me donner plus de détails SVP ?

Reply

Marsh Posté le 07-04-2001 à 18:38:19    

Je risque de ne pas bcp t'aider, m'enfin voilà :
j'avais essayé d'utiliser les fonctions de cpuid fournit par intel avec VisualC++ (et ptet d'autres, j'en sais rien). Mais j'ai un thunderbird, et la fonction arrivait pas à reconnaitre le proc. Donc apperemment la bib intel pour C++ ne fonctionnerait qu'avec les intels, donc à éviter.

Reply

Marsh Posté le 10-04-2001 à 11:15:53    

et c'était compliqué avec le visual ? parce que pour moi, je connais pas grand chose à l'assembleur c'est donc :hot: pour moi.

Reply

Marsh Posté le 10-04-2001 à 19:59:27    

ben je pense qu'apprendre à coder en asm sous le c++ builder est plus facile...
normallement le CPUID/RDTSC est valable pour les AMDs, mais effectivement je doute que les exemples d'Intel reconnaissent un CPU AMD.

Reply

Marsh Posté le 10-04-2001 à 20:27:01    

Si c'est possible avec les AMD, j'ai cherché sur le net, sur Sandpile.org (je crois)(merci Helloworld), ils disent quel sont les instructions avec les CPU AMD/INTEL/CYRIX... mais bon, c'est  :sweat:  pas de mon niveau.

Reply

Marsh Posté le 10-04-2001 à 23:49:54    

cpuid te fournit des informations de façon "croissante", càd de la plus générale à la plus spécifique.
En gros le shéma est le suivant :
 

  • la fonction 0 te renvoie le nom du constructeur, codé sur 12 caractères. Là tu sais déjà si t'as un Intel, un AMD ou un Cyrix. Sur sandpile y'a 7 constructeurs référencés.


  • la fonction 1 te renvoie le trio famille/modèle/stepping, et à partir de là tu peux affiner la détection :

- la famille c'est en qque sorte la génération de processeur : 486, Pentium, P6, Pentium4 pour Intel, K5, K6, K7 pour AMD.
- le modèle fournit le ... modèle, au sein de la famille, par exemple Athlon (avec cache ext.), Duron ou TBird dans la famille K7, ou encore Céléron, Katmaï, Coppermine, Xeon dans la famille P6.
- le stepping correspond à la version du core, donc d'un intérêt moindre.
 
Voilà, en somme c'est un gros switch.

Reply

Marsh Posté le 10-04-2001 à 23:49:54   

Reply

Marsh Posté le 10-04-2001 à 23:53:53    

ah j'oubliais, pour la quantité de RAM utilise un MEMORYSTATUS:
 
MEMORYSTATUS memory_status;
GlobalMemoryStatus(&memory_status);
RAM_SIZE_EN_MB = (memory_status.dwTotalPhys/(1024*1024))+1;
 
et pour l'OS un OSVERSIONINFO :
 
OSVERSIONINFO osversioninfo;
GetVersionEx(&osversioninfo);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed