oh... das is ja super wie schnell man hier eine Antwort bekommt
leider hilft das auch nichts... das Resultat besteht wieder nur aus dem ersten Zeichen. Ich vermute, dass es an dem Datentyp PBYTE (von "lpData") liegt.
Beispiel: Registryeintrag = "Lucida Console" (vom Typ REG_SZ), cbData = 30... mein String enthält nur "L"
Irgendwie muss man noch den Wert von "cbData" mit einbauen. Ich vermute dass cbData immer der (Länge des Eintrags + 1 Zeichen) * 2 entspricht. Das zusätzliche Zeichen wird Null sein, um den String abzuschliessen. Beim Registry-Datentyp REG_DWORD ist "cbData" übrigens immer 4.
Für Typ REG_SZ: Ist es nicht irgendwie möglich den Zeiger "lpData" immer ein Byte weiter zu setzen und dann das Zeichen im Speicher abzufragen? Wenn ja, dann hätte ich aber keine Ahnung wie es syntaktisch richtig aufgeschrieben würde.
kleiner Nachtrag:
So was in der Art, würde helfen (hatte ich mal versucht... verdeutlicht glaub ich eine Idee):
Delphi-Quellcode:
var s: string;
i: DWORD
...
REG_DWORD: begin
GetMem(@i, cbData) // konnte man so nicht schreiben
@i := lpData; // der linken Seite kann nix zugewiesen werden
Result := IntToStr(i);
end;
REG_SZ: begin // Kommentare... siehe oben
GetMem(@s, cbData);
@s := lpData;
Result := s;
end;
...
Viele Grüsse
Markus