Recuperer le numero de serie de mon disque dur [Résolu]

cs_mestari 29 Messages postés samedi 19 avril 2003Date d'inscription 12 mars 2006 Dernière intervention - 12 nov. 2004 à 22:06 - Dernière réponse : alkaesare 5 Messages postés jeudi 30 mars 2006Date d'inscription 22 décembre 2006 Dernière intervention
- 19 déc. 2006 à 13:20
Ma question est assez simple à comprendre plus dure à résoudre (enfin c ce que je pense)
voila j'aimerais protéger mes logiciels grace à une clé générée pour chaque DD donc je voudrais pouvoir récuperer le num de série du disque sur lequel se trouve mon exec et cela en VB.NET et sans utiliser d'API dans la mesure du possible.
si bien sur il est indispensable de passer par les celèbre API je vous remercie d'en donner la syntaxe exacte et le plus d'explications possible car je ne m'y connais pas du tout dans ce genre de fonctions.

Merci d'avance
Afficher la suite 

11 réponses

cs_mestari 29 Messages postés samedi 19 avril 2003Date d'inscription 12 mars 2006 Dernière intervention - 13 nov. 2004 à 17:22
+3
Utile
Super
cette fois c'est la bonne enfin presque car le code est presque bon il a fallu le modifier un tout petit peu et puis j'en ai profité pour le simplifier et le rendre 100% DOTNET voici le resultat:

Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, ByVal lpVolumeSerialNumber As Long, ByVal lpMaximumComponentLength As Long, ByVal lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Private Const MAX_FILENAME_LEN = 256

Public Function GetDriveSerial(ByVal sDrv As String) As Long
Dim str, str2 As String
Dim Retval, a, b As Long
Retval = GetVolumeInformation(sDrv & ":", str, MAX_FILENAME_LEN, Retval, a, b, str2, MAX_FILENAME_LEN)
Return Retval
End Function

Donc merci à tous et je pense que ce code servira à bien des developpeurs.
Cette réponse vous a-t-elle aidé ?  
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 13 nov. 2004 à 00:43
0
Utile
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" ( _
ByVal lpRootPathName As String, _
ByVal lpVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Long, _
lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long _
) As Long

Private Const MAX_PATH = 260

Private Sub Form_load()

Dim strRacine As String, strVolumeName As String, strFileSystemName As String
Dim lSerialNumber As Long, lpMaximumComponentLength As Long, lFileSystemFlag As Long

' Initialisations
strRacine = "C:"
strVolumeName = String$(MAX_PATH, Chr$(0))
strFileSystemName = String$(MAX_PATH, Chr$(0))

' Appel de l'API
If GetVolumeInformation(strRacine, strVolumeName, MAX_PATH, lSerialNumber, lpMaximumComponentLength, lFileSystemFlag, strFileSystemName, MAX_PATH) Then
strVolumeName = Left$(strVolumeName, InStr(strVolumeName, Chr$(0)) - 1)
strFileSystemName = Left$(strFileSystemName, InStr(strFileSystemName, Chr$(0)) - 1)

MsgBox "Chemin du volume : " & strRacine
MsgBox "Nom du volume : " & strVolumeName
MsgBox "Numéro de série : " & lSerialNumber
MsgBox "Longueur maximale d'un composant d'un nom de fichier : " & lpMaximumComponentLength
MsgBox "System flags : " & lFileSystemFlag
MsgBox "Nom du système de fichier : " & strFileSystemName
Else
MsgBox "Une erreur s'est produite !", vbExclamation
End If

End Sub
cs_mestari 29 Messages postés samedi 19 avril 2003Date d'inscription 12 mars 2006 Dernière intervention - 13 nov. 2004 à 01:02
0
Utile
Merci pour ta réponse rapide
Je pense cependant que ton code est pour vb6 et non pas pour VB.NET car quand je copie le code dans l'éditeur de VS il me souligne les mots suivants: String$, Left$, Chr$ donc tout ce qui a un $ à la fin !!!
Donc soit ya un truc que je ne pige pas (j'ai jamais vu ces mots en tout cas) soit ton code n'est compatible vb.net
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 13 nov. 2004 à 01:07
0
Utile
oui c'est du VB6
pour l'API c'est pareil, mais pour le reste je sais pas.
essayes d'enlever les $

Daniel
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 13 nov. 2004 à 16:52
0
Utile
Si tu veux que le serial, un exemple péché chez allapi.net :

'Example by Alexey (alexeyka2001@rambler.ru)
Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Const MAX_FILENAME_LEN = 256

Public Function DriveSerial(ByVal sDrv As String) As Long
    Dim RetVal As Long
    Dim str As String * MAX_FILENAME_LEN
    Dim str2 As String * MAX_FILENAME_LEN
    Dim a As Long
    Dim b As Long
    Call GetVolumeInformation(sDrv & ":", str, MAX_FILENAME_LEN, RetVal, a, b, str2, MAX_FILENAME_LEN)
    DriveSerial = RetVal
End Function
Private Sub Form_Load()
    MsgBox "Serial of drive C is " & DriveSerial("C")
End Sub


Avec ça, tu as le sérial en decimal, si tu le veux en hexa (comme quand tu fais un dir c: en dos) tu mets Hex(DriveSerial("C")) à la place de DriveSerial("C").

En vb.net ça doit fonctionner.

Cordialement, CanisLupus
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 13 nov. 2004 à 17:53
0
Utile
Heureux que tu aies trouvé la solution mais si tu veux que d'autres en profitent, n'oublie pas d'accepter la ou les bonnes réponses (même si c'est la tienne).

Bonne prog

Cordialement, CanisLupus
P__ROMEO 311 Messages postés vendredi 25 février 2005Date d'inscription 9 mars 2006 Dernière intervention - 22 oct. 2005 à 22:29
0
Utile
Bonsoirs tous.
Je sais, je fais ressortir un vieux poste. Mais, que faire.

Le code de Goillot est en VB6. Je le confirme, et c'est justement ce que je cherche. Je l'ai mis dans mon application, mais, j'aurais aimé avoir quelques éclaircissements.

Ce code donne le numéro de série du disque dur, ou de la partition ?
Et, si je peux avoir une explication sur la différence, entre le numéro de série du disque, et celui de la partition !!
En effet, j'ai vu plusieurs codes, et tous disent donner le numéro de série du disque dur. Mais, dans les commentaires, je lis certain qui disent que se code donne pas le numéro de série du disque mais de la partition. Je ne sais plus donc si je mes infos sont fausse ou juste. !!

Merci pour votre réponse.


et voici le code de Gobillot:



Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" ( _
ByVal lpRootPathName As String, _
ByVal lpVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Long, _
lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long _
) As Long

Private Const MAX_PATH = 260

Private Sub Form_load()

Dim strRacine As String, strVolumeName As String, strFileSystemName As String
Dim lSerialNumber As Long, lpMaximumComponentLength As Long, lFileSystemFlag As Long

' Initialisations
strRacine = "C:"
strVolumeName = String$(MAX_PATH, Chr$(0))
strFileSystemName = String$(MAX_PATH, Chr$(0))

' Appel de l'API
If GetVolumeInformation(strRacine, strVolumeName, MAX_PATH, lSerialNumber, lpMaximumComponentLength, lFileSystemFlag, strFileSystemName, MAX_PATH) Then
strVolumeName = Left$(strVolumeName, InStr(strVolumeName, Chr$(0)) - 1)
strFileSystemName = Left$(strFileSystemName, InStr(strFileSystemName, Chr$(0)) - 1)

MsgBox "Chemin du volume : " & strRacine
MsgBox "Nom du volume : " & strVolumeName
MsgBox "Numéro de série : " & lSerialNumber
MsgBox "Longueur maximale d'un composant d'un nom de fichier : " & lpMaximumComponentLength
MsgBox "System flags : " & lFileSystemFlag
MsgBox "Nom du système de fichier : " & strFileSystemName
Else
MsgBox "Une erreur s'est produite !", vbExclamation
End If

End Sub
cs_doradoux 1 Messages postés dimanche 1 avril 2001Date d'inscription 3 janvier 2006 Dernière intervention - 3 janv. 2006 à 12:15
0
Utile
en effet cette api renvoi seulement le numero de serie de la partition et non pas le numero de serie du hardware
jlmertz 2 Messages postés vendredi 10 février 2006Date d'inscription 6 mars 2006 Dernière intervention - 6 mars 2006 à 08:50
0
Utile
je suis en visual basic 2005 en le code ne fonctionne pas ; pouvez vous me dire pourquoi ?
merci
jlm

Public Class Form1
Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, ByVal lpVolumeSerialNumber As Long, ByVal lpMaximumComponentLength As Long, ByVal lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Private Const MAX_FILENAME_LEN = 256

Public Function GetDriveSerial(ByVal sDrv As String) As Long
Dim str, str2 As String
Dim Retval, a, b As Long
Retval = GetVolumeInformation(sDrv & ":", str, MAX_FILENAME_LEN, Retval, a, b, str2, MAX_FILENAME_LEN)
Return Retval
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("Serial of drive C is " & GetDriveSerial("C"))
End Sub
End Class
jlmertz 2 Messages postés vendredi 10 février 2006Date d'inscription 6 mars 2006 Dernière intervention - 6 mars 2006 à 08:50
0
Utile
je suis en visual basic 2005 en le code ne fonctionne pas ; pouvez vous me dire pourquoi ?
merci
jlm

Public Class Form1
Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, ByVal lpVolumeSerialNumber As Long, ByVal lpMaximumComponentLength As Long, ByVal lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Private Const MAX_FILENAME_LEN = 256

Public Function GetDriveSerial(ByVal sDrv As String) As Long
Dim str, str2 As String
Dim Retval, a, b As Long
Retval = GetVolumeInformation(sDrv & ":", str, MAX_FILENAME_LEN, Retval, a, b, str2, MAX_FILENAME_LEN)
Return Retval
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("Serial of drive C is " & GetDriveSerial("C"))
End Sub
End Class
alkaesare 5 Messages postés jeudi 30 mars 2006Date d'inscription 22 décembre 2006 Dernière intervention - 19 déc. 2006 à 13:20
0
Utile
merci à vous tous vous êtes trés gentils
vos codes mon énormément aider
bonne continuation

emiramimad

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.