AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi String in Unicode wandeln und als Hexwert in Registry
Thema durchsuchen
Ansicht
Themen-Optionen

String in Unicode wandeln und als Hexwert in Registry

Ein Thema von amigage · begonnen am 28. Mai 2009 · letzter Beitrag vom 29. Mai 2009
Antwort Antwort
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#1

String in Unicode wandeln und als Hexwert in Registry

  Alt 28. Mai 2009, 10:30
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.
Reg.WriteBinaryData(Value, String[1], Length(String)); Aber irgendwie habe ich wohl Probleme, die Zeichenkette nach Unicode zu wandeln.
Für einen Link oder Hinweis wäre ich dankbar.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: String in Unicode wandeln und als Hexwert in Registry

  Alt 28. Mai 2009, 10:33
Registry ist doch Unicodefähig? Wieso willst du es denn dann als Binary Daten schreiben
In der Jedi gibt es AFAIK Unicodefähige Zugriffsfunktionen. Ansonsten TNTWare (oder D2009 )
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#3

Re: String in Unicode wandeln und als Hexwert in Registry

  Alt 28. Mai 2009, 10:54
WideString, statt String

Delphi-Quellcode:
var S: WideString;

Reg.WriteBinaryData(Value, S[1], Length(S) * 2);
und wehe hier fragt einer nach dem *2


Zitat von Bernhard Geyer:
Registry ist doch Unicodefähig?
jupp, ist sie, nur nutzt vor D2009 das TRegistry nur die Ansi-Version der WinAPI, also direkt damit bekommt man keinen UnicodeString, welcher auch noch UnicodeZeichen enthält, in die Registry, oder da wieder raus.

Aber die AnsiStrings werden Registry-intern als Unicode abgespeichert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: String in Unicode wandeln und als Hexwert in Registry

  Alt 28. Mai 2009, 11:04
Zitat von himitsu:
jupp, ist sie, nur nutzt vor D2009 das TRegistry nur die Ansi-Version der WinAPI, also direkt damit bekommt man keinen UnicodeString, welcher auch noch UnicodeZeichen enthält, in die Registry, oder da wieder raus.
Und wie wäre es dann mit TNTWare oder eigenen kleinen Wrapper um Wide-Version der Registry-API (wie in meinem ersten Post angemerkt)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#5

Re: String in Unicode wandeln und als Hexwert in Registry

  Alt 28. Mai 2009, 13:22
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#6

Re: String in Unicode wandeln und als Hexwert in Registry

  Alt 28. Mai 2009, 13:28
Falls es jemanden interessiert:
Delphi-Quellcode:
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;
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.
Fridolin Walther
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: String in Unicode wandeln und als Hexwert in Registry

  Alt 29. Mai 2009, 10:12
@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

Super!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#8

Re: String in Unicode wandeln und als Hexwert in Registry

  Alt 29. Mai 2009, 10:45
aber, wie schon gesagt, REG_SZ selber ist schon ein UnicodeString. [nur zur info]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 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