Comment puis-je obtenir l'ID de la carte mère ou le numéro de série de Delphi Code? P>
Y a-t-il un exemple de code ou d'articles que je peux regarder? p>
3 Réponses :
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.
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 code> est l'espace de noms où se trouve la classe win32_baseboard code>, 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? Code>
Mon PC donne le résultat suivant aussi: pour être rempli par o.f.m. Code>
J'ai une autre solution: meilleures salutations
Wellington P> p>
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.
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;