![]() |
[Fehler] Registry Einträge abgeschnitten
Hallo zusammen,
ich möchte, dass sich mein Programm auf Wunsch des Users zwecks Autostart in die Registry einträgt. Das bewerkstellige ich genau nach der Anleitung von Luckie: ![]() Der Aufruf sieht folgendermaßen aus:
Delphi-Quellcode:
WriteStringToRegAPI('Software\Microsoft\Windows\CurrentVersion\Run','MeinProgramm',ParamStr(0));
Der Wert des erzeugten Schlüssels ist ber immer genau nach dem 6. Zeichen abgeschnitten, ich frag mich warum?! :( Wäre für einen Tipp sehr dankbar. Liebe Grüße, Smith |
AW: [Fehler] Registry Einträge abgeschnitten
Wie sieht WriteStringToRegAPI aus?
ups
Delphi-Quellcode:
Ein Unicodeproblemchen?
..., (Length(p_sValue)+1) * SizeOf(Char));
Aber am Einfachste wird es sein, wenn du über TRegistry gehts (antatt Luckies NonVCL-Code) ... kannst ja Luckies Beispiel als Vorlage nehmen, aber ich glaube es gab auch schon etwas in unserer CodeLib. |
AW: [Fehler] Registry Einträge abgeschnitten
Erstmal danke für die schnelle Antwort :)
Ich würde ungern für für einen einzigen Aufruf die ganze TRegistry mitschleppen. Ich schau mal, ob ich das mit dem Unicode in den Griff bekommen. Edit: Ja, das war es! Danke =) |
AW: [Fehler] Registry Einträge abgeschnitten
Solange die Units SysUtils und Classes eh schon eingebunden ist, sollte TRegistry keinen so großen Overhead mitschleppen.
@Minireg.pas: vermutlich die selben Unicodeprobleme, wie beim Luckie, da dort ebenfalls die Größe des Chars nicht beachtet wird. Der entsprechende Schreibcode sieht jedenfalls fast genauso aus. |
AW: [Fehler] Registry Einträge abgeschnitten
Also ich das damals geschrieben habe, war Unicode in Delphi noch in weiter Ferne. ;)
|
AW: [Fehler] Registry Einträge abgeschnitten
Die WinAPI kannte das aber damals schon und ob Bytes oder Chars, das stand bestimmt auch damals schon im MSDN/PSDK :tongue:
|
AW: [Fehler] Registry Einträge abgeschnitten
Moment mal:
Delphi-Quellcode:
Da sind doch schon die Unicode Versionen drin. Oder funktionieren die unter Delphi 2009 nicht?
function TMpuRegistry.ReadStringW(const ValueName: WideString;
var Value: WideString): LongInt; var cbData: Integer; lpType: DWORD; Buffer: PWideChar; begin // get size of required data result := RegQueryValueExW(FhkResult, PWideChar(ValueName), nil, @lpType, nil, @cbData); if cbData <> 0 then begin GetMem(Buffer, cbData); try result := RegQueryValueExW(FhkResult, PWideChar(ValueName), nil, @lpType, Pointer(Buffer), @cbData); Value := Buffer; finally FreeMem(Buffer); end; end; end; OK, die Ansi Versionen crashen natürlich, weil ich keinen AnsiString benutzt habe:
Delphi-Quellcode:
Und das meinte ich mit "in weiter Ferne". ;)
function TMpuRegistry.ReadString(const ValueName: string; var Value: string):
LongInt; var cbData: Integer; lpType: DWORD; Buffer: PChar; begin // get size of required data result := RegQueryValueEx(FhkResult, PChar(ValueName), nil, @lpType, nil, @cbData); if cbData <> 0 then begin GetMem(Buffer, cbData); try result := RegQueryValueEx(FhkResult, PChar(ValueName), nil, @lpType, Pointer(Buffer), @cbData); Value := Buffer; // <- hier AccessViolation finally FreeMem(Buffer); end; end; end; |
AW: [Fehler] Registry Einträge abgeschnitten
Zitat:
Um diese Funktionen geht es aber gar nicht. Siehe Link im ersten Beitrag. Dort benutzt du Length beim schreiben und das geht natürlich nicht mit Unicode. ;-) |
AW: [Fehler] Registry Einträge abgeschnitten
Moment. Ich plädiere auf unschuldig. Der Autor ist Christian Seehase. Ich habe das damals nur in die Codelib aufgenommen.
|
AW: [Fehler] Registry Einträge abgeschnitten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 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