String in Unicode wandeln und als Hexwert in Registry
Hallo liebe Delphi-Gemeinde,
ich stehe leider vor dem Problem, eine beliebige Zeichenkette nach Unicode wandeln zu müssen, um sie dann in der Registry als reg_binary zu schreiben. Irgendwie stehe ich auf dem Schlauch: Ich weiß, dass man Binärdaten mit procedure WriteBinaryData(const Name: String; var Buffer; BufSize: Integer); schreibt.
Delphi-Quellcode:
Aber irgendwie habe ich wohl Probleme, die Zeichenkette nach Unicode zu wandeln.
Reg.WriteBinaryData(Value, String[1], Length(String));
Für einen Link oder Hinweis wäre ich dankbar. |
Re: String in Unicode wandeln und als Hexwert in Registry
Registry ist doch Unicodefähig? Wieso willst du es denn dann als Binary Daten schreiben :gruebel:
In der Jedi gibt es AFAIK Unicodefähige Zugriffsfunktionen. Ansonsten TNTWare (oder D2009 :-)) |
Re: String in Unicode wandeln und als Hexwert in Registry
WideString, statt String
Delphi-Quellcode:
und wehe hier fragt einer nach dem *2 :stupid:
var S: WideString;
Reg.WriteBinaryData(Value, S[1], Length(S) * 2); Zitat:
Aber die AnsiStrings werden Registry-intern als Unicode abgespeichert. |
Re: String in Unicode wandeln und als Hexwert in Registry
Zitat:
|
Re: String in Unicode wandeln und als Hexwert in Registry
wäre möglich, also mit TNT ...
aber die Frage ob es denn nötig wäre, bleibt dennoch also was möchte der Threadersteller erreichen und was ist eine "beliebige Zeichenkette" wenn es eh nur ein AnsiString ist, dann kann man ja einfach .WriteString nutzen. |
Re: String in Unicode wandeln und als Hexwert in Registry
Falls es jemanden interessiert:
Delphi-Quellcode:
Ich fand TRegistry ohnehin schon immer totalen Overkill ;). Ich benutz übrigens die JEDI API Header. Kann gut sein, daß mit der "normalen" Windows Unit die ein oder andere Definition abweicht.
function GetStringValueFromRegistry(RootKey : HKEY; KeyName, ValueName : WideString;
var RequestedValue : WideString) : boolean; var Handle : HKEY; Buffer : Pointer; BufSize : Integer; DataType : Integer; ReturnValue : Integer; begin Result := false; if RegOpenKeyExW(RootKey, PWideChar(KeyName), 0, KEY_QUERY_VALUE, Handle) = ERROR_SUCCESS then begin Buffer := nil; BufSize := 0; DataType := REG_SZ; repeat Inc(BufSize, 1024); ReallocMem(Buffer, BufSize); ReturnValue := RegQueryValueExW(Handle, PWideChar(ValueName), nil, @DataType, Buffer, @BufSize); until ReturnValue <> ERROR_MORE_DATA; if ReturnValue = ERROR_SUCCESS then begin Result := true; RequestedValue := WideString(PWideChar(Buffer)); end; FreeMem(Buffer); RegCloseKey(Handle); end; end; function SetStringValueInRegistry(RootKey : HKEY; KeyName, ValueName, Value : WideString) : boolean; var Handle : HKEY; ReturnValue : Integer; begin Result := false; if RegCreateKeyExW(RootKey, PWideChar(KeyName), 0, nil, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE or KEY_WRITE, nil, Handle, nil) = ERROR_SUCCESS then begin ReturnValue := RegSetValueExW(Handle, PWideChar(ValueName), 0, REG_SZ, PWideChar(Value), (Length(Value) + 1) * 2); result := ReturnValue = ERROR_SUCCESS; RegCloseKey(Handle); end; end; |
Re: String in Unicode wandeln und als Hexwert in Registry
@0xF30FC7
Besten Dank für die beiden Funktionen. Das ist genau das, was ich in Kurzform gesucht habe. Und wenn ich statt REG_SZ die Angabe REG_BINARY verwende, wird der Wert so hinterlegt, wie ich es wollte :-D Super! |
Re: String in Unicode wandeln und als Hexwert in Registry
aber, wie schon gesagt, REG_SZ selber ist schon ein UnicodeString. [nur zur info]
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 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