Info disque

Résolu
cs_Blanc Messages postés 181 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 16 octobre 2006 - 1 mars 2005 à 18:16
cs_RedDog Messages postés 50 Date d'inscription lundi 7 avril 2003 Statut Membre Dernière intervention 21 août 2013 - 2 mars 2005 à 15:32
Bon, voilà.. vu que ma première question n'a pas eu bcp de succès (même pas dutout..) je la repose, plus clairement..

J'aimerais savroi, si c'est possible d'obtenir le nom d'un disque locale (disque dur)...

Merci d'avance...

blanc

8 réponses

cs_hassen Messages postés 338 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 4 novembre 2008
1 mars 2005 à 18:29
bonjour,

voici le code qui te permet non seulement de connaitre le label de ton disque local mais aussi d'avoir son numero de serie

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
'Fin des Déclarations



Private Sub Command1_Click()
Dim r&, PathName$, DrvVolumeName$, DrvSerialNo$


'Disque à checker


PathName$ = "c:"

rgbGetVolumeInformationRDI PathName$, DrvVolumeName$, DrvSerialNo$

'Afficher le résultat dans des msgbox


MsgBox (" Lecteur " & ": " & UCase$(PathName$))
MsgBox (" Le Label du disk " & ": " & DrvVolumeName$)
MsgBox (" Le Numéro de série du disque " & ": " & DrvSerialNo$)
End Sub
Private Sub rgbGetVolumeInformationRDI(PathName$, DrvVolumeName$, DrvSerialNo$)
Dim r As Long
Dim pos As Integer
Dim HiWord As Long
Dim HiHexStr As String
Dim LoWord As Long
Dim LoHexStr As String
Dim VolumeSN As Long
Dim MaxFNLen As Long
Dim UnusedStr As String
Dim UnusedVal1 As Long
Dim UnusedVal2 As Long


DrvVolumeName$ = Space$(14)
UnusedStr$ = Space$(32)


r& = GetVolumeInformation(PathName$, _
DrvVolumeName$, Len(DrvVolumeName$), VolumeSN&, _
UnusedVal1&, UnusedVal2&, UnusedStr$, Len(UnusedStr$))


If r& = 0 Then Exit Sub


'determine le label


pos% = InStr(DrvVolumeName$, Chr$(0))
If pos% Then DrvVolumeName$ = Left$(DrvVolumeName$, pos% - 1) If Len(Trim$(DrvVolumeName$)) 0 Then DrvVolumeName$ "(pas de label)"

'determine l'id du disque


HiWord& = GetHiWord(VolumeSN&) And &HFFFF&
LoWord& = GetLoWord(VolumeSN&) And &HFFFF&

HiHexStr$ = Format$(Hex(HiWord&), "0000")
LoHexStr$ = Format$(Hex(LoWord&), "0000")

DrvSerialNo$ = HiHexStr$ & "-" & LoHexStr$
End Sub
Function GetHiWord(dw As Long) As Integer
If dw& And &H80000000 Then
GetHiWord% = (dw& \ 65535) - 1
Else: GetHiWord% = dw& \ 65535
End If
End Function
Function GetLoWord(dw As Long) As Integer
If dw& And &H8000& Then
GetLoWord% = &H8000 Or (dw& And &H7FFF&)
Else: GetLoWord% = dw& And &HFFFF&
End If
End Function

Hassen TUNISIE
3
cs_Blanc Messages postés 181 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 16 octobre 2006
1 mars 2005 à 20:01
Merci!! mais en faite, j'utilise Vb.Net, j'ai essayé de comprendre un peu le code (je l'ai un peut modifier pour qu'il passe) mais j'arrive pas à obtenir le label et l'id (mais l'id est moins important...)
Mais si tu pourrais m'expliquer comment chopper des valeurs dans une dll.. enfin, je crois que c'est ce que tu as fais..?! avec la dll kernel32.. et je voulais savoir comment ça marche... (je m'y connaît pas dutout..)

Merci!!

blanc
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
1 mars 2005 à 22:23
Salut,

Je n'ai pas testé en vb.net, mais il y a une autre solution que les API. Le FileSystemObject, bien que je n'aime pas l'utiliser mais bon, ça utilise le scripting runtime de vb6 mais il doit bien y avoir l'équivalent en vb.net et ça doit se situer vers une des classes de System.IO mais je n'ai pas vb.net sous la main ce soir.

Dim d As Object
Dim st As String
Dim fso As Object


Set fso = CreateObject("Scripting.FileSystemObject")

For Each d In fso.Drives

If d.DriveType <> 1 Then ' Si pas lecteur de disquette

If d.IsReady Then
st = "Lettre logique : " & d.Path & vbCrLf
st = st & "Nom de partage : " & d.ShareName & vbCrLf
st = st & "Nom de volume : " & d.VolumeName & vbCrLf
st = st & "Numéro de série : " & d.SerialNumber & vbCrLf
st = st & "Type de drive : "
Select Case d.DriveType Case Is 0: st st & "Iconnu" 'Case Is 1: st st & "Disquette" Case Is 2: st st & "Disque dur" Case Is 3: st st & "Réseau" Case Is 4: st st & "CD/DVD Rom" Case Is 5: st st & "Ram"
End Select

MsgBox st
End If
End If

Next

Set d = Nothing
Set fso = Nothing

Loup Gris
3
cs_Blanc Messages postés 181 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 16 octobre 2006
1 mars 2005 à 23:12
Merci Bien!!!! ça marche à mérveille!! (sans ausune modification!!) compatible vb6 <-> Vb.net..

J'aurais voulu savoir si il existai d'autre valeurs que l'on pourrai avoir de cette variable "d".. par exemple la taille (en octet...)

Merci!!!

blanc
3

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

Posez votre question
cs_RedDog Messages postés 50 Date d'inscription lundi 7 avril 2003 Statut Membre Dernière intervention 21 août 2013
1 mars 2005 à 23:16
Il y a en effet la même chose en vb.net en important scripting


Imports Scripting

et le code (où RootName est le nom du lecteur):

Dim fso

fso = CreateObject("Scripting.FileSystemObject")
Dim dr
As Drive

Dim st
As
String
dr = fso.GetDrive(fso.GetDriveName(RootName))

st = dr.VolumeName
Return st
3
cs_RedDog Messages postés 50 Date d'inscription lundi 7 avril 2003 Statut Membre Dernière intervention 21 août 2013
1 mars 2005 à 23:33
Paramètres pour Drive:

TotalSize: Taille totale du lecteur en octets
AvailableSpace, FreeSpace: Espace disponible sur le lecteur en octets
DriveLetter: Lettre assignée au lecteur
DriveType: Type de lecteur (amovible, fixe, réseau, lecteur de CD-ROM ou disque virtuel)
SerialNumber: Numéro de série du lecteur
FileSystem: Type de système de fichiers utilisé par le lecteur (FAT, FAT32 ou NTFS)
IsReady: Indique si un lecteur est disponible
ShareName, VolumeName: Nom du partage et/ou du volume
Path, RootFolder: Chemin d'accès ou dossier racine du lecteur

(issue de la documentation .net framework)
3
cs_Blanc Messages postés 181 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 16 octobre 2006
2 mars 2005 à 15:12
Merci beaucoup!!!! pour le imports Scripting, ça marche pas chez moi.. je pense que c'est parce que j'ai vb.net avec le framework 1.0.. je sais pas.. peut-être..

Mais en tout cas, merci bien!!

blanc
3
cs_RedDog Messages postés 50 Date d'inscription lundi 7 avril 2003 Statut Membre Dernière intervention 21 août 2013
2 mars 2005 à 15:32
Une erreur de ma part pour le "imports" il faut d'abord ajouter la référence COM Microsoft Scripting Runtime dans Projet/Ajouter une référence... ..
0
Rejoignez-nous