![]() |
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 |
AW: Reg_multi_sz
Zitat:
![]() Die ersten beiden Treffer sehen sehr vielversprechend aus. :wink: ![]() ![]() |
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:
oder in einer Schleife zusammensetzen.
S := S1 + #0 + S2 + #0 + ...;
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. |
AW: Reg_multi_sz
Sollte er nicht mit #0#0 enden?
|
AW: Reg_multi_sz
Zitat:
|
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".
|
AW: Reg_multi_sz
Zitat:
Code:
eine Liste die so aussieht
a#0b#0c#0#0
Code:
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 ;)
0:a
1:b 2:c 3: 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. |
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 21:01 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