begin process at 2012 02 04 14:38:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > INFORMATION DISQUE DUR

INFORMATION DISQUE DUR


 Information sur la source

Note :
9,5 / 10 - par 8 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Niveau :Initié Date de création :28/11/2004 Vu / téléchargé :16 016 / 2 657

Auteur : Nocturne

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (46)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Ce code permet de retourner diverses information sur le disque dur comme le numéro de série, le modèle, etc...

Pour information il retourne le numéro du disque et non pas le numéro de partition qui elle change après un formatage.

Ce code n'est pas de moi, je le poste ici uniquement pour information, je ne serais donc pas responsable des désagrément qu'il pourrait engendrer.
Je ne garantis pas non plus qu'il fonctionne sur tout les types de disque dur, en tout cas il fonctionne chez moi.
Testé sur win98 et 2000.

J'ai trouvé ce code sur dBforums :
http://www.dbforums.com/t876711.html


 Conclusion

Je pense que ce code est une bonne base de départ pour récupérer d'autres types d'info. Il peut être amélioré.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

AJOUTER UNE LIGNE DANS UN FICHIER - API
Source avec Zip Source avec une capture INFO-BULLE PERSONNALISÉE, MULTILIGNES AVEC QQ OPTONS
RETROUVE LA DATE DE CRÉATION D'UN FICHIER - API
Source avec Zip Source avec une capture ECHANGE DE MESSAGES WINDOWS ENTRE DEUX APPLICATIONS
Source avec Zip Source avec une capture TIRAGE DU LOTO

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena
Source avec Zip Source avec une capture FLÉCHES DES ICONES DU BUREAU par Sechaud

Commentaires et avis

Commentaire de DeadlyPredator le 29/11/2004 06:18:21

ATTENTION!!! Uniquement les disque durs utilisant la technologie Smart vont fonctionner... cependant, je crois que tout les disque durs datant de 4 ans le sont. C'est vérifier. Fonctionne sous Win98 Se.

Commentaire de Renfield le 29/11/2004 08:53:59 administrateur CS

NT4 aussi....

tout OS visiblement...

Commentaire de amer_ezahir le 18/01/2005 01:07:11

ton code source est super car malgré on formate le disque dur le n° de série reste le même ,merci
je te souhaite bon courage
je veux demande seulement c'est tu peux ajouter des commentaire sur chaque procédure ou linge du ton code source "Informations Disque dur"

Commentaire de Nocturne le 18/01/2005 02:38:44

C'est vrai, il manque qq commentaires mais actuellement j'ai pas trop le temps de rajouter des commentaires vu que je bosse sur un gros projet. De plus comme je l'ai indiqué, ce code n'est pas a 100% de moi. J'ai juste fait qq modifications a vous maintenant de l'améliorer.
Il est posté ici juste pour information car beaucoup d'entre vous cherche a recupérer le numéro du disque.
Bonne Prog.

Commentaire de gui636 le 08/04/2005 11:02:43

Je te remercie d'avoir posté ce prog, ca peut être assez utile, cependant j'ai une question:

si on possède plusieurs disques durs, quel est le code affiché par le programme? Celui contenant le système d'exploitation? ou celui sur lequel on exécute le programme?

Commentaire de Nocturne le 08/04/2005 11:56:44

Salut gui636,

Actuellement ce code donne le numéro du 1er disque dur ("c:\"), PRIMARY_MASTER (0).

Il est tout a fait possible après qq modifications de récupérer les numéros des autres disques, PRIMARY_SLAVE (1), SECONDARY_MASTER (2) ou SECONDARY_SLAVE (3).

Nocturne

Commentaire de P__ROMEO le 23/10/2005 12:22:20

Salut nocturne.

j'ai passé le site en revu, et aucun code n'était juste. heuresement que jack m'a dirigé vers ce poste.
Bon travail.

Commentaire de adil2006 le 27/02/2006 00:32:44

Merci Nocturne de poster ce joli programme...c trés utile..
Bn courage.

Commentaire de CHARFEDDINE1205 le 08/05/2006 15:13:37

j'ai tester cette application sur deux ordinateurs différents.Elle a bien marchée sur le premier mais sur le deusieme elle affiche le message "not present" alors qu'il existe un disque dur.SVP essaier de m'expliquer qu'est cequi ne marche pas bien?

Commentaire de Nocturne le 08/05/2006 16:50:15

Si cela ne fonctionne pas sur ton 2eme ordi, c'est peut etre que le disque dur installé sur ta machine n'utilise pas la technologie Smart.

Commentaire de sharkus le 14/01/2007 17:31:08

Super cette source.
J'avais trouvé comment récupérer le No de série de la partition mais pas le No de série du disque physique.

Merci beaucoup

Commentaire de docjokos le 03/07/2007 14:12:33

Bonjour, merci pour ce programme bien utile... j'ai toutefois une demande : le programme se lance-t-il forcément dans une fenêtre pour s'exécuter ? son utilisation en ligne de commande (genre pour récupérer le résultat avec un script) est-elle possible ?

Commentaire de Nocturne le 03/07/2007 20:44:02

Pour l instant il se lance dans une fenêtre.
Il pourrait être modifier sans fenêtre et avec qq lignes de programmation pour écrire les résultats dans un fichier sous windows.
En ligne de commande tu pourrais a ce moment la, faire une lecture du fichier afin de récupérer le résultat.

a+

Commentaire de Sinsitrus le 13/08/2007 21:00:12

Salut !
Et comment on peux modifier ce numéro de série ?
Il s'avère utile pour des ligiciels qui enregistre ce numéro et en veut plus s'installer même après mille formatage.

Commentaire de Sinsitrus le 13/08/2007 21:01:02

10/10 ^^ parfait ! j'ai adoré ^^

Commentaire de CmTop le 01/12/2007 15:51:13

SUPERBE Prog, mais ne fonctionne pas avec SATA 150, ET RAID

Commentaire de zorasalem le 09/05/2008 00:16:53

Salut
     J'aime bien en tirer profit de ce programme que  j'ai tant cherché, mais... pouvez-vous cher Mr m'indiquer s'il est possible de l'adapter à DELPHI dans la mesure de votre possible, je vous en serai reconnaissant.
                                   Amicalement
                                          SALEM

Commentaire de Renfield le 09/05/2008 04:25:00 administrateur CS

oui, bien sur

Commentaire de nourwahiba le 12/05/2008 11:54:05

bonjour a tous
j'ai exécuter ce programme sur pas mal de pc (5) dont un n'a rien afficher ( le numéro de disque dur n'apparait  pas )
j'aimerai bien savoir pourquoi ?
merci et bonne suite

Commentaire de Nocturne le 12/05/2008 12:29:31

C'est peut-être que ton disque n'utilise pas la technologie Smart???

Commentaire de nourwahiba le 12/05/2008 13:08:28

mais je nai pas bien saisie la technologie smart ????
dans la société ou je travaille , on utilise des disque dure sata et IDE

Commentaire de Nocturne le 12/05/2008 19:48:57

=>Nourwahiba,
Self-Monitoring, Analysis, and Reporting Technology, ou S.M.A.R.T., (littéralement Technologie d'Auto-surveillance, d'Analyse et de Rapport) est un système de surveillance du disque dur d'un ordinateur.

Je ne suis pas spécialiste mais normalement tout les disques durs utilisent S.M.A.R.T., alors je ne pense pas que cela soit ton problème.

Il y a peut-être un problème de compatibilité avec ta carte mère???

Il faut aussi etre administrateur de sa machine.

Je n'ai pas trop d'idée.
Bonne recherche,

Commentaire de CmTop le 13/05/2008 07:51:41

He! non, Le RAID Sata 150 n'utilise pas cette techno.

Commentaire de nourwahiba le 13/05/2008 10:53:44

bonjour
merci pour vous Nocturne   et CmTop  pour ces informations
j'ai trouvé une solution trés imoprtante sur le net qui donne le numéro de serie logique( de la partition) et le numero materiel( physique) qui ne change pas meme si on formate notre disque dure et les voila les deux procedures pour ceux qui les cherche!!!!
il faut avoir une forme, 2 textbox  text1 et text2 , 1label( label1)

sur text1 ----------------> n de serie logique
sur text2----------------->n de série materiel
vous copiez ce code sur la partie code de la forme



Private Declare Function GetVolumeInformation Lib "kernel32.dll" _
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
'------------------------------------------------
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
                                       (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
                                      (ByVal hwnd As Long, ByVal nIndex As Long, _
                                       ByVal dwNewLong As Long) As Long


Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const CREATE_NEW = 1
Private Const INVALID_HANDLE_VALUE = -1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Const IDENTIFY_BUFFER_SIZE = 512
Private Const OUTPUT_DATA_SIZE = IDENTIFY_BUFFER_SIZE + 16

'GETVERSIONOUTPARAMS contains the data returned
'from the Get Driver Version function
Private Type GETVERSIONOUTPARAMS
   bVersion       As Byte 'Binary driver version.
   bRevision      As Byte 'Binary driver revision
   bReserved      As Byte 'Not used
   bIDEDeviceMap  As Byte 'Bit map of IDE devices
   fCapabilities  As Long 'Bit mask of driver capabilities
   dwReserved(3)  As Long 'For future use
End Type

'IDE registers
Private Type IDEREGS
   bFeaturesReg     As Byte 'Used for specifying SMART "commands"
   bSectorCountReg  As Byte 'IDE sector count register
   bSectorNumberReg As Byte 'IDE sector number register
   bCylLowReg       As Byte 'IDE low order cylinder value
   bCylHighReg      As Byte 'IDE high order cylinder value
   bDriveHeadReg    As Byte 'IDE drive/head register
   bCommandReg      As Byte 'Actual IDE command
   bReserved        As Byte 'reserved for future use - must be zero
End Type

'SENDCMDINPARAMS contains the input parameters for the
'Send Command to Drive function
Private Type SENDCMDINPARAMS
   cBufferSize     As Long     'Buffer size in bytes
   irDriveRegs     As IDEREGS  'Structure with drive register values.
   bDriveNumber    As Byte     'Physical drive number to send command to (0,1,2,3).
   bReserved(2)    As Byte     'Bytes reserved
   dwReserved(3)   As Long     'DWORDS reserved
   bBuffer()      As Byte      'Input buffer.
End Type

'Valid values for the bCommandReg member of IDEREGS.
Private Const IDE_ID_FUNCTION = &HEC            'Returns ID sector for ATA.
Private Const IDE_EXECUTE_SMART_FUNCTION = &HB0 'Performs SMART cmd.
                                                'Requires valid bFeaturesReg,
                                                'bCylLowReg, and bCylHighReg

'Cylinder register values required when issuing SMART command
Private Const SMART_CYL_LOW = &H4F
Private Const SMART_CYL_HI = &HC2

'Status returned from driver
Private Type DRIVERSTATUS
   bDriverError  As Byte          'Error code from driver, or 0 if no error
   bIDEStatus    As Byte          'Contents of IDE Error register
                                  'Only valid when bDriverError is SMART_IDE_ERROR
   bReserved(1)  As Byte
   dwReserved(1) As Long
End Type

Private Type IDSECTOR
   wGenConfig                 As Integer
   wNumCyls                   As Integer
   wReserved                  As Integer
   wNumHeads                  As Integer
   wBytesPerTrack             As Integer
   wBytesPerSector            As Integer
   wSectorsPerTrack           As Integer
   wVendorUnique(2)           As Integer
   sSerialNumber(19)          As Byte
   wBufferType                As Integer
   wBufferSize                As Integer
   wECCSize                   As Integer
   sFirmwareRev(7)            As Byte
   sModelNumber(39)           As Byte
   wMoreVendorUnique          As Integer
   wDoubleWordIO              As Integer
   wCapabilities              As Integer
   wReserved1                 As Integer
   wPIOTiming                 As Integer
   wDMATiming                 As Integer
   wBS                        As Integer
   wNumCurrentCyls            As Integer
   wNumCurrentHeads           As Integer
   wNumCurrentSectorsPerTrack As Integer
   ulCurrentSectorCapacity    As Long
   wMultSectorStuff           As Integer
   ulTotalAddressableSectors  As Long
   wSingleWordDMA             As Integer
   wMultiWordDMA              As Integer
   bReserved(127)             As Byte
End Type

'Structure returned by SMART IOCTL commands
Private Type SENDCMDOUTPARAMS
  cBufferSize   As Long         'Size of Buffer in bytes
  DRIVERSTATUS  As DRIVERSTATUS 'Driver status structure
  bBuffer()    As Byte          'Buffer of arbitrary length for data read from drive
End Type

'Vendor specific feature register defines
'for SMART "sub commands"
Private Const SMART_ENABLE_SMART_OPERATIONS = &HD8

'Status Flags Values
Public Enum STATUS_FLAGS
   PRE_FAILURE_WARRANTY = &H1
   ON_LINE_COLLECTION = &H2
   PERFORMANCE_ATTRIBUTE = &H4
   ERROR_RATE_ATTRIBUTE = &H8
   EVENT_COUNT_ATTRIBUTE = &H10
   SELF_PRESERVING_ATTRIBUTE = &H20
End Enum

'IOCTL commands
Private Const DFP_GET_VERSION = &H74080
Private Const DFP_SEND_DRIVE_COMMAND = &H7C084
Private Const DFP_RECEIVE_DRIVE_DATA = &H7C088

Private Type ATTR_DATA
   AttrID As Byte
   AttrName As String
   AttrValue As Byte
   ThresholdValue As Byte
   WorstValue As Byte
   StatusFlags As STATUS_FLAGS
End Type

Private Type DRIVE_INFO
   bDriveType As Byte
   SerialNumber As String
   Model As String
   FirmWare As String
   Cilinders As Long
   Heads As Long
   SecPerTrack As Long
   BytesPerSector As Long
   BytesperTrack As Long
   NumAttributes As Byte
   Attributes() As ATTR_DATA
End Type

Private Enum IDE_DRIVE_NUMBER
   PRIMARY_MASTER
  
End Enum

Private Declare Function CreateFile Lib "kernel32" _
   Alias "CreateFileA" _
  (ByVal lpFileName As String, _
   ByVal dwDesiredAccess As Long, _
   ByVal dwShareMode As Long, _
   lpSecurityAttributes As Any, _
   ByVal dwCreationDisposition As Long, _
   ByVal dwFlagsAndAttributes As Long, _
   ByVal hTemplateFile As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long
  
Private Declare Function DeviceIoControl Lib "kernel32" _
  (ByVal hDevice As Long, _
   ByVal dwIoControlCode As Long, _
   lpInBuffer As Any, _
   ByVal nInBufferSize As Long, _
   lpOutBuffer As Any, _
   ByVal nOutBufferSize As Long, _
   lpBytesReturned As Long, _
   lpOverlapped As Any) As Long
  
Private Declare Sub CopyMemory Lib "kernel32" _
   Alias "RtlMoveMemory" _
  (hpvDest As Any, _
   hpvSource As Any, _
   ByVal cbCopy As Long)
  
Private Type OSVERSIONINFO
   OSVSize As Long
   dwVerMajor As Long
   dwVerMinor As Long
   dwBuildNumber As Long
   PlatformID As Long
   szCSDVersion As String * 128
End Type

Private Declare Function GetVersionEx Lib "kernel32" _
   Alias "GetVersionExA" _
  (LpVersionInformation As OSVERSIONINFO) As Long

Private Sub Form_Load()

'
    SetWindowLong hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Xor WS_MAXIMIZEBOX
    SetWindowLong hwnd, GWL_STYLE, GetWindowLong(Me.hwnd, GWL_STYLE) Xor WS_MINIMIZEBOX
'
'
'

    Dim di As DRIVE_INFO
   Dim drvNumber As Long
   For drvNumber = PRIMARY_MASTER To QUARTIARY_SLAVE
    di = GetDriveInfo(drvNumber)
      
          
      With di
      

Text2.Text = Trim$(.SerialNumber)

Label1.Caption = "N° de série du disque dur"
Text1.Text = NoSerieDisque("D:\")
            
      End With
      
   Next


End Sub

  
Private Function GetDriveInfo(drvNumber As IDE_DRIVE_NUMBER) As DRIVE_INFO
    
   Dim hDrive As Long
   Dim di As DRIVE_INFO
  
   hDrive = SmartOpen(drvNumber)
  
   If hDrive <> INVALID_HANDLE_VALUE Then
  
      If SmartGetVersion(hDrive) = True Then
      
         With di
            .bDriveType = 0
            .NumAttributes = 0
            ReDim .Attributes(0)
            .bDriveType = 1
         End With
        
         If SmartCheckEnabled(hDrive, drvNumber) Then
            
            If IdentifyDrive(hDrive, IDE_ID_FUNCTION, drvNumber, di) = True Then
        
               GetDriveInfo = di
              
            End If   'IdentifyDrive
         End If   'SmartCheckEnabled
      End If   'SmartGetVersion
   End If   'hDrive <> INVALID_HANDLE_VALUE
  
   CloseHandle hDrive
  
End Function


Private Function IdentifyDrive(ByVal hDrive As Long, _
                               ByVal IDCmd As Byte, _
                               ByVal drvNumber As IDE_DRIVE_NUMBER, _
                               di As DRIVE_INFO) As Boolean
    
  'Function: Send an IDENTIFY command to the drive
  'drvNumber = 0-3
  'IDCmd = IDE_ID_FUNCTION or IDE_ATAPI_ID
   Dim SCIP As SENDCMDINPARAMS
   Dim IDSEC As IDSECTOR
   Dim bArrOut(OUTPUT_DATA_SIZE - 1) As Byte
   Dim cbBytesReturned As Long
  
   With SCIP
      .cBufferSize = IDENTIFY_BUFFER_SIZE
      .bDriveNumber = CByte(drvNumber)
        
      With .irDriveRegs
         .bFeaturesReg = 0
         .bSectorCountReg = 1
         .bSectorNumberReg = 1
         .bCylLowReg = 0
         .bCylHighReg = 0
         .bDriveHeadReg = &HA0 'compute the drive number
         If Not IsWinNT4Plus Then
            .bDriveHeadReg = .bDriveHeadReg Or ((drvNumber And 1) * 16)
         End If
         'the command can either be IDE
         'identify or ATAPI identify.
         .bCommandReg = CByte(IDCmd)
      End With
   End With
  
   If DeviceIoControl(hDrive, _
                      DFP_RECEIVE_DRIVE_DATA, _
                      SCIP, _
                      Len(SCIP) - 4, _
                      bArrOut(0), _
                      OUTPUT_DATA_SIZE, _
                      cbBytesReturned, _
                      ByVal 0&) Then
                      
      CopyMemory IDSEC, bArrOut(16), Len(IDSEC)

      di.Model = StrConv(SwapBytes(IDSEC.sModelNumber), vbUnicode)
      di.SerialNumber = StrConv(SwapBytes(IDSEC.sSerialNumber), vbUnicode)
      
      IdentifyDrive = True
      
    End If
    
End Function


Private Function IsWinNT4Plus() As Boolean

  'returns True if running Windows NT4 or later
   Dim osv As OSVERSIONINFO

   osv.OSVSize = Len(osv)

   If GetVersionEx(osv) = 1 Then
  
      IsWinNT4Plus = (osv.PlatformID = VER_PLATFORM_WIN32_NT) And _
                     (osv.dwVerMajor >= 4)

   End If

End Function


Private Function SmartCheckEnabled(ByVal hDrive As Long, _
                                   drvNumber As IDE_DRIVE_NUMBER) As Boolean
  
  'SmartCheckEnabled - Check if SMART enable
  'FUNCTION: Send a SMART_ENABLE_SMART_OPERATIONS command to the drive
  'bDriveNum = 0-3
   Dim SCIP As SENDCMDINPARAMS
   Dim SCOP As SENDCMDOUTPARAMS
   Dim cbBytesReturned As Long
  
   With SCIP
  
      .cBufferSize = 0
      
      With .irDriveRegs
           .bFeaturesReg = SMART_ENABLE_SMART_OPERATIONS
           .bSectorCountReg = 1
           .bSectorNumberReg = 1
           .bCylLowReg = SMART_CYL_LOW
           .bCylHighReg = SMART_CYL_HI

           .bDriveHeadReg = &HA0
            If Not IsWinNT4Plus Then
               .bDriveHeadReg = .bDriveHeadReg Or ((drvNumber And 1) * 16)
            End If
           .bCommandReg = IDE_EXECUTE_SMART_FUNCTION
          
       End With
      
       .bDriveNumber = drvNumber
      
   End With
  
   SmartCheckEnabled = DeviceIoControl(hDrive, _
                                      DFP_SEND_DRIVE_COMMAND, _
                                      SCIP, _
                                      Len(SCIP) - 4, _
                                      SCOP, _
                                      Len(SCOP) - 4, _
                                      cbBytesReturned, _
                                      ByVal 0&)
End Function


Private Function SmartGetVersion(ByVal hDrive As Long) As Boolean
  
   Dim cbBytesReturned As Long
   Dim GVOP As GETVERSIONOUTPARAMS
  
   SmartGetVersion = DeviceIoControl(hDrive, _
                                     DFP_GET_VERSION, _
                                     ByVal 0&, 0, _
                                     GVOP, _
                                     Len(GVOP), _
                                     cbBytesReturned, _
                                     ByVal 0&)
  
End Function


Private Function SmartOpen(drvNumber As IDE_DRIVE_NUMBER) As Long

  'Open SMART to allow DeviceIoControl
  'communications and return SMART handle

   If IsWinNT4Plus() Then
      
      SmartOpen = CreateFile("\\.\PhysicalDrive" & CStr(drvNumber), _
                             GENERIC_READ Or GENERIC_WRITE, _
                             FILE_SHARE_READ Or FILE_SHARE_WRITE, _
                             ByVal 0&, _
                             OPEN_EXISTING, _
                             0&, _
                             0&)

   Else
      
      SmartOpen = CreateFile("\\.\SMARTVSD", _
                              0&, 0&, _
                              ByVal 0&, _
                              CREATE_NEW, _
                              0&, _
                              0&)
   End If
  
End Function


Private Function SwapBytes(b() As Byte) As Byte()
  
  'Note: VB4-32 and VB5 do not support the
  'return of arrays from a function. For
  'developers using these VB versions there
  'are two workarounds to this restriction:
  '
  '1) Change the return data type ( As Byte() )
  '   to As Variant (no brackets). No change
  '   to the calling code is required.
  '
  '2) Change the function to a sub, remove
  '   the last line of code (SwapBytes = b()),
  '   and take advantage of the fact the
  '   original byte array is being passed
  '   to the function ByRef, therefore any
  '   changes made to the passed data are
  '   actually being made to the original data.
  '   With this workaround the calling code
  '   also requires modification:
  '
  '      di.Model = StrConv(SwapBytes(IDSEC.sModelNumber), vbUnicode)
  '
  '   ... to ...
  '
  '      Call SwapBytes(IDSEC.sModelNumber)
  '      di.Model = StrConv(IDSEC.sModelNumber, vbUnicode)
  
   Dim bTemp As Byte
   Dim cnt As Long

   For cnt = LBound(b) To UBound(b) Step 2
      bTemp = b(cnt)
      b(cnt) = b(cnt + 1)
      b(cnt + 1) = bTemp
   Next cnt
      
   SwapBytes = b()
      
End Function

Private Sub Command1_Click()
    End
End Sub
'**********************


Function NoSerieDisque(strDrive As String) As Long
Dim SerialNum As Long
Dim Res As Long
Dim Trucnull As Long
Dim Strnul As String
Res = GetVolumeInformation(strDrive, Strnul, _
Trucnull, SerialNum, Trucnull, Trucnull, Strnul, Trucnull)
Me.Caption = strDrive
NoSerieDisque = SerialNum
End Function
'**********************

bon courage  

Commentaire de alain201 le 24/11/2008 21:41:25

j'ai essayé ce code sur Vista, ca marche pas.
avez vous une idée?

Commentaire de CmTop le 24/11/2008 22:03:15

Fais une recherche sur l'utilisation des WMI, tu pourras egalement avoir les information du Bios, le numéro de série de l'ordinateur quant par exemple c'est une PB ou autre.

Commentaire de moogliber le 01/02/2009 13:03:52

Chez moi non plus le code ne marche pas (disque SCSI sous windows vista ).

Quelqu'un connaitrait-il un code, complémentaire de celui-ci ? Cela permettrait de récuperer le N° physique de n'importe quel type de disque dur.

Merci pour vos infos

Commentaire de CmTop le 01/02/2009 14:48:28

Comme je l'ai déjà dit, il faut utiliser le WMI de Microsoft pour avoir toutes les infos sur le matériel, les proprièté etc...

http://fr.wikipedia.org/wiki/Windows_Management_Instrumentation

http://laurent-dardenne.developpez.com/articles/wmi-p1/

Commentaire de moogliber le 02/02/2009 12:10:46

Merci pour ces liens, mais après avoir tout lu très attentivement, je ne vois pas comment récuper le N° physique (en VB.NET ou en vb6).

Après de nombreuses recherches j'ai trouvé ce code en VB6 (qui utilise wmi) mais chez moi il retourne une chaine vide au lieu du N° de série :
------------
Private Sub Form_Load()
Dim objWMIService
Dim colItems
Dim objinst
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts::" & strComputer & "ootcimv2 ")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS", , 48)
For Each objItem In colItems
Wscript.worktagtxt "serialnumber: " & objItem.SerialNumber
MsgBox obj.SerialNumber
Next
For Each objWMIService In colItems
Next
'worktagtxt.Text = SerialNumber
MsgBox SerialNumber
End Sub
------

Quelqu'un aurait il un code ou une méthode qui fonctionnerait de façon générique, ou qui prendrait en compte différentes configurations ?
Merci de votre aide

Commentaire de CmTop le 02/02/2009 12:52:34

http://www.codyx.org/snippet_numero-serie-physique-disque-dur-wmi_291.aspx

Commentaire de moogliber le 02/02/2009 13:05:19

Merci de ton aide.
Malheureusement ce code ne fonctionne pas mieux, le numéro retourné est null.
D'autres idées ?

Commentaire de Renfield le 02/02/2009 13:21:59 administrateur CS

du grand n'importe quoi, ce script, Moogliber

la syntaxe est incorrecte...

ton code pourrait s'écrire :

Dim oItem As Object
    With GetObject("winmgmts:\\.\root\cimv2")
        For Each oItem In .ExecQuery("Select * from Win32_BIOS", , 48)
            MsgBox oItem.SerialNumber
        Next oItem
    End With

d'autre part, une lecture de la doc aurait pu t'aider a t'apercevoir que les infos que tu demandes ne concernent pas du tout le disque dur (lequel ?) mais le BIOS...

http://msdn.microsoft.com/en-us/library/aa394077(VS.85).aspx

Commentaire de moogliber le 02/02/2009 15:39:13

Renfield :
ce code est peut-être du "grand n'importe quoi", mais il n'est pas moi, et désolé si je ne suis pas un expert (très loin de moi cette prétention).

J'ai bien noté que la lecture du série physique ne concerne pas le disque dur mais le BIOS..., cela étant le problème est toujours le même : je recherche un code (ou une fonction) opérationnel.

En tout cas merci pour ton code, effectivement il retourne bien un numéro, mais j'ai l'impression que ce n'est pas le numéro physique du disque dur, car je l'ai testé sur mon portable, et il me retourne un numéro différent de celui du numéro physique.

Cordialement

Commentaire de Renfield le 02/02/2009 15:50:52 administrateur CS

j'ai simplement nettoyé ton code.
Il renvoie donc toujours le numéro du BIOS.

Tu souhaites le numéro de quel disque ?

Commentaire de moogliber le 02/02/2009 15:55:09

Je souhaite simplement le numéro physique du disque dur, sur lequel est installé l'appli.

Commentaire de CmTop le 02/02/2009 15:56:29

Sachant également que dans le Bios tu peux trouver le numéro de série de l'ordinateur (exemple PB) qui peut être utile pour protéger un programme afin qu'il ne fonctionne que sur un ordi.Série Ordi + Série DD = protection

Commentaire de Renfield le 02/02/2009 15:59:28 administrateur CS

vous souhaitez pas protéger sérieusement un programme VB par ce genre de magouilles ?

ca ira pour empecher un user lambda, mais un hacker fera sauter la chose en deux temps trois mouvements^^

Commentaire de moogliber le 02/02/2009 16:16:13

C'est pour ça que je voudrais pouvoir lire le numéro physique du dd (celui la n'est pas modifiable), en plus si l'utilisateur formate, il retrouve le même numéro.
Le pb c'est que je ne trouve pas les fonnctions qui permettent d'assurer la lecture de ce n° sur tous les PC (même une lecture sur 90% des PC ça me suffirait).

Commentaire de Renfield le 02/02/2009 16:21:33 administrateur CS

http://blogs.msdn.com/adioltean/archive/2005/05/04/414806.aspx

Commentaire de CmTop le 02/02/2009 17:01:26

Bien sur qu il y a toujours moyen de contourner une protection et sans être un hacker. Mais cela freine et peut d'écourager, c'est tout.

Commentaire de Renfield le 03/02/2009 08:57:49 administrateur CS

je regarde ça.

pour info, plein d'info a tirer du super programme de PCPT:

http://www.vbfrance.com/codes/WMI-HELPER-TOUTES-CLASSES-WIN32-AIDE-MEMO_41689.aspx

Commentaire de Renfield le 03/02/2009 09:47:37 administrateur CS

Je suis parvenu à récupérer un Win32_DiskDrive en spécifiant la lettre du lecteur logique.

néanmoins, le SerialNumber n'est pas forcément exploitable :

http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx

SerialNumber
Data type: string
Access type: Read-only
Number allocated by the manufacturer to identify the physical media.

Example: WD-WM3493798728

Windows Server 2003, Windows XP, Windows 2000, and Windows NT 4.0:  This property is not available.

Commentaire de Renfield le 03/02/2009 10:06:16 administrateur CS

http://www.vbfrance.com/codes/INFOS-WMI-DISQUES-DURS-LIEN-LECTEUR-LOGIQUE-LECTEUR_49166.aspx

Commentaire de moogliber le 03/02/2009 14:00:54

Merci Renfield
Je vais regarder tout ça attentivement

Commentaire de jfs.jfs le 26/10/2009 17:35:00

Bonjour
Je vais peut etre dire une bétise car je ne suis pas spécialiste mais Le N° de série du DD ne serait il pas dans la base de registre  à:
HKLM\software\microsoft\windows genuine advantage,  sous HDSLN ??
En effet je retrouve ici le resultat donné par le code déposé par Nocturne en haut de cette page à N°de série
Merci à tous pour vos codes
JFS

Commentaire de coussimac le 11/04/2010 00:30:26

il y a du nouveau depuis ?

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales