![]() |
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; |
Re: Problem bei WriteBinaryData und Pchar
man man man endlich geschafft
arbeite an HKEY_CURRENT_USER \SOFTWARE\Microsoft\Windows\CurrentVersion\Interne t Settings\Connections den Wert DefaultConnectionSettings schon 1 1/2 tage. Bis ich erst entschlüsselt hatte wie DefaultConnectionSettings ... omg :shock: |
Re: Problem bei WriteBinaryData und Pchar
also : habe die hexwerte fast komplett entschlüsselt :
Zeichenfolgen in byte 1.3c (muss immer da stehen) 2."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 3."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 4."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 5."xx"(Zähl um eins hoch, wenn man eine einstellung ändert) 6."xx"(Zähl um eins hoch, wenn man eine einstellungen 100mal ändert) 7."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 8."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 9."01"(bedeutet hier Proxy deaktiviert)"02"(bedeutet hier Proxy aktiviert)."03"(bedeutet hier auch Proxy aktiviert) 10."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 11."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 12."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 13."xx"(die länge der ip mit port (z.b. 80.80.80.80:8080) IM HEXFORMAT!!) 14."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 15."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 16."00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) 17."xx"(Teil der ip IM HEXFORMAT!! zb. "8") 18."xx"(Teil der ip IM HEXFORMAT!! zb. "0") 19."xx"(Teil der ip IM HEXFORMAT!! zb. ".") 20."xx"(Teil der ip IM HEXFORMAT!! zb. "8") 21."xx"(Teil der ip IM HEXFORMAT!! zb. "0") 22."xx"(Teil der ip IM HEXFORMAT!! zb. ".") 23."xx"(Teil der ip IM HEXFORMAT!! zb. "0") 24."xx"(Teil der ip IM HEXFORMAT!! zb. ".") 25."xx"(Teil der ip IM HEXFORMAT!! zb. "0") 26."xx"(Teil der ip IM HEXFORMAT!! zb. ":") 27."xx"(Teil der ip IM HEXFORMAT!! zb. "8") 28."xx"(Teil der ip IM HEXFORMAT!! zb. "0") 29."xx"(Teil der ip IM HEXFORMAT!! zb. "8") 30."xx"(Teil der ip IM HEXFORMAT!! zb. "0") ab 30. kommt nochmal 36x "00"(Hat nichts mit den Proxy zu tun, so ne art platzhalter) mehr hab ich bis jetzt noch nicht herrausfinden können. wenn man dieses hexcode verändert werden die einstellungen zwart in das dialogfenster der ie einstellungen eingefügt aber nicht übernommen, d.h. man muss immer noch auf OK klicken.Habe noch nicht herrausgefunden wie man dies automatisch machen könnte.Bitte helft mir!!! |
Re: Problem bei WriteBinaryData und Pchar
Moin me2u,
ich denke mal, dass die Werte teilweise anders zu interpretieren sind (ohne Gewähr ;-)) 1. bis 4., 5. bis 8., 9. bis 12. und 13. bis 16. sind mit Sicherheit nicht als einzelne Bytes zu betrachten, sondern jeweils als DWORD oder integer. Beim Speichern werden die Bytes eines DWORD / integer umgedreht, so dass, z.B. aus 0000003C die Reihenfolge 3C000000 entsteht. Deshalb dürfte auch 6. hochgezählt werden, wenn 5. überläuft (allerdings erst nach 255, nicht nach 100). |
Re: Problem bei WriteBinaryData und Pchar
Zitat:
Aber dort natürlich auch nochmal kurz erklären was du wo machst :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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