[VB.NET] API pour obtenir le n° de série du disque
[VS.NET 2003]
Salut à tous !
J'ai un soucis avec l'API "GetVolumeInformation" ; je ne parviens pas à l'utiliser. Voilà ce que j'ai écrit en reprenant un exemple écrit à l'origine en VB5 (et qui fonctionne !)
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 27 28 29 30 31
|
Private m_lpRootPathName As String
Private m_lpVolumeNameBuffer As String
Private m_lpVolumeSerialNumber As Long
Private m_lpMaximumComponentLength As Long
Private m_lpFileSystemFlags As Long
Private m_lpFileSystemNameBuffer As String
Private m_nFileSystemNameSize As Long
Private Const MAX_PATH As Long = 260
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 Function ObtenirNumeroSerieDisquePoste() As String
If GetVolumeInformation(m_lpRootPathName, m_lpVolumeNameBuffer, MAX_PATH, m_lpVolumeSerialNumber, _
m_lpMaximumComponentLength, m_lpFileSystemFlags, m_lpFileSystemNameBuffer, MAX_PATH) Then
Return m_lpVolumeSerialNumber.ToString()
Else
Return ""
End If
End Function |
J'obtiens toujours zéro. Quel est le malaise ?
Bon, il faut dire aussi que j'ai pas l'habitude d'utiliser les API :wink:
J'avais aussi essayé de jouer avec les ManagementObject avec ceci:
Code:
1 2 3 4 5 6
|
Public Function GetVolumeSerial() As String
Dim disk As System.Management.ManagementObject = New System.Management.ManagementObject("win32_logicaldisk.deviceid=""c:""")
disk.Get()
Return disk("VolumeSerialNumber").ToString()
End Function |
Mais le résultat obtenu ne correpsondait pas à celui de la fonction VB5...
Si quelqu'un a une idée...
D'avance merci !
Re: [VB.NET] API pour obtenir le n° de série du disque
Essayes le ByRef sur serialNumber
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 27 28 29 30 31 32 33 34 35 36 37 38 39
|
Private root As String = '?
Private volume_name As String = '?
Private serial_number As Long
Private max_component_length As Long = '?
Private file_system_flags As Long = '?
Private file_system_name As String = '?
Private Declare Function GetVolumeInformation Lib "Kernel32" _
Alias "GetVolumeInformationA" ( _
ByVal rootPathName As String, _
ByVal vNameBuffer As String, _
ByVal vNameSize As Long, _
ByRef vSerialNumber As Long, _
ByVal maximumComponentLength As Long, _
ByVal fileSystemFlags As Long, _
ByVal fileSystemNameBuffer As String, _
ByVal fileSystemNameSize As Long) As Long
'...
Private Function ObtenirNumeroSerieDisquePoste() As String
If (GetVolumeInformation( _
root, _
volume_name, _
volume_name.Length, _
serial_number, _
max_component_length, _
file_system_flags, _
file_system_name, _
file_system_name.Length) = 0) Then
MessageBox.Show("Error getting volume information", _
"Error Getting Information", _
MessageBoxButtons.OK, _
MessageBoxIcon.Exclamation)
Return (String.Empty)
Else
Return serial_number.ToString()
End If
End Function |