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.