jmfmarques
Messages postés
7666
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
2 févr. 2007 à 23:19
Presque celà, Casy !
Jusqte une correction infime : le n° "affiché" n'est jamais rien d'autre que le n° "brut" "formaté", d'une partition :
Ainsi :
Une Form, 2 boutons Command1 et Command2 et un label Label1
'La fonction GetVolumeInformation renseigne sur un système de fichiers et sur un volume dont on spécifie le
'répertoire racine. Elle renvoie une valeur différente de 0 en cas de succès et 0 en cas d'échec (on
'peut alors en connaître les raisons en appelant la fonction GetLastError)
'lpRootPathName : pointeur vers une chaine contenant le répertoire racine du volume à examiner (si ce paramètre
' est nul : répertoire en cours).
'lpVolumeNameBuffer : pointeur vers un buffer destiné à recevoir le nom du volume en cause
'nVolumeNameSize : spécifie la longueur (en caractères) du buffer ouvert pour le nom de volume.
'lpVolumeSerialNumber : pointeur vers une variable recevant le numéro de série du volume
'lpMaximumComponentLength : pointeur vers une valeur DWORD recevant la longueur maxi (en caractères)
' d'un composant (portion entre 2 "") de fichier supporté par le système invoqué.
'lpFileSystemFlags : pointeur vers un DWORD recevant les "flags" associés au système de fichiers en cause (peut
' être une combinaison de FS_CASE_IS_PRESERVED, FS_CASE_SENSITIVE, FS_UNICODE_STORED_ON_DISK,
' FS_PERSISTENT_ACLS, FS_FILE_COMPRESSION et FS_VOL_IS_COMPRESSED (exceptés FS_FILE_COMPRESSION
' avec FS_VOL_IS_COMPRESSED car l'un exclut la possibilité de l'autre)
'lpFileSystemNameBuffer : pointeur vers un buffer recevant le nom du système de fichiers (par ex. FAT ou NTFS).
'nFileSystemNameSize : spécifie la longueur (en caractères), du buffer pour le nom du système de fichiers.
Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" _
(ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)
Const MaxNomFic = 256
Public Function NumeroSerie(sDrive As String) As Long
'pour "extraire" le numéro de série (format brut) du lecteur spécifié par sDrive
Dim ser As Long, I As Long, j As Long
Dim z0 As String * MaxNomFic ' (maxnomfic = 256)
Dim z As String * MaxNomFic ' (maxnomfic = 256)
'il nous faut ajouter un "" et un nul à la chaine sDrive
'et appeler la fonction pour extraire le numéro (ser) de série
Call GetVolumeInformation(sDrive + ":" & Chr$(0), z0, MaxNomFic, ser, I, j, z, MaxNomFic)
NumeroSerie = ser
End Function
Public Function NumeroSerieA(sDrive As String) As String
'pour "extraire" le numéro de série (format affiché) du lecteur spécifié par sDrive
Dim ser As Long, I As Long, j As Long
Dim z0 As String * MaxNomFic ' (maxnomfic = 256)
Dim z As String * MaxNomFic ' (maxnomfic = 256)
'il nous faut ajouter un "" et un nul à la chaine sDrive
'et appeler la fonction pour extraire le numéro (ser) de série, comme dans la fonction précédente
Call GetVolumeInformation(sDrive + ":" & Chr$(0), z0, MaxNomFic, ser, I, j, z, MaxNomFic)
'mais le transformer ctte fois-ci en format "afiché"
Serie = Right(String(8, "0") + Hex$(ser), 8)
serialnum = Left(Serie, 4) + "-" + Right$(Serie, 4)
NumeroSerieA = serialnum
End Function
Private Sub Command1_Click()
label1.Caption = NumeroSerieA("c") 'affiche le numéro de série "formaté(affiché)" du DD
End Sub
Private Sub Command2_Click()
label1.Caption = NumeroSerie("c") 'affiche le numéro de série Brut du DD
End Sub
Mais notre ami a trouvé le lien qui convenait à ce qu'il cherchait.