Les Snippets

Connexion

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

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 26/01/2007 22:19:55 et initié par surfzoid [Liste]
Date de mise à jour : 26/11/2008 21:47:00
Vue : 10819
Catégorie(s) : Système, Divers
Langages dispo pour ce code :
- VB6, VBA
- VB 2005, VB 2008, VB.NET 1.x



Langage : VB6 , VBA
Date ajout : 31/01/2007
Posté par PCPT [Liste]
DateMAJ : 11/02/2007
Function GetPhysicalDriveSerialNumber(Optional  ID As Integer = 0,  Optional bSepar  As Boolean = True) As  String
    GetPhysicalDriveSerialNumber = "0000-0000"
    On Local Error Resume Next
    Dim sComputerName$
    sComputerName = Environ$("COMPUTERNAME")
    
    Dim WMI_Obj As Object, WMI_ObjProps As Object, ObjClsItem As  Object
    Set WMI_Obj = GetObject("winmgmts:\\" & sComputerName & "\root\cimv2")
    Set WMI_ObjProps = WMI_Obj.ExecQuery("Select * from Win32_PhysicalMedia", , 48)
    
    Dim sRet As String
    For Each ObjClsItem In WMI_ObjProps
        If ObjClsItem.Tag = "\\.\PHYSICALDRIVE" CStr(ID) Then
'           ici le serial en  base16 ou 10
            sRet = Trim$(ObjClsItem.SerialNumber)
'           conversion base10
            If Not (LenB(sRet) = 16Then  sRet = GetBase10FromBase16(sRet)
'           ok, retour
            If bSepar Then
                GetPhysicalDriveSerialNumber = UCase$(LeftB$(sRet, 8) & "-" RightB$(sRet, 8))
            Else
                GetPhysicalDriveSerialNumber = UCase$(sRet)
            End If
            Exit For
        End If
    Next ObjClsItem
    Set ObjClsItem = Nothing
    Set WMI_ObjProps = Nothing
    Set WMI_Obj = Nothing
End Function
Private Function GetBase10FromBase16(ByVal sStr As String) As String
    Dim As Integer
    sStr = Replace(sStr, "20", vbNullString)
    GetBase10FromBase16 = Space$(8)
    For i = To 15 Step 2
        Mid$(GetBase10FromBase16, i \ + 1, 1) = Chr$(Val("&H" Mid$(sStr, i, 2)))
    Next i
End Function

Langage : VB.NET 1.x , VB 2005 , VB 2008
Date ajout : 03/11/2008
Posté par PCPT [Liste]
DateMAJ : 26/11/2008
    Function GetPhysicalDriveSerialNumber(Optional ByVal ID As Integer = 0Optional ByVal bSepar As Boolean = TrueAs 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 = 8Then sRet = GetBase10FromBase16(sRet)
                        'ajoute le "-" si nécessaire, puis retour en variable
                        If bSepar Then sRet = String.Concat(sRet.Substring(04), "-", 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 StringAs 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
Remarque :
pas besoin d'indiquer Imports, mais ajouter 'System.Management' dans les références

Snippets en rapport avec : Wmi, Wql, Disque, Numéro, Série



Codes sources en rapport avec : Wmi, Wql, Disque, Numéro, Série

{Visual Basic, VB6, VB.NET, VB 2005} LIRE LE NUMERO DE SÉRIE D'UN DISQUE
Créer un nouveau projet. Ajouter sur la feuille: - un Bouton de commande (pour quitter) - un Labe...

{Visual Basic, VB6, VB.NET, VB 2005} RECUPERER LE LABEL ET LE NUMERO DE SERIE D'UN DISQUE DUR
Récuperer les infos du disque ( N° de série et le label du disque ) ...

{Visual Basic, VB6, VB.NET, VB 2005} NUMÉRO DE SÉRIE EN FONCTION DU PC
Salut tout le monde, Je poste une nouvelle source en rapport avec les numéros de série pour vos app...

{Delphi} INFORMATIONS SYSTÈME (VIA WMI)
Un composant qui utilise WMI (Windows Management Instrumentation) pour récupérer des informations sy...

{Delphi} MISE EN OEUVRE DE WMI (VIA WQL)
Exemple de code permettant l'utilisation de WMI sous Windows 2000/XP/2003. Il est également possib...

{C# / C#.NET} GESTION D'UNE CONNEXION WMI
C'est une petite classe sans beaucoup de prétention qui permet d'établir une connexion WMI vers une ...

{Delphi} GÉNÉRATEUR DE SERIALS EN APP CONSOLE
Petit générateur de sérial simple, en application console. On rentre un nom, un prénom, ...

{Visual Basic, VB6, VB.NET, VB 2005} NUMÉRO DE SÉRIE DANS EXE
-Créer Outil.exe (répertoire exemple) -Exécuter le juste pour voir -Exécuter NSinEXE (pour insérer...

{Delphi} GLIBWMI VCL COMPONENT LIBRARY 1.8B
GLibWMI est une bibliothèque de composants pour Delphi qui encapsulent les classes pour l'accès à WM...

{Visual Basic, VB6, VB.NET, VB 2005} PILOTER DES AFFICHEURS 7 SEGMENTS À PARTIR DU PORT SÉRIE OU USB
Ce petit programme permet de piloter un ou plusieurs modules de 8 afficheurs BCD 7 segments. Ces mo...