Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Generierung einer MachineID: aktualisieren? (https://www.delphipraxis.net/206768-generierung-einer-machineid-aktualisieren.html)

Andreas13 29. Jan 2021 07:49

AW: Generierung einer MachineID: aktualisieren?
 
Hier https://www.delphipraxis.net/172006-...-auslesen.html habe ich etwas gefunden:
Delphi-Quellcode:
Function GetWinProductId: String;
Var
  Reg: TRegistry;

Begin
  Reg:= TRegistry.Create(KEY_READ or $0100);
  Try
    Reg.RootKey:= HKEY_LOCAL_MACHINE;
    // If (Reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\', false)) Then
    If (Reg.OpenKeyReadOnly('SOFTWARE\Microsoft\Windows NT\CurrentVersion\')) Then
    Begin
      Try
        If Reg.ValueExists('DigitalProductId') Then
        Begin
          // Result:= Result + #13#10 + 'BuildGUID: ' + Reg.ReadString('BuildGUID');
          // Result:= 'BuildGUID: ' + Reg.ReadString('BuildGUID');
          Result:= Reg.ReadString('ProductId');
        End;
        If Reg.ValueExists('DigitalProductId4') Then
        Begin
          // Result:= Result + #13#10 + 'BuildGUID: ' + Reg.ReadString('BuildGUID');
          //Result:= 'BuildGUID: ' + Reg.ReadString('BuildGUID');
          Result:= Reg.ReadString('ProductId');
        End;
      Finally
        Reg.CloseKey;
      End;{Try}
    End;{If}
  Finally
    Reg.Free;
  End;{Try}
End;{GetWinProductId}
{-------------------}
Das funktioniert auch unter Windows 10.
Gruß, Andreas

Klaus01 29. Jan 2021 08:10

AW: Generierung einer MachineID: aktualisieren?
 
Delphi-Quellcode:
programm
{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

function GetWin32_DiskDriveCaption: String;
const
  WbemUser           ='';
  WbemPassword       ='';
  WbemComputer       ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService  : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject  : OLEVariant;
  oEnum        : IEnumvariant;
  iValue       : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT Caption FROM Win32_DiskDrive','WQL',wbemFlagForwardOnly);
  oEnum        := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    result := String(FWbemObject.Caption);// String
    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      WriteLn(GetWin32_DiskDriveCaption);
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;
end.
Grüße
Klaus

Andreas13 29. Jan 2021 08:33

AW: Generierung einer MachineID: aktualisieren?
 
Mir sind noch einige Fehler in hwid.pas (MachinenID - 32Bit.zip) aufgefallen: In allen Teilen der Routine GetIdeSerialNumber, die
Delphi-Quellcode:
Reg.OpenKeyReadOnly(..)
enthalten, sollten die Registry-Aufrufe in einen weiteren Speicherschutzblock gepackt werden:
Delphi-Quellcode:
Try
  ... // bisheriger Code
Finally
  Reg.CloseKey;
End;
Andreas

Andreas13 29. Jan 2021 08:48

AW: Generierung einer MachineID: aktualisieren?
 
@Klaus01: Prima, danke, es funktioniert! :thumb:
Gruß, Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz