![]() |
Registry Fehler (eigene Procedure)
Hallo Leute,
hab ein riesen Problem und wollt euch fragen ob ihr mir helfen könnt. Suche habe ich genutzt doch nichts entsprechendes gefunden. Ich bin noch ein ziemlicher Noop was Delphi angeht, daher ist es bestimmt nur ein dummer kleiner Fehler von mir aber seht selbst:
Delphi-Quellcode:
unit Main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry; type TForm1 = class(TForm) CheckBox1: TCheckBox; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; const S = 'SOFTWARE/'; M = 'Microsoft/'; W = 'Windows/'; C = 'CurrentVersion'; var Form1: TForm1; Access: Integer; App: String; implementation {$R *.dfm} procedure Reg_Read(root:HKEY;pfad, Eigenschaft, DeinString:String;CheckBox:TCheckBox); var reg: TRegistry; begin reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKey(Pfad, TRUE); TRY IF reg.ValueExists(Eigenschaft) = TRUE THEN CheckBox.Checked := TRUE ELSE CheckBox.Checked := FALSE; FINALLY reg.CloseKey; reg.Free; end; end; procedure Reg_Check(root:HKEY;pfad, Eigenschaft, DeinString: String;CheckBox:TCheckBox); var reg: TRegistry; begin IF CheckBox.Checked THEN begin reg := TRegistry.Create; TRY reg.RootKey := root; reg.OpenKey(pfad, TRUE); reg.WriteString(Eigenschaft, DeinString); FINALLY reg.Free; end; end else begin reg := TRegistry.Create; TRY reg.RootKey := root; reg.OpenKey(Pfad, TRUE); reg.DeleteValue(Eigenschaft); FINALLY reg.Free; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Reg_Check(HKEY_LOCAL_MACHINE,S+M+W+C+'/Run','Auto',App,CheckBox1); end; procedure TForm1.FormCreate(Sender: TObject); begin App := '"'+Application.ExeName+'"'; Reg_Read(HKEY_LOCAL_MACHINE,S+M+W+C+'/Run','Auto',App,CheckBox1); end; end. Da ich die Proceduren oft benutze, wollte ich es mit einer eigenen abkürzen, doch irgendwie kommt da immer ein Fehler: 'Fehler beim setzten der Daten für 'Auto'' :gruebel: Hoffe ihr könnt mir helfen. Wasserleiche |
Re: Registry Fehler (eigene Procedure)
Ist das die Fehlermeldung von Delphi?
Ansonsten würde ich die CheckBox aus der Parameterliste nehmen und stattdessen einen Paramter vom Typ Boolean angeben. Denn was ist, wenn du mal keine Checkbox hast und willst den Code verwenden? Desweiteren ist OpenKey eine Funktion, deren Rückgabewert man überpürfen könnte. |
Re: Registry Fehler (eigene Procedure)
Danke für die schnelle Antwort.
Ja das ist die Fehlermeldung. Nein das sollen ja nur checkboxen sein. Bin dabei einen Registry Tweaker zu schreiben, da sind schon jetzt bereits 40 checkboxen drin. |
Re: Registry Fehler (eigene Procedure)
Zitat:
|
Re: Registry Fehler (eigene Procedure)
Mit welchem OS bist Du denn unterwegs??
Unter Vista ist es gar so einfach, Zugriff auf die HKLM zu bekommen. Versuch mal folgendes reg.RootKey := root; // hier einfügen: reg.Access := KEY_ALL_ACCESS; // Write, Read, Create_link -> Vollzugriff reg.OpenKey(pfad, TRUE); |
Re: Registry Fehler (eigene Procedure)
Danke für den Tipp,
habs getestet, doch es funktioniert irgendwie trotzdem nicht. Habe Windows XP Service Pack3 Stimmt denn irgendwas mit meiner Procedure nicht? Immer kommt die Fehlermeldung: Fehler beim Setzen der Daten für 'Auto' |
Re: Registry Fehler (eigene Procedure)
Versuch mal anstelle von '/Run' ein '\Run'.
Von Slash auf Backslash ändern. |
Re: Registry Fehler (eigene Procedure)
......
const S = 'SOFTWARE/'; M = 'Microsoft/'; W = 'Windows/'; C = 'CurrentVersion'; hier natürlich auch die Slashes drehen! |
Re: Registry Fehler (eigene Procedure)
hallo,
Delphi-Quellcode:
müsste doch den entsprechenden Pfad erstellen. Schau mal mit RegEdit nach, ob es den auch gibt, wenn ja, erstelle den Eintrag 'Auto' mal von Hand und prüfe, ob dann das Lesen und Löschen funktioniert.
reg.OpenKey(Pfad, TRUE);
In welcher Zeile wird die Fehlermeldung ausgegeben (vermutlich ja bei reg.WriteString). Da wir schon mal bei RegEdit sind: Gehe da bitte mal auf CurrentVersion\Run und dann im Menü "Bearbeiten" auf "Berechtigungen". Als Benutzer und Hauptbenutzer hast Du da allenfalls Leserechte, aber keinen Vollzugriff. Da dieser Bereich der Registrierung für Windows vorgesehen ist, solltest Du Dir überlegen, ob ein anderer Ablageort für Deine Werte nicht sinnvoller ist oder möchtest Du im Run-Zweig eigene Einträge hinzufügen, die dann mit Windows gestartet werden? |
Re: Registry Fehler (eigene Procedure)
Vielen Dank GHorn,
Hat alles geklappt. Wusste doch das es nur ein kleiner Fehler ist. :-D Werde dich in Dankesagung nach Fertigstellung in meinem Programm einbinden. Gute Arbeit. :thumb: Edit: ein wenig spät. Danke auch dir nahpets für die Mühe. Werde ich mir ebenfalls vormerken. :thumb: |
AW: Registry Fehler (eigene Procedure)
Sorry für das Auskramen eines alten Beitrags, aber hier noch eine kleine Erkenntnis, die doch relevant ist bei der Meldung:
Fehler beim Setzen der Daten für 'xy' Diese Fehlermeldung kann ebenfalls dann auftreten, wenn vorher mit der selben Instanz von TRegistry (hier: reg) mit OpenKeyReadOnly(...) gearbeitet wurde. Selbst nach späterem "OpenKey" ist die TRegistry (genauer gesagt der Wert "Access") immer noch im Modus "Nur-Lesen". Siehe Beitrag von "GHorn". Was mir nicht bewusst war ist, dass die Änderung von "Access" (hier: reg.Access := KEY_ALL_ACCESS) unbedingt vor OpenKey erfolgen muss. Es geht also nicht erst den Schlüssel zu Öffnen, Access auf "Schreiben" zu stellen, den Wert zu ändern und dann wieder Access auf "Nur-Lesen". Die Änderung von "Access" wirkt also immer erst ab dem nächsten OpenKey(~ReadOnly)-Befehl und hält mindestens bis zum nächsten OpenKey(~ReadOnly)-Befehl. Ich hoffe, ich konnte zukünftigen Benutzern der SuFu ein wenig helfen :) |
AW: Registry Fehler (eigene Procedure)
Boolean Werte -> nicht mit true/false abfragen.
Code:
-> so:
IF reg.ValueExists(Eigenschaft) = TRUE then
Code:
bzw.:
IF reg.ValueExists(Eigenschaft) then
Code:
IF not reg.ValueExists(Eigenschaft) then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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