Lecure de NUMERO PHYSIQUE du DISQUE DUR

[Résolu]
Signaler
Messages postés
37
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
14 novembre 2016
-
Messages postés
74
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
2 avril 2019
-
Bonjour ;
svp si quelqu'un a une idee sur la lecture du NUMERO PHYSIQUE du DISQUE DUR ET QUELQUE soit sa technologie (ide,sata,ata,..)et cela sans importer un objet spécifique sur la plette de delphi (c.à.d par programmation )

merci de me lire

6 réponses


En écrivant sous google Delphi+Win32_PhysicalMedia on obtient deux liens

Lien 1 : ici

Lien 2 : Ici

La prochaine fois : Fais un effort de faire toi même tes recherches

Une simple recherche conduit à la fonction GetVolumeInformation documentée içi

En lisant en détail l'article de la MSDN, on voit

lpVolumeSerialNumber [out, optional]

A pointer to a variable that receives the volume serial number.

This parameter can be NULL if the serial number is not required.

This function returns the volume serial number that the operating system assigns when a hard disk is formatted. To programmatically obtain the hard disk's serial number that the manufacturer assigns, use the Windows Management Instrumentation (WMI) Win32_PhysicalMedia property SerialNumber.

Allez aux charbons et la prochaine pense à chercher un ptit peu
Messages postés
37
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
14 novembre 2016

MERCI de me repondre ;

j'ai lus l'article de la MSDN, et
lpVolumeSerialNumber [out, optional]
mais onnetement j'ai pas saisi comment l'utiliser en delphi et avoir le numero de serie physique du DD
Messages postés
37
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
14 novembre 2016

LA fonction GetVolumeInformation permet de lire la numero de serie logique et pas le numero physique .
NB: LE NUMERO PHYSIQUE C'EST UN NUMERO UNIQUE ALLOUE PAR LE CONSTRUCTEUR

Oui mais lit ce que j'ai souligné en rouge

"To programmatically obtain the hard disk's serial number that the manufacturer assigns, use the Windows Management Instrumentation (WMI) Win32_PhysicalMedia property SerialNumber"

Pour obtenir par programmation le numéro de série du disque dur que le constructeur a assigné, utilise Windows Management Instrumentation (WMI) Win32_PhysicalMedia property SerialNumber : C'est clair et sans appel (il y a un ligne que pointe vers le WMI. Dans ce lien il y a des exemples de scripts que tu peux traduire).
Messages postés
74
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
2 avril 2019

bonjour:
voici le code source complet:
unit UMain;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ActiveX, ComObj;

type
TFrmMain = class(TForm)
Edt_HDD_SerialNumber: TEdit;
Btn_Copy: TButton;
procedure FormCreate(Sender: TObject);
procedure Btn_CopyClick(Sender: TObject);
private
{ Private declarations }
function GetWMIString(const WMIClass, WMIProperty: String): String;
public
{ Public declarations }
FSWbemLocator: OLEVariant;
FWMIService: OLEVariant;
end;

var
FrmMain: TFrmMain;

implementation

{$R *.dfm}

procedure TFrmMain.Btn_CopyClick(Sender: TObject);
begin
Edt_HDD_SerialNumber.SelectAll;
Edt_HDD_SerialNumber.CopyToClipboard;
showMessage('The HDD Unique Serial Number is Copied Successfully');
end;

procedure TFrmMain.FormCreate(Sender: TObject);
var
s: string;
begin
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
s := GetWMIString('Win32_PhysicalMedia', 'SerialNumber'); // get the Unique Serial Number
s := StringReplace(s, ' ', '', [rfReplaceAll]); // Dellete ALL spaces by StringReplace function
Edt_HDD_SerialNumber.Text := s;
end;

function TFrmMain.GetWMIString(const WMIClass, WMIProperty: String): String;
const
wbemFlagForwardOnly = $00000020;
var
FWbemObjectSet: OLEVariant;
FWbemObject: OLEVariant;
oEnum: IEnumvariant;
iValue: LongWord;
begin;
Result := '';
FWbemObjectSet:= FWMIService.ExecQuery(Format('Select %s from %s', [WMIProperty, WMIClass]), 'WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
if not VarIsNull(FWbemObject.Properties_.Item(WMIProperty).Value) then
Result := FWbemObject.Properties_.Item(WMIProperty).Value;
FWbemObject := Unassigned;
end;


end.
Messages postés
74
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
2 avril 2019

Notice also that it recommends to use the WMI Win32_Physical Media property “SerialNumber” to obtain the manufacturer’s serial. Interestingly enough, this won’t work 100% of the time. The reason is that this property is optionally defined by the manufacturer and must be supplied by the hard disk driver.
lire attentivement se lien: https://micksmix.wordpress.com/2009/12/10/how-to-read-the-manufacturers-serial-number-from-a-hard-drive-with-delphi-and-without-wmi/