Thema: Delphi Hardwareinfos

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.196 Beiträge
 
Delphi 12 Athens
 
#10

Re: Hardwareinfos

  Alt 12. Mär 2007, 14:20
Ja, die GUID soll, oder besser muß sich ändern, es wird schließlich sekündlich 'ne Neue von Windows angefordert ... ist ein Testprogamm einer meiner Units (halt die mit den ganzen "System"-Funktionen)

OK, ich hab richtig gerechnet und du hattest eben nicht an den Registergrenzen getrennt *erleichtert bin*


So, dann hier mal die korregierte Funktion
in EBX ist meines Erachtens nur das 3. Byte definiert (CPUCount) und der Rest kann variieren.
Delphi-Quellcode:
function GetID: string;
  function IntToPos(Value: Integer): integer;
  begin
    if Value < 0 then
      Result := -Value
    else
      Result := Value;
  end;
var ID: TCPUID;
begin
  if IsCPUID_Available then
  begin
    ID := GetCPUID;
    result := IntToStr(IntToPos(ID[1])) + IntToStr(IntToPos((ID[2] shr 16) and $FF))
      + IntToStr(IntToPos(ID[3])) + IntToStr(IntToPos(ID[4]));
  end
  else
    result := '0123456789'; //Dummywert
end;
[add]
Ach übrigens, statt IntToPos kann man auch Abs verwenden

Delphi-Quellcode:
Unit Math;

function GetID: string;
var ID: TCPUID;
begin
  if IsCPUID_Available then
  begin
    ID := GetCPUID;
    result := IntToStr(Abs(ID[1])) + IntToStr(Abs((ID[2] shr 16) and $FF))
      + IntToStr(Abs(ID[3])) + IntToStr(Abs(ID[4]));
  end
  else
    result := '0123456789'; //Dummywert
end;
[add2]
Ach, da es mir grad so schön Spaß macht , hier nocheine Version, welche wohl besser sein sollte, da hier die Vorzeichenbits nicht ignoriert werden.

Die ersten beiden Funktionen liefern das selbe Erbebnis, aber hier kommt natürlich eventuell was anderes raus, halt wegen der beachteten Vorzeichenbits.

Delphi-Quellcode:
function GetID: string;
var ID: TCPUID;
begin
  if IsCPUID_Available then
  begin
    ID := GetCPUID;
    result := Format('%d%d%d%d', [ID[1], (ID[2] shr 16) and $FF, ID[3], ID[4]]);
  end
  else
    result := '0123456789'; //Dummywert
end;
[nachtrag]
und zu dem ID:=GetCPUID;
ich glaub da sollte auffallen, daß es schließlich reicht, wenn nur einmal die Werte von der CPU abgefragt werden und nicht gleich viermal.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat