--
Version imprimable
--
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)
alors essaye ca : http://www.microsoft.com/technet/sys.../volumeid.mspxCode:
1
2
3
4
5
6 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 ...
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
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
effectivement c'est pas du C++:D
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
Récupère ton numéro en C# et appelle ta fonction depuis ton code en C++
Sinon tu peux faire:
Et tu récupères le numéro de série, qui est dans la deuxième ligne du fichier out.txt.Code:
1
2system("dir c:\ > out.txt");
Tu parles de quoi? :)
Ce que j'ai donné c'est du c++, essaies par ex de compiler le prog suivant:
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 :PCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #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; }
Tiens, ca marche
Code:
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 #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 ... } }
Normal que ca ne marche pas, je t'avais donné une version non Unicode et toi visiblement tu travailles en Unicode
Attention, il faut passer 'disque' et pas '&disque' comme paramètreCode:
1
2
3
4 WCHAR *disque = L"c:\\"; ... if(GetVolumeInformation(disque, NULL, 0, &serial, &MaximumComponentLength, &FileSystemFlags, NULL, 0) == TRUE)
char buffer[32];
sprintf(buffer, "%.4x-%.4x\n", serial >> 16, serial & 0xffff);