Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Reg_multi_sz (https://www.delphipraxis.net/182041-reg_multi_sz.html)

xan553 25. Sep 2014 21:05

Reg_multi_sz
 
Hallo zusammen,

ich bin gerade dabei ein Programm für die Arbeit zu schreiben und sollte nun in der Registry einen REG_MULTI_SZ eintrag verändern, wie mache ich das, keiner der TRegistry Write befehle funktioniert.

MfG

Xan553

jensw_2000 26. Sep 2014 00:36

AW: Reg_multi_sz
 
Zitat:

Zitat von xan553 (Beitrag 1273841)
Hallo zusammen,
einen REG_MULTI_SZ eintrag verändern, wie mache ich das, keiner der TRegistry Write befehle funktioniert.

Hast Du Google bemüht?
Die ersten beiden Treffer sehen sehr vielversprechend aus. :wink:
REG_MULTI_SZ schreiben
REG_MULTI_SZ lesen

himitsu 26. Sep 2014 03:20

AW: Reg_multi_sz
 
Im MSDN nachgesehn, wie diese Multi-StringsPChars aufgebaut sind, hast du bereits?
Und notfalls welche API man dafür verwendet, falls TRegistry mit diesem Typ damit nicht umgehen kann.

Delphi-Strings können mit #0 im String umgehen.
Also einfach alle Strings zusammenaddieren und jeweils eine #0 hinter jeden String.
Die letzte #0 ist implizit in Delphi-Strings schon enthalten, aber die könnte man dennoch ebenfalls nochmal selber einfügen.

Delphi-Quellcode:
S := S1 + #0 + S2 + #0 + ...;
oder in einer Schleife zusammensetzen.

Oder man setzt das LineBreake oder Delimiter auf die #0, vergisst nicht die Leerzeile am Ende der Liste (das ist die eigentliche Bedeutung der doppelten #0#0 am Listenende) und nutzt dann Text oder DelemitedText, welches man an die API/TRegistry-Write-Methode übergibt.

Luckie 26. Sep 2014 06:20

AW: Reg_multi_sz
 
Sollte er nicht mit #0#0 enden?

Sir Rufo 26. Sep 2014 16:22

AW: Reg_multi_sz
 
Zitat:

Zitat von Luckie (Beitrag 1273854)
Sollte er nicht mit #0#0 enden?

Nichts anderes schrieb doch himitsu, oder etwa nicht? :gruebel:

Luckie 27. Sep 2014 09:33

AW: Reg_multi_sz
 
Ups. Ich hatte nach dem Quellcode Beispiel nicht mehr weiter gelesen. Aber es ist eigentlich keine Leerzeile. #0 ist der Trenner in der "Liste" und #0#0 kennzeichnet das Ende der "Liste".

Sir Rufo 27. Sep 2014 09:49

AW: Reg_multi_sz
 
Zitat:

Zitat von Luckie (Beitrag 1274050)
Ups. Ich hatte nach dem Quellcode Beispiel nicht mehr weiter gelesen. Aber es ist eigentlich keine Leerzeile. #0 ist der Trenner in der "Liste" und #0#0 kennzeichnet das Ende der "Liste".

Und wenn man mal stumpf logisch vorgeht und immer beim #0 trennt, dann wird aus
Code:
a#0b#0c#0#0
eine Liste die so aussieht
Code:
0:a
1:b
2:c
3:
und das letzte Element ist eben diese Leerzeile. Die Leerzeile markiert dann das Ende. Darum muss man auch peinlich darauf achten, wenn man sowas übergibt, dass man dazwischen keine Leerzeilen hat, sonst ist da sofort Ende ;)
Programmtechnisch ist diese Vorgehensweise auch wesentlich einfacher umzusetzen, als auf das Erscheinen von den #0#0 zu prüfen. Einfaches iterieren über die Zeichen und alles was ungleich #0 ist in einen Buffer schreiben. Kommt ein #0 Zeichen und der Buffer ist nicht leer, dann den Buffer-Inhalt verarbeiten und weiter mit dem Iterieren. Ist der Buffer jedoch leer, dann hört man einfach auf.

himitsu 27. Sep 2014 10:46

AW: Reg_multi_sz
 
Jupp, einfach in einer Schleife mit PChar einen String rausziehen, den Zeiger um die Länge+1 verschieben und das so lange wiederholen bis man einen Leerstring antrifft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.

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