Numéro de série (physique) du disque dur par WMI

Contenu du snippet

    Function GetPhysicalDriveSerialNumber(Optional ByVal ID As Integer = 0, Optional ByVal bSepar As Boolean = True) As String
    'CETTE FONCTION NéCESSITE :
    '       LA RéFéRENCE 'System.Management'
    '       LA FONCTION 'GetBase10FromBase16'
        'valeur de retour par défaut
        Dim sReturn As String
        If bSepar Then sReturn = "0000-0000" Else sReturn = "00000000"
        Try
            'construction requête WMI
            Dim WMI_Obj As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_PhysicalMedia")
            'recherche chaque item
            For Each ObjClsItem As ManagementObject In WMI_Obj.Get()
                'si item = disque recherché
                If (ObjClsItem.GetPropertyValue("Tag").ToString = "\\.\PHYSICALDRIVE" & ID.ToString) Then
                    'ici le serial en base16 ou 10
                    Dim sRet As String = ObjClsItem.GetPropertyValue("SerialNumber").ToString
                    'peut être vide
                    If sRet IsNot Nothing Then
                        'conversion base10
                        sRet = sRet.Trim
                        If Not (sRet.Length = 8) Then sRet = GetBase10FromBase16(sRet)
                        'ajoute le "-" si nécessaire, puis retour en variable
                        If bSepar Then sRet = String.Concat(sRet.Substring(0, 4), "-", sRet.Substring(4))
                        sReturn = sRet.ToUpper
                    End If
                    Exit For
                End If
            Next ObjClsItem
        Catch ex As Exception
        End Try
        'retour fonction
        Return sReturn
    End Function
    Private Function GetBase10FromBase16(ByVal sStr As String) As String
        Dim sReturn As String = String.Empty
        sStr = sStr.Replace("20", String.Empty)
        For i As Integer = 0 To 15 Step 2
            sReturn += Convert.ToChar(Convert.ToInt64(sStr.Substring(i, 2), 16))
        Next i
        Return sReturn
    End Function

Compatibilité : VB 2005, VB 2008, VB.NET 1.x

Disponible dans d'autres langages :

A voir également

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.