![]() |
Problem bei WriteBinaryData und Pchar
Hallo,
ich möchte in der Windows Registry unter HKEY_CURRENT_USER \SOFTWARE\Microsoft\Windows\CurrentVersion\Interne t Settings\Connections den Wert DefaultConnectionSettings ändern. Er soll also so aussehen :3c00000001000000010000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000 wenn man den umwandelt bekomme ich :"<........................................" usw das ist korrekt! aber mit folgenen Code
Delphi-Quellcode:
bekomme ich 33633030303030303031303030303030303130303030303030 30303030303030303030....uws
var reg:tregistry;
s:string; begin reg:=tregistry.Create; reg.RootKey:=HKEY_CURRENT_USER; REG.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections',true) ; // s setzen und umwandeln s:='3c000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; Reg.WriteBinaryData('DefaultConnectionSettings',pchar(s)^ , Length(s)); reg.CloseKey; reg.Free; end; wenn man den umwandel bekomme ich :"3c0000000100000001000000000000000000000000000000 00000" usw - also eigentlich dass, was ich wollte aber in der registry steht hald nur 3363303030303030303130 Der Fehler muss irgendwie bei PCHAR liegen - habe leider absolut keine Ahnung davon Bitte helft!! :firejump: |
Re: Problem bei WriteBinaryData und Pchar
Hi,
was meinst du denn was WriteBinaryData tut? Der Name sagt es doch, es werden die Daten binär geschrieben. Ein PChar ist nur ein Zeiger auf ein Array voller Character, das Nullterminiert ist. Anders gesagt hast du ein dyn. Byte Array, dessen ende durch chr('0') gekennzeichnet ist. 3 wäre als ASCII zeichen einfach die 33, c die 63 usw. Wenn du die Stringrepräsentation schreiben möchtest, verwende einfach writeString! Gruß Der Unwissende [ADD] Sorry, sehe erst jetzt was du eigentlich tun wolltest. Ok, wenn du bytes schreiben möchtest, dann verwende einfach ein Byte Array. In der Uses Types (glaube ich) findest du TByteDynArray. Versuch es ungefähr so:
Delphi-Quellcode:
[/Add]
var buffer : TByteArray = ($3c, $00, $00, $00, $01, $00, ...);
... Reg.WriteBinaryData('DefaultConnectionSettings', buffer[0], Length(buffer)); |
Re: Problem bei WriteBinaryData und Pchar
Delphi-Quellcode:
Fehler:Cannot initialize local variables
procedure TForm1.Button3Click(Sender: TObject);
var reg:tregistry; buffer : TByteArray = ($3c, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 00, $0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00); begin reg:=tregistry.Create; reg.RootKey:=HKEY_CURRENT_USER; REG.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections',true) ; Reg.WriteBinaryData('DefaultConnectionSettings', buffer[0], Length(buffer)); reg.CloseKey; reg.Free; end; So also ich arbeite zum ersten mal mit TByteArray... Du hast irgendetwas von uses gesagt, muss ich da noch was definieren oder kommt vielleicht noch was unter type oder ein array of ? |
Re: Problem bei WriteBinaryData und Pchar
Der fehler sagt ja schon alles. Lokale Variablen kann man nicht wie globale bei der definition initialisieren.
|
Re: Problem bei WriteBinaryData und Pchar
ok gut! :-D aber jetzt is noch der fehler number of elements differs from declaration
|
Re: Problem bei WriteBinaryData und Pchar
Ok, sorry mein Fehler. Das geht nur wenn du die Länge des Arrays festlegst.
Delphi-Quellcode:
Wenn ich mich nicht verzählt habe, sollte das so klappen.
procedure TForm1.Button3Click(Sender: TObject);
var reg:tregistry; buffer : Array[0..51] of Byte = ($3c, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 00, $0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00); begin reg:=tregistry.Create; reg.RootKey:=HKEY_CURRENT_USER; REG.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections',true) ; Reg.WriteBinaryData('DefaultConnectionSettings', buffer[0], Length(buffer)); reg.CloseKey; reg.Free; end; |
Re: Problem bei WriteBinaryData und Pchar
:-D :-D :-D Es waren 52 - aber es klappt !!! Danke danke !
bei 51 kommt komischerweise eine länge von 52 in der registrierung raus... |
Re: Problem bei WriteBinaryData und Pchar
Das Array ist nullindiziert, 0..51 = 52 Werte. 1..51 wären dann die 51 :wink:
Da muss man immer aufpassen, aber du übergibst ja auch das Element an der Stelle [0]. |
Re: Problem bei WriteBinaryData und Pchar
Liste der Anhänge anzeigen (Anzahl: 1)
so ich habe jetzt einen string den ich genauso wieder in der registrierung haben will, nur hald als binary data. Kann ihn aber vorher nicht definieren, weil die länge meines strings variiert.
3c00000001000000020000001100000038322e3133372e3235 322e3136323a38300000000000000000000000000000000000 00000000000000000000000000000000000000 sollte letztendlich also wie auf dem bild dann aussehen Bild im Anhang vielleicht irgendwie mit einem dynamischen array of byte und dann den string einlesen aber wie ??? [edit=sakura] Bild als Anhang. Mfg, sakura[/edit] |
Re: Problem bei WriteBinaryData und Pchar
Da dein String sedizimale Werte enthält, solltest du einfach die Funktion HexToBin verweden.
Delphi-Quellcode:
var buffer : TByteDynArray;
begin // sei s der string den du umwandeln möchtest setLength(buffer, length(s) div 2); HexToBin(PChar(s), PChar(@buffer[0]), length(buffer)); // jetzt stehen in Buffer die Byte Werte des Strings .... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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 by Thomas Breitkreuz