Recuperer le numero de serie de mon disque dur

Résolu
cs_mestari Messages postés 29 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 12 mars 2006 - 12 nov. 2004 à 22:06
alkaesare Messages postés 5 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 22 décembre 2006 - 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

11 réponses

cs_mestari Messages postés 29 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 12 mars 2006
13 nov. 2004 à 17:22
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.
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 nov. 2004 à 00:43
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
0
cs_mestari Messages postés 29 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 12 mars 2006
13 nov. 2004 à 01:02
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
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 nov. 2004 à 01:07
oui c'est du VB6
pour l'API c'est pareil, mais pour le reste je sais pas.
essayes d'enlever les $

Daniel
0

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

Posez votre question
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
13 nov. 2004 à 16:52
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
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
13 nov. 2004 à 17:53
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
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
22 oct. 2005 à 22:29
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
0
cs_doradoux Messages postés 1 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 3 janvier 2006
3 janv. 2006 à 12:15
en effet cette api renvoi seulement le numero de serie de la partition et non pas le numero de serie du hardware
0
jlmertz Messages postés 2 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 6 mars 2006
6 mars 2006 à 08:50
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
0
jlmertz Messages postés 2 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 6 mars 2006
6 mars 2006 à 08:50
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
0
alkaesare Messages postés 5 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 22 décembre 2006
19 déc. 2006 à 13:20
merci à vous tous vous êtes trés gentils
vos codes mon énormément aider
bonne continuation

emiramimad
0
Rejoignez-nous