Récupération d'informations

nicolas66 Messages postés 116 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 4 janvier 2009 - 19 mars 2006 à 12:18
nicolas66 Messages postés 116 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 4 janvier 2009 - 19 mars 2006 à 19:52
Bonjour,





Pour un projet perso, je cherche à pouvoir récupérer plusieurs informations en C++ sous windows :





Nom du système d'exploitation (Windows NT par ex.)


Nom du processeur (AMD Athlon 1500+ par ex.)


Nom de la carte graphique (NVIDIA GeForce 6800 par ex.)


Capacité mémoire de la carte graphique (256 Mo par ex.)





Je recherche déjà le nom des fonctions pour tenter de faire une recherche de mon côté. Merci d'avance pour votre aide








Nico.

6 réponses

Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
19 mars 2006 à 12:53
Salut,

Avec GetVersionExtu devrais pouvoir avoir la version du système d'exploitation sur lequel tourne ton programme.
Avec GetSystemInfotu devrais pouvoir retourner le nombre de processeur et l'architecture mais peut-être pas le nom exacte du CPU

Pour le processeur il y a aussi [codes/CPUID-INFO-PROCESSEUR-WIN32-ASM_25597.aspx cette source] faite par BruNews je ne l'ai pas regardée mais d'après le titre il semble qu'il y ait de l'assembleur.... alors je ne sais pas si tu es intéréssé.

Sinon du côté de la carte graphique je n'en ai aucune idée....

J'espère que j'aurai pu t'être utile.
0
nicolas66 Messages postés 116 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 4 janvier 2009
19 mars 2006 à 12:59
En fait pour le nom de la carte graphique, j'avais trouvé la fonction
'EnumDisplayDevices' mais je ne vois pas trop comment m'en servir ...
0
Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
19 mars 2006 à 16:49
Voici un petit bout de code vite fait permettant de récupérer le nom de la carte graphique qui affiche le bureau. C'est vite fait mais ça me semble marcher. Je ne sais pas si ça peut t'aider...

#include "stdafx.h"

#include<windows.h>

#include
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
DISPLAY_DEVICE dDevice = {0};
dDevice.cb = sizeof(DISPLAY_DEVICE);

DWORD IDDisplayScan = 0; //No du device à scanner

//Tourne jusqu'à ce que la fonction retourne une erreur (==> au bout de la liste)
while( EnumDisplayDevices(NULL, IDDisplayScan, &dDevice, 0) )
{
//Test si ce device est utilisé pour le bureau
if( dDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP )
{
wcout << "Device utilise pour le bureau: " << dDevice.DeviceString << endl;
break; //Il n'y a pas deux devices pour afficher le bureau ==> casse la boucle qui liste les devices d'affichage
}

memset(&dDevice, 0, sizeof(dDevice));
dDevice.cb = sizeof(dDevice);

IDDisplayScan++;
}


cin.get();
return 0;
}

(fait avec Visual Studio.net 2005 en C++)
0
nicolas66 Messages postés 116 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 4 janvier 2009
19 mars 2006 à 17:05
Perso j'utilise Dev-C++ 4.0 et ton code ne compile pas. Question : à quoi correspond le fichier 'stdafx.h' ? Sinon j'ai réussi à partir d'un bout de code du site MSDN pour pouvoir afficher le nom de la carte graphique, le taux de rafraichissement et le numéro de version du driver. Voici le code :

#include <windows.h>
#include <cstdio>
#include <cstdlib>


typedef struct _DISPLAY_DEVICE
{
DWORD cb;
TCHAR DeviceName[32];
TCHAR DeviceString[128];
DWORD StateFlags;
TCHAR DeviceID[128];
TCHAR DeviceKey[128];
} DISPLAY_DEVICE, *PDISPLAY_DEVICE;


#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
#define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004
#define ENUM_CURRENT_SETTINGS 0x00000000
#define ENUM_REGISTRY_SETTINGS 0x00000001



int main (int argc, char**argv)
{
BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
BOOL (WINAPI* pEnumDisplaySettings)(PVOID,DWORD,PVOID);
(FARPROC)pEnumDisplayDevices = GetProcAddress(LoadLibrary("USER32"), "EnumDisplayDevicesA");
(FARPROC)pEnumDisplaySettings = GetProcAddress(LoadLibrary("USER32"), "EnumDisplaySettingsA");


if( pEnumDisplayDevices )
{
DISPLAY_DEVICE dd;
ZeroMemory(&dd, sizeof(dd));
dd.cb = sizeof(dd);


DEVMODE dm;
ZeroMemory(&dm, sizeof(dm));
dm.dmSize = sizeof(dm);


for( unsigned int i=0; (*pEnumDisplayDevices)(NULL, i, &dd, 0); i++ )
{
if( (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) &&
(dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) )
{
printf("Device name : %s\n", dd.DeviceString);
(*pEnumDisplaySettings)(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm);
printf("Driver version : %d\n", dm.dmDriverVersion);
printf("Vertical refresh rate : %d Hz\n", dm.dmDisplayFrequency);
break;
}
}
}


system("PAUSE");
return EXIT_SUCCESS;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nicolas66 Messages postés 116 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 4 janvier 2009
19 mars 2006 à 17:10
En fait je suis obligé apparement de déclarer la structure DISPLAY_DEVICE sinon le compilateur ne la trouve pas dans 'wingdi.h'. De plus, je suis aussi obligé de faire des déclarations des fonctions que je vais utiliser (heu désolé pour l'approximation de mes propos, la prog' windows c'est pas du tout ma tasse de thé :p).

Voilà ce qui ne fonctionnait pas chez moi mais maintenant ca marche comme sur des roulettes. Reste plus qu'à choper le nom du système d'exploitation, sa version, le nombre de processeurs et le nom du processeur.

Nempêche sous nunux, ca ferait un bail que ca serait réglé cette histoire :P
0
nicolas66 Messages postés 116 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 4 janvier 2009
19 mars 2006 à 19:52
Bon après passer toute la journée là-dessus j'ai
enfin réussi à obtenir ce que je souhaitais. Pour ceux que ça
intéresse, j'ai mis le code source et l'exécutable sur mon site à cette
adresse car le code est de grande taille :





http://nicolas.lerme.free.fr/os_test.zip








Voici un screen' de ce que j'obtiens chez moi :











Voilà, donc merci à moi-même








Nico.
0
Rejoignez-nous