![]() |
BinToHex und TRegistry.ReadBinaryData
Hi DPler :hi:
Ich möchte aus der Registry Binärdaten rekursiv(!) auslesen und per BinToHex in den Hexadezimalwert umwandeln. Allerdings frage ich mich wie die Größe des Char-Arrays definieren soll wenn jeder Binärwert eine unterschiedliche Länge hat. Prinzipiell könnte ich offene Array nehmen, die Größe per Registry.GetDataSize bestimmen und das Array per SetLength() auf diese Größe bringen. Allerdings meckert dann BinToHex: [Fehler] Unit1.pas(34): Inkompatible Typen: 'Array' und 'Char' Bei festen Arraywerten habe ich aber die Sorge dass ich dann zuviel Speicher reserviere, im Gegenzug möchte ich aber auch jeden Wert auslesen können und zu Große nicht ignorieren. Habt ihr da ein paar Lösungsmöglichkeiten für mich? |
Re: BinToHex und TRegistry.ReadBinaryData
Delphi-Quellcode:
Allerdings garantiert dir niemand, dass sich der Inhalt zwischen dem Aufruf von Reg.GetDataSize und Reg.ReadBinaryData nicht ändert (?) :|
procedure Bla;
const TestKey = 'Software\Microsoft\Windows\CurrentVersion\Explorer'; TestName = 'ShellState'; var Buffer, Text: PAnsiChar; BufferSize: Integer; Reg: TRegistry; begin Buffer := nil; Text := nil; BufferSize := 0; Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKeyReadOnly(TestKey) then begin BufferSize := Reg.GetDataSize(TestName); GetMem(Buffer, BufferSize); GetMem(Text, BufferSize * 2); try Reg.ReadBinaryData(TestName, Buffer^, BufferSize); BinToHex(Buffer, Text, BufferSize); ShowMessage(Text); finally FreeMem(Text); FreeMem(Buffer); Reg.CloseKey; end; end else begin ShowMessage(Format('Kann Key %s nicht öffnen', [TestKey])); end; finally Reg.Free; end; end; |
Re: BinToHex und TRegistry.ReadBinaryData
Danke für den Code, werde ich mal testen :thumb:
|
Re: BinToHex und TRegistry.ReadBinaryData
Das ist schlecht:
Delphi-Quellcode:
Besser ist:
ShowMessage(Format('Kann Key %s nicht öffnen', [TestKey]));
Delphi-Quellcode:
,
ShowMessage(SysErrorMessage(GetLastError));
dann weiß man auch gleich, warum es zu einem Fehler kam. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz