Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > C et C++ > C++

C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++

Réponse
 
Outils de la discussion
Vieux 07/03/2008, 22h03   #1 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: novembre 2006
Messages: 22
Par défaut Numero de serie physique d'un disque dur

Bonjour

J'aimerai savoir comment faire pour récupérer le numéro de série physique d'un disque dur en C++ sous windows.

Merci d'avance
Thixomag est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/03/2008, 22h18   #2 (permalink)
Rédacteur/Modérateur
 
Avatar de ram-0000
 
Date d'inscription: mai 2007
Localisation: France
Messages: 2 066
Par défaut

Si pour toi le numéro de série physique d'un disque dur est celui donné par la commande "dir" (dans mon cas 0424-4424)
Code :
C:\Documents and Settings\xxx>dir
 Le volume dans le lecteur C n'a pas de nom.
 Le numéro de série du volume est 0424-4424
 
 Répertoire de C:\Documents and Settings\xxx
...
alors essaye ca : http://www.microsoft.com/technet/sys.../volumeid.mspx

Si c'est le numéro physique attribué par le constructeur (étiquette au dos du disque), alors je pense que l'on ne peut rien pour toi
__________________
Raymond
Mes tutoriels, mon projet
Consultez la cartographie des forums de DVP

Dernière modification par ram-0000 ; 07/03/2008 à 22h52 Motif: orthographe
ram-0000 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/03/2008, 22h21   #3 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: novembre 2006
Messages: 22
Par défaut

Si c'est possible avec Win32_PhysicalMedia mais comme je suis nul en api windows j'arrive pas à le faire
Thixomag est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/03/2008, 22h30   #4 (permalink)
Rédacteur/Modérateur
 
Avatar de ram-0000
 
Date d'inscription: mai 2007
Localisation: France
Messages: 2 066
Par défaut

Effectivement,

regarde ici alors : http://www.codeproject.com/KB/cs/har..._serialno.aspx

Attention, cela ne marche qu'avec Windows XP, Windows Vista, Windows Serveur 2003 ou Windows Serveur 2008
__________________
Raymond
Mes tutoriels, mon projet
Consultez la cartographie des forums de DVP
ram-0000 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/03/2008, 22h35   #5 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: novembre 2006
Messages: 22
Par défaut

J'ai déjà vu ça, c'est du C#
Thixomag est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/03/2008, 22h51   #6 (permalink)
Rédacteur/Modérateur
 
Avatar de ram-0000
 
Date d'inscription: mai 2007
Localisation: France
Messages: 2 066
Par défaut

effectivement c'est pas du C++

par contre le numéro de série qui t'intéresse se récupère à l'aide d'une requete WMI "SELECT * FROM Win32_DiskDrive"

et ici, tu as un projet pour faire des requetes WMI en C++

http://www.codeproject.com/KB/system...select=1131844

Donc en mélangeant les 2 projets, cela devrait être bon
__________________
Raymond
Mes tutoriels, mon projet
Consultez la cartographie des forums de DVP
ram-0000 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/03/2008, 22h51   #7 (permalink)
Rédacteur
 
Avatar de Davidbrcz
 
Date d'inscription: juin 2006
Localisation: Systeme Solaire,La Terre,Europe,France,IDF, Paris
Âge: 16
Messages: 1 275
Envoyer un message via MSN à Davidbrcz
Par défaut

Récupère ton numéro en C# et appelle ta fonction depuis ton code en C++
__________________
Partager grâce à l'open source et aux logiciels libres.

"Never use brute force in fighting an exponential." (Andrei Alexandrescu)

Conseils perso en vrac sur le C++ Une très bonne doc sur la STL (en) Why linux is better (fr)
Davidbrcz est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 07/03/2008, 23h04   #8 (permalink)
Membre Expert
 
Avatar de coyotte507
 
Date d'inscription: octobre 2006
Messages: 1 056
Par défaut

Sinon tu peux faire:

Code :
 
    system("dir c:\ > out.txt");
Et tu récupères le numéro de série, qui est dans la deuxième ligne du fichier out.txt.
coyotte507 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/03/2008, 23h10   #9 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: novembre 2006
Messages: 22
Par défaut

sinon je peux le faire en c++ ?
Thixomag est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/03/2008, 00h14   #10 (permalink)
Membre Expert
 
Avatar de coyotte507
 
Date d'inscription: octobre 2006
Messages: 1 056
Par défaut

Tu parles de quoi?

Ce que j'ai donné c'est du c++, essaies par ex de compiler le prog suivant:
Code :
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    system("dir c:\\ > out.txt");
    ifstream out("out.txt");
 
    string a;
    getline (out, a);
    getline (out, a);
 
    cout << a << endl;
 
    system("PAUSE");
 
    return 0;
}
Note: si quelqu'un a une amélioration de mon programme (obligation d'utiliser les strings, passe une ligne du fichier, ...), toute remarque est bienvenue, ça me sera surement utile
coyotte507 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/03/2008, 01h12   #11 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: novembre 2006
Messages: 22
Par défaut

Citation:
Envoyé par Thixomag Voir le message
J'aimerai savoir comment faire pour récupérer le numéro de série physique d'un disque dur en C++ sous windows.
pas de bricolage avec du C#
Thixomag est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/03/2008, 09h08   #12 (permalink)
Rédacteur/Modérateur
 
Avatar de ram-0000
 
Date d'inscription: mai 2007
Localisation: France
Messages: 2 066
Par défaut

Citation:
Envoyé par coyotte507 Voir le message
Sinon tu peux faire:

Code :
 
    system("dir c:\ > out.txt");
Et tu récupères le numéro de série, qui est dans la deuxième ligne du fichier out.txt.
Ce n'est pas ce numéro de série qu'il veut, c'est le numéro de série du fabricant que visiblement on ne peut récupérer que par une requête WMI
__________________
Raymond
Mes tutoriels, mon projet
Consultez la cartographie des forums de DVP
ram-0000 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/03/2008, 11h42   #13 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: novembre 2006
Messages: 22
Par défaut

Ah j'avais pas capté ce qu'il voulait faire ^^
Thixomag est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/03/2008, 16h41   #14 (permalink)
Candidat au titre de Membre du Club
 
Date d'inscription: novembre 2006
Messages: 22
Par défaut

En fait vu la complexité de la chose, je pense que le numéro de série logique me suffira.

Est ce que je suis obligé de passer par un fichier intermédiaire avec system("dir c:\"); ou est ce que je peux récupérer directement dans une variable la réponse de la commande ?

Il y a peut être une autre solution avec GetVolumeInformation mais je sais pas comment faire.
Thixomag est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/03/2008, 18h16   #15 (permalink)
Rédacteur/Modérateur
 
Avatar de ram-0000
 
Date d'inscription: mai 2007
Localisation: France
Messages: 2 066
Par défaut

Tiens, ca marche
Code :
#include <windows.h>
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main (void)
{
   DWORD serial;
   DWORD MaximumComponentLength;
   DWORD FileSystemFlags;
   if(GetVolumeInformation("c:\\",
		NULL, 0,
		&serial,
		&MaximumComponentLength,
		&FileSystemFlags,
		NULL, 0) == TRUE)
   {
      printf("%.4x-%.4x\n", serial >> 16, serial & 0xffff);
   }
   else
   {
      // traitement d'erreur
      ...
   }
}
__________________
Raymond
Mes tutoriels, mon projet
Consultez la cartographie des forums de DVP
ram-0000 est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > C et C++ > C++

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide