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

API, COM et SDKs Delphi Discussion :

Numéro de sérié d’un disque dur portable DELL Inspiron N5050


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 12
    Points
    12
    Par défaut Numéro de sérié d’un disque dur portable DELL Inspiron N5050
    J’ai un code (exécutable delphi7) qui permet d’extraire le numéro de sérié des disques dur

    Code

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    function GetIdeSerialNumber0():string;
    const IDENTIFY_BUFFER_SIZE = 512;
    type
    TIDERegs = packed record
    bFeaturesReg : BYTE; // Used for specifying SMART "commands".
    bSectorCountReg : BYTE; // IDE sector count register
    bSectorNumberReg : BYTE; // IDE sector number register
    bCylLowReg : BYTE; // IDE low order cylinder value
    bCylHighReg : BYTE; // IDE high order cylinder value
    bDriveHeadReg : BYTE; // IDE drive/head register
    bCommandReg : BYTE; // Actual IDE command.
    bReserved : BYTE; // reserved for future use. Must be zero.
    end;
    TSendCmdInParams = packed record
    cBufferSize : DWORD;
    irDriveRegs : TIDERegs;
    bDriveNumber : BYTE;
    bReserved : Array[0..2] of Byte;
    dwReserved : Array[0..3] of DWORD; 
    bBuffer : Array[0..0] of Byte; // Input buffer.
    end;
    TIdSector = packed record
    wGenConfig : Word; 
    wNumCyls : Word;
    wReserved : Word; 
    wNumHeads : Word;
    wBytesPerTrack : Word;
    wBytesPerSector : Word;
    wSectorsPerTrack : Word;
    wVendorUnique : Array[0..2] of Word;
    sSerialNumber : Array[0..19] of ansiCHAR;
    wBufferType : Word;
    wBufferSize : Word;
    wECCSize : Word;
    sFirmwareRev : Array[0..7] of ansiCHAR;
    sModelNumber : Array[0..39] of ansiCHAR;
    wMoreVendorUnique : Word;
    wDoubleWordIO : Word;
    wCapabilities : Word;
    wReserved1 : Word;
    wPIOTiming : Word;
    wDMATiming : Word;
    wBS : Word; 
    wNumCurrentCyls : Word;
    wNumCurrentHeads : Word;
    wNumCurrentSectorsPerTrack : Word;
    ulCurrentSectorCapacity : DWORD;
    wMultSectorStuff : Word;
    ulTotalAddressableSectors : DWORD; 
    wSingleWordDMA : Word;
    wMultiWordDMA : Word;
    bReserved : Array[0..127] of BYTE;
    end;
    PIdSector = ^TIdSector;
    TDriverStatus = packed record
    bDriverError : Byte;
    bIDEStatus : Byte;
    bReserved : Array[0..1] of Byte;
    dwReserved : Array[0..1] of DWORD;
    end;
    TSendCmdOutParams = packed record
    cBufferSize : DWORD;
    DriverStatus : TDriverStatus;
    bBuffer : Array[0..0] of BYTE;
    end;
    var
    hDevice : THandle;
    cbBytesReturned : DWORD;
    ptr : pansiCHAR;
    SCIP : TSendCmdInParams;
    aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
    IdOutCmd : TSendCmdOutParams absolute aIdOutCmd;
     
    procedure ChangeByteOrder( var Data; Size : Integer );
    var ptr : PansiCHAR;
    i : Integer;
    c : ansiCHAR;
    begin
    ptr := @Data;
    for i := 0 to (Size shr 1)-1 do
    begin
    c := ptr^;
    ptr^ := (ptr+1)^;
    (ptr+1)^ := c;
    Inc(ptr,2);
    end;
    end;
    begin
    Result := ''; // return empty string on error
    if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then // Windows NT, Windows 2000
     
     
    begin
    //???? EU?? PhysicalDrive0 C?? PhysicalDrive1 C? PhysicalDrive2
    hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
    FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
    end
    else // Version Windows 95 OSR2, Windows 98
    hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
    if hDevice=INVALID_HANDLE_VALUE then Exit;
    try
    FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0);
    FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0);
    cbBytesReturned := 0;
    with SCIP do
    begin
    cBufferSize := IDENTIFY_BUFFER_SIZE;
    bDriveNumber := 0;
    with irDriveRegs do
    begin
    bSectorCountReg := 1;
    bSectorNumberReg := 1;
    bDriveHeadReg := $A0;
    bCommandReg := $EC;
    end;
    end;
    if not DeviceIoControl(hDevice, $0007c088, @SCIP, SizeOf(TSendCmdInParams)-1,
    @aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit;
    finally
    CloseHandle(hDevice);
    end;
    with PIdSector(@IdOutCmd.bBuffer)^ do
    begin
    ChangeByteOrder(sSerialNumber, SizeOf(sSerialNumber) );
    (pansiChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;
    Result := PansiCHAR(@sSerialNumber);
    end;
    end;
    //
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Edit1.Text:=GetIdeSerialNumber0;
     
    end;
     
    //
    Mais temps que utiliser sur un PC portable DELL Inspiron N5050 ne donne rien !!

    Lorsque utiliser DriverPack Solution 12 il me donne ça :

    Disque(s) Dur (s) Hitach HTS547550A9E384


    Une solution SVP

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    Il faudrait essayer avec WMI. Ca réussit parfois beaucoup mieux.

    Pour aider à construire la procédure, un utilitaire existe ICI

    La démo sur la page est justement le code pour ce que tu cherches

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 12
    Points
    12
    Par défaut
    Je ne sais pas comment faire face à ce code et où mettre le code complet s'il vous plaît, car elle est complexe et me paraissait erreurs

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut,

    Tu peux extraire le numéro de série des disques durs de n'importe quelle machine en utilisant les composants : MiTeC System Information: lien :http://www.torry.net/pages.php?id=240
    perso, je les utilise pour ça, sois pour les pc ou les micros-portables .

    bonne chance.

Discussions similaires

  1. Numéro de série du disque dur
    Par nkonito dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/09/2007, 13h38
  2. Numéro de série du disque dur
    Par h_kamel dans le forum Assembleur
    Réponses: 8
    Dernier message: 21/05/2007, 11h28
  3. Numéro de série du disque dur
    Par glouglou4485 dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/01/2007, 15h40
  4. Récuperer le numéro de série du disque dur et du CPU
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2006, 21h39
  5. [Disque dur]disque dur portable
    Par anis50 dans le forum Composants
    Réponses: 9
    Dernier message: 25/08/2006, 12h14

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