Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler bei in Registry schreiben (https://www.delphipraxis.net/99271-fehler-bei-registry-schreiben.html)

hadschi92 9. Sep 2007 20:31


Fehler bei in Registry schreiben
 
Ich bin grad dabei ne Konsolenanwendung zu schreiben, die sich auch in den Autostart der Registry schreiben soll, doch dabei erhalte ich eine Fehlermeldung bei der Deklinierung des Rootkeys (Undefinierter Bezeichner: HKEY_CURRENT_USER).
Doch eigentlich sollte das ja funktionieren, ohne die Zeile mit dem Rootkeyzeugs funktioniert das schreiben in die Registry.

Hier mal mein gesamter Delphicode:
Delphi-Quellcode:
program Project1;

uses
  Registry, Forms;

var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
    Reg.WriteString(Application.Exename, ParamStr(0));
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end.
Tja, woran liegt das, hat da jemand vielleicht einen Tipp?

RWarnecke 9. Sep 2007 20:37

Re: Fehler bei in Registry schreiben
 
Irgendwie sieht das ganze nicht nach einer Konsolenanwendung aus. Bei mir sieht die so aus :
Delphi-Quellcode:
program StringMove;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, Forms, Registry;

var
  Reg: TRegistry;

begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False);
    Reg.WriteString(Application.Exename, ParamStr(0));
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end.
Probiere es mal so. Nur so runtergetippt.

Edit 1: SysUtils nachgetragen
Edit 2: Windows und Forms nachgetragen.

Christian Seehase 9. Sep 2007 20:41

Re: Fehler bei in Registry schreiben
 
Moin Hadschi,

diese Konstante ist in der Unit Windows deklariert.
Diese müsstest Du noch mit einbinden.

Dafür kannst Du auf die Unit Forms verzichten.
Application.ExeName enthält das gleiche, wie ParamStr(0).
Wenn Du nur den Dateinamen haben willst, schau Dir mal ExtractFilename an (Unit Sysutils)

turboPASCAL 9. Sep 2007 20:47

Re: Fehler bei in Registry schreiben
 
Eher so:

Delphi-Quellcode:
program KonsoleXYZ;

uses
  Windows, SysUtils, Registry; // <--<< HKEY_CURRENT_USER in Windows.pas !

var
  Reg: TRegistry;

begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False);
    // Application.Exename <--<< das selbe nur ohne Forms.pas
    // >>--> ExtractFileName(ParamStr(0))
    Reg.WriteString(ExtractFileName(ParamStr(0)), ParamStr(0));
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end.
// Edit: Ach menno Christian... hättest du auch vor meinem Cacheupdate schreiben können. ;)

hadschi92 9. Sep 2007 20:53

Re: Fehler bei in Registry schreiben
 
Ich habs jetzt so gemacht, danke für die Windowsunit, genau an der lags:

Delphi-Quellcode:
program Project1;

uses
  Registry, Windows;

var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
    Reg.WriteString('Start', ParamStr(0){<-außerdem ist das hier der Wert für den Registryeintrag;)});
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end.
Mir hat ParamStr(0) gereicht, ExtractFileName brauch ich nicht, oder?

Christian Seehase 9. Sep 2007 20:58

Re: Fehler bei in Registry schreiben
 
Moin Hadschi,

der Name 'Start' ist natürlich nicht ungefährlich.
Wenn der schon existiert, überschreibst Du den bestehenden Wert.
Ein eindeutiger Name wäre schon ganz sinnvoll.

hadschi92 9. Sep 2007 21:00

Re: Fehler bei in Registry schreiben
 
Ja, das passt schon, der Name war nur provisorisch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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