IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[VB.NET] API pour obtenir le n° de série du disque


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    J'avais aussi essayé de jouer avec les ManagementObject avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !
    "On peut dire qu’il est possible de savoir comment vaincre sans être capable de le faire" - Sun Tze, in L'art de la guerre

    "Mais t'es complètement naze ou quoi ?! UNE pomme ! ça fait DEUX moitiés de pomme !! mais quand vas-tu le comprendre ?! J'en ai ma claque, j'me tire !" - Bouddha et un disciple, dans un moment de faiblesse

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Hum.. je n'ai pas regardé ton code mais as-tu essayé en passant par WMI :

  3. #3
    Membre actif
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Points : 260
    Points
    260
    Par défaut
    ben si il a essayé, c'est son deuxième code.

    il faut que tu regarde aussi l'object physicalDisk, et ses attributs y'en a peut etre un qui correspondra
    ZTAB (Ze Text Adventure Builder)

    Logiciel très intuitif et ergonomique de création de jeux d'aventure et de livres dont vous êtes le héros.

    http://sites.google.com/site/ztabsoft/

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Harry_polin
    ben si il a essayé, c'est son deuxième code.


    Désolé, j'avais lu son message trop vite

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [VB.NET] API pour obtenir le n° de série du disque
    Essayes le ByRef sur serialNumber
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut
    C'était ça Neguib ! ça marche ! j'avais vu quelque part un peu de code supplémentaire que j'ai ajouté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            Dim root As String
            Dim volume_name As String
            Dim serial_number As Integer
            Dim max_component_length As Integer
            Dim file_system_flags As Integer
            Dim file_system_name As String
            Dim pos As Integer
     
            root = "c:\"
            volume_name = Space(1024)
            file_system_name = Space(1024)
     
            If GetVolumeInformation(root, volume_name, Len(volume_name), serial_number, max_component_length, file_system_flags, file_system_name, Len(file_system_name)) = 0 Then
                MessageBox.Show("Error getting volume information.", "Error Getting Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Return ""
            End If
     
            Return serial_number.ToString()
    Merci à tous !
    "On peut dire qu’il est possible de savoir comment vaincre sans être capable de le faire" - Sun Tze, in L'art de la guerre

    "Mais t'es complètement naze ou quoi ?! UNE pomme ! ça fait DEUX moitiés de pomme !! mais quand vas-tu le comprendre ?! J'en ai ma claque, j'me tire !" - Bouddha et un disciple, dans un moment de faiblesse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2008, 13h45
  2. Api pour la gestion du port série et JRE sur un ancêtre
    Par Orian dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 29/01/2007, 18h22
  3. [C# .Net] Recherche d'une API pour réaliser des diagrammes
    Par arnaudperfect dans le forum ASP.NET
    Réponses: 1
    Dernier message: 12/01/2007, 19h29
  4. [VB.NET] Problème pour Marshaliser une API
    Par lamalice dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/03/2005, 10h01
  5. JEG : jAPI : Une API pour C++Builder
    Par JEG dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/11/2003, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo