Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   [Fehler] Registry Einträge abgeschnitten (https://www.delphipraxis.net/160737-%5Bfehler%5D-registry-eintraege-abgeschnitten.html)

Smith87 29. Mai 2011 10:50

[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: http://www.delphipraxis.net/2588-arb...tregistry.html.

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

himitsu 29. Mai 2011 10:56

AW: [Fehler] Registry Einträge abgeschnitten
 
Wie sieht WriteStringToRegAPI aus?
ups

Delphi-Quellcode:
..., (Length(p_sValue)+1) * SizeOf(Char));
Ein Unicodeproblemchen?

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.

Smith87 29. Mai 2011 11:11

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 =)

himitsu 29. Mai 2011 11:21

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.

Luckie 29. Mai 2011 11:45

AW: [Fehler] Registry Einträge abgeschnitten
 
Also ich das damals geschrieben habe, war Unicode in Delphi noch in weiter Ferne. ;)

himitsu 29. Mai 2011 11:50

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:

Luckie 29. Mai 2011 12:46

AW: [Fehler] Registry Einträge abgeschnitten
 
Moment mal:
Delphi-Quellcode:
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;
Da sind doch schon die Unicode Versionen drin. Oder funktionieren die unter Delphi 2009 nicht?

OK, die Ansi Versionen crashen natürlich, weil ich keinen AnsiString benutzt habe:
Delphi-Quellcode:
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;
Und das meinte ich mit "in weiter Ferne". ;)

jaenicke 29. Mai 2011 13:33

AW: [Fehler] Registry Einträge abgeschnitten
 
Zitat:

Zitat von Luckie (Beitrag 1103537)
OK, die Ansi Versionen crashen natürlich, weil ich keinen AnsiString benutzt habe:

Nein, das müsste so sogar gehen, da die Registry-Funktionen mit Größen in Byte arbeiten. Deshalb sollte das mit GetMem richtig gehen, und zwar egal, ob du diesen Code mit einer Unicode-Version von Delphi ausführst oder nicht. Denn einmal wird das ganze halt als Unicode benutzt, einmal nicht.

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. ;-)

Luckie 29. Mai 2011 13:43

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.

jaenicke 29. Mai 2011 14:08

AW: [Fehler] Registry Einträge abgeschnitten
 
Zitat:

Zitat von Luckie (Beitrag 1103540)
Ich habe das damals nur in die Codelib aufgenommen.

Dann kannst du es ja auch gleich korrigieren. :bounce1: :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Seite 1 von 2  1 2      

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