9
votes

Comment obtenir un identifiant de carte mère ou un numéro de série dans Delphi?

Comment puis-je obtenir l'ID de la carte mère ou le numéro de série de Delphi Code?

Y a-t-il un exemple de code ou d'articles que je peux regarder?


0 commentaires

3 Réponses :


19
votes

Essayez d'utiliser le WMI win32_baseboard classe .

voir les échantillons de thèses: p>

Option 1) strong> Avant d'exécuter Vous avez besoin d'importer le Microsoft Wmisccripting Library code> à partir du composant code> -> importer composant code> puis sélectionnez Importer type bibliothèque CODE> P>

program GetWMI_MotherBoardSerial;

{$APPTYPE CONSOLE}

uses
  SysUtils
  ,ActiveX
  ,ComObj
  ,Variants;


function GetMotherBoardSerial:String;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;
    Moniker: IMoniker;
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
  end;

begin
  Result:='';
  objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
  colItems      := objWMIService.ExecQuery('SELECT SerialNumber FROM Win32_BaseBoard','WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  if oEnum.Next(1, colItem, iValue) = 0 then
  Result:=VarToStr(colItem.SerialNumber);
end;


begin
 try
    CoInitialize(nil);
    try
      Writeln('Serial MotherBoard '+GetMotherBoardSerial);
      Readln;
    finally
    CoUninitialize;
    end;
 except
    on E:Exception do
    Begin
        Writeln(E.Classname, ': ', E.Message);
        Readln;
    End;
  end;
end.


6 commentaires

La seule chose que je n'ai pas comprise, c'est 'Winmgmts: \\ localhost \ root \ cimv2'


@Pruz je vérifie le même code dans un autre ordinateur qui renvoie "Aucun". Qu'est ce qu'il se passe avec ça?


@HIMADRI, le deuxième code utilise un appel de liaison tardif, qui n'a pas besoin d'importer la bibliothèque WMI à l'intérieur de Delphi, vous pouvez lire plus une liaison tardive tardive dans ce lien Word.Mvps.org/faqs/interdev/earlyvslatebinding.htm


Le winmgmts: \\ localhost \ root \ cimv2 est l'espace de noms où se trouve la classe win32_baseboard , vous pouvez en savoir plus sur les espaces de noms WMI dans ce lien msdn.microsoft.com/en-us/library/aa822575%28vs.85% 29.aspx


@Pruz et vous savez quelque chose à propos de mon deuxième commentaire? que je vérifie le même code dans un autre ordinateur qui renvoie "Aucun". Quel est le problème avec cela?


Mon PC donne le résultat suivant aussi: pour être rempli par o.f.m.



0
votes

J'ai une autre solution: xxx

meilleures salutations Wellington


4 commentaires

Pouvez-vous expliquer ce que votre code fait? Êtes-vous sûr qu'il retourne le numéro de série de la carte mère, mais pas la CPUID?


J'ai lu beaucoup de problèmes à ce sujet et en concluant qu'il n'y a pas d'identifiant pour la CPU et de modifier ma proposition pour obtenir un ID de disque dur. Mon programme ci-dessus attrape le même identifiant à différents ordinateurs.


Je pense qu'il y a un problème avec cette fonction! J'ai constaté que cela renvoie différentes valeurs chaque fois que le même programme (dans lequel il a été utilisé) fonctionne sur différents démarrages. Exemples (8 points): 1) 000306D4-02100800-7FFAFBBF-BFEBFBFFF, 2) 000306D4-00100800-7FFFBBF-BFEBFBFF, 3) 000306D4-00100800-7FFFBBF-BFEBFBFF, 4) 000306D4-02100800-7FFFBBF-BFEBFBFF, 5) 000306D4- 02100800-7FFAFBBF-BFEBFBFFF, 6 }0306D4-03100800-7FFFBBF-BFEBFBFFF, 7) 000306D4-01100800-7FFAFBBF-BFEBFBFF, 8) 000306D4-00100800-7FFAFBBF-BFEBFBFFF. Très étrange!


Je pense qu'il n'y a pas de solution ... J'ai essayé depuis 2009.



1
votes

Si vous voulez montrer la série en série de la carte mère, utilisez ce truc. Pour afficher le numéro de la carte mère dans Windows 10 interroger ce qui suit dans le service WMI:

WMIC Planchers Obtenez le produit, le fabricant, la version, la série de série CODE> STROND>

//USES: Winapi.ActiveX, System.Win.ComObj
function TForm2.GetMotherBoardSerial: string;
var
  objWMIService: OLEVariant;
  colItems: OLEVariant;
  colItem: OLEVariant;
  oEnum: IEnumvariant;
  iValue: Longword;
  function GetWMIObject(const objectName: string): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;
    Moniker: IMoniker;
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName),
      chEaten, Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
  end;
begin
  Result := '';
  objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
  colItems :=
    objWMIService.ExecQuery('SELECT SerialNumber FROM Win32_BaseBoard', 'WQL', 0);
  oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
  if oEnum.Next(1, colItem,
    iValue) = 0 then
    Result := VarToStr(colItem.SerialNumber);
end;


0 commentaires