In Registry schreiben

Rund um die LCL und andere Komponenten
Antworten
neuchr
Beiträge: 2
Registriert: Fr 15. Aug 2014, 07:34

In Registry schreiben

Beitrag von neuchr »

Hallo,

ich bin neu hier als aktiver User. Ich habe schon viel mitgelesen. Jetzt habe ich aber seit ein paar Tagen selber ein Problem wo ich trotz Google und der suche hier nicht weiterkomme. Ich hoffe man kann mit hier helfen.
Ich möchte in die Registry schreiben. Mit auslesen habe ich kein Problem. Ich habe mir zum testen einen Button angelegt mit dem ich dann einen Key unter HKEY_LOCAL_MACHINE\Software schreiben möchte. Was mache ich hier falsche. Ich bin als Admin angemeldet, und nutze WIN7-64.

Danke und Gruß
neuchr

Code: Alles auswählen

procedure TForm1.Button16Click(Sender: TObject);
var Registry : TRegistry;
    test : string;
begin
  Registry:=TRegistry.Create(KEY_READ OR $0100);
  Registry.RootKey:=HKEY_LOCAL_MACHINE;
 
  if NOT (Registry.OpenKey('\SOFTWARE\Test', true)) then
    Begin
      IF Registry.CreateKey('Neuhaus') THEN showmessage('Key erstellt')
      ELSE showmessage('Key nicht erstellt');
    end
  ELSE showmessage('Key ist vorhanden');
 
  Registry.CloseKey;
  Registry.free;
end;
Zuletzt geändert von Lori am Fr 15. Aug 2014, 11:44, insgesamt 1-mal geändert.
Grund: Highlighter

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: In Registry schreiben

Beitrag von Komoluna »

Erstmal willkommen im Forum,

mit deinem Problem kann ich dir leider nicht helfen, da ich die registry noch nie benutzt habe.

Aber wenn du das nächste mal code postest, verwende doch bitte Highlighter:

Code: Alles auswählen

Procedure xy(a:Integer);
begin
  bla := a*a+3;
end;
MFG

Komoluna

P.S.: Du kannst deinen beitrag auch editieren, und musst keinen neuen Post für deinen Code erstellen.
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: In Registry schreiben

Beitrag von theo »

Woher hast du diese Parameter KEY_READ OR $0100 ?
Was sollen die bezwecken?

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: In Registry schreiben

Beitrag von shokwave »

Hallo,

hab's gerade mal probiert. Du musst dein Programm mit Adminrechten starten. Auch wenn in der Benutzerverwaltung von Windows steht, dass du Admin bist bedeutet das nicht das du alles darfst. Da der HKey_Local_Mashine Einstellung enthält die das gesamte System betreffen und nicht nur den aktuellen Nutzer, brauchst du erhöhte Rechte.

In den Projekteinstellungen/Anwendung kannst du die "Ausführungsebene" einstellen. Bei mir crasht dann allerdings der Debugger. :(

Ansonsten schließe ich mich der Frage von Theo an. Solche Parameter hab ich noch nie benutzt.
mfg Ingo

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: In Registry schreiben

Beitrag von Socke »

shokwave hat geschrieben:In den Projekteinstellungen/Anwendung kannst du die "Ausführungsebene" einstellen. Bei mir crasht dann allerdings der Debugger. :(
Dann musst du den Debugger natürlich auch als Admin starten (bzw. ganz Lazarus).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: In Registry schreiben

Beitrag von mschnell »

neuchr hat geschrieben:Ich möchte in die Registry schreiben.
I.A. keine gute Idee.

Wenn Du eigene Informationen speichern willst, verwendest Du besser INI oder XML - Dateien die Du an sinnvollen Stellen hinterlegst uns sinnvoll benennst.

-Michael

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: In Registry schreiben

Beitrag von shokwave »

mschnell hat geschrieben:
neuchr hat geschrieben:Ich möchte in die Registry schreiben.
I.A. keine gute Idee.
Würde ich so pauschal nicht sagen, aber die Frage warum ausgerechnet dorthin (HKLM) geschrieben werden soll, stellt sich natürlich schon. Das entspricht dem speichern von Daten im Windowsverzeichnis und ist natürlich keine gute Idee.
mfg Ingo

neuchr
Beiträge: 2
Registriert: Fr 15. Aug 2014, 07:34

Re: In Registry schreiben

Beitrag von neuchr »

Danke ich habe es das muss natürlich KEY_WRITE heißen.

Das ist dafür da um mit einer 32 BIT Applikation auf die Registry einer 64 Bit Betriebssystem zuzugreifen.

Habe das jetzt so gelöst. (Fehler Behebung fehlt noch)

Code: Alles auswählen

procedure TForm1.Button16Click(Sender: TObject);
var Registry : TRegistry;
begin
  Registry:=TRegistry.Create(KEY_WRITE OR $0100);
  Registry.RootKey:=HKEY_CURRENT_USER;
 
  if (Registry.OpenKey('\SOFTWARE\Test', true)) then
    Begin
      registry.writestring('Wert1','Hallo');
      registry.writestring('Wert2','JA');
    end;
 
  Registry.CloseKey;
  Registry.free;
end;       

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: In Registry schreiben

Beitrag von theo »

Warum verwendest du nicht die Konstante? Dann versteht man das auch besser.

Code: Alles auswählen

 Registry:=TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);
 

Antworten