Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Standardwert in Registrykey (https://www.delphipraxis.net/568-standardwert-registrykey.html)

CalganX 9. Aug 2002 16:32


Standardwert in Registrykey
 
Hi @all!
Ich habe mal eine Frage: Wie kann ich auf den Standardwert in einem Key in der Registry zugreifen. Folgendes habe ich versucht:
Code:
[b]procedure[/b] SetWebBrowser(Path: [b]String[/b]);
[b]var[/b] Reg: TRegistry
[b]begin[/b]
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_CLASSES_ROOT;
  Reg.OpenKey([color=#0000ff]'http\shell\open\command'[/color], false);
  Reg.WriteString([color=#0000ff]''[/color], Path);
  Reg.CloseKey;
  Reg.Free;
[b]end[/b];
Hat aber nicht geklappt... *sniff*

Chris

Luckie 9. Aug 2002 16:47

Was hat den nicht geklappt? Stimmt der Pfad? Hast du Zugriffsrechte?

Und nebenbei kapsel das ganze mal bitte in einen try-finally-Block:
Code:
procedure SetWebBrowser(Path: String);
var Reg: TRegistry
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    Reg.OpenKey('http\shell\open\command', false);
    Reg.WriteString('', Path);
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;
Dann kommt mir eins spanisch vor:
Code:
Reg.WriteString('', Path);
dazu steht in der Delphi-Hilfe:
Zitat:

Die Methode speichert einen String-Wert in einem bestimmten Datenwert, der dem aktuellen Schlüssel zugeordnet ist.

procedure WriteString(const Name, Value: String);

Beschreibung
Mit WriteString wird ein String-Wert in einem Datenwert gespeichert, der dem aktuellen Schlüssel zugeordnet ist.
Der String-Parameter Name enthält den Namen des Datenwertes, in dem die Daten gespeichert werden sollen. Ist der Name bereits vorhanden, wird dessen aktueller Wert überschrieben. Andernfalls wird der Name neu erzeugt.
Der Parameter Value ist ein String, der in der Registrierung gespeichert werden soll.
Kuck dir insbesondere mal den hervorgehobenen Teil an. Du sagst dem Programm ja gar nicht, wo er den Wertz Pfad hinschreiben soll.
ist doch genau wie mit ini-Dateien:

[Section]
Schluessel=Wert

Wen ich das jetzt richtig interpretiere, gibst du ihm kein Schlüssel mit.

CalganX 9. Aug 2002 16:52

Dann erkläre mir mal bitte, wie ich in einem Key auf den Wert "(Standard)" zugreife, den Windows automatisch anlegt. :|

Chris

sakura 9. Aug 2002 17:26

Warum Du den Schlüssel nicht bearbeiten konntest, kann ich Dir nicht definitiv sagen (siehe Luckie und Rechte), aber es stimmt, dass Du mit Reg.WriteString('', Path); den (Standard) Wert setzen kannst.

Luckie 9. Aug 2002 19:09

Habe ich nicht gewußt, habe ich noch nie gemacht, habe ich noch nie gebraucht. Deswegen kam es mir komisch vor.

MathiasSimmack 9. Aug 2002 19:12

Ich tippe auch auf ein Rechteproblem.
Allerdings gefällt mir diese Konstruktion auch gar nicht:
Code:
Reg.OpenKey('http\shell\open\command', false);
Reg.WriteString('', Path);
Reg.CloseKey;
Du gehst stillschweigend davon aus, dass der Zugriff auf den Schlüssel klappt, obwohl man das recht einfach über das Rückgabeergebnis erfragen kann:
Code:
if(Reg.OpenKey('http\shell\open\command', false)) then
  begin
    Reg.WriteString('', Path);
    Reg.CloseKey;
  end;
Wäre günstiger, denke ich.

Aber sag mal, Chris1308, was du für ein Betriebssystem benutzt!


btw: Chris, bitte die Farbgebung immer im Auge behalten! Schlüsselworte fett, Kommentare kursiv und dunkelblau (#000080). Mehr wollten wir hier alle nicht, damit a) die Codes nicht zu bunt, und b) die Postings nicht zu groß sind.

Christian Seehase 9. Aug 2002 19:26

Moin Zusammen,

wobei dann noch anzumerken wäre, dass WriteString eine Exception auslöst, wenn das Schreiben fehlschlägt.
Es könnte also nicht unbedingt schaden dies in einen try/except Block einzubinden.

MathiasSimmack 9. Aug 2002 19:29

Hat doch Luckie schon gesagt, Christian. Ich habe nur rausgezogen, was mir wichtig schien.

Christian Seehase 9. Aug 2002 19:53

Moin Mathias,

und wo?

Luckie sprach vom try/finally Block um das TRegistry Objekt auch garantiert wieder freizugeben.

Meiner Ansicht nach, müsste das Ganze sogar so aussehen:
Code:
[b]procedure[/b] SetWebBrowser(Path: [b]String[/b]);
[b]var[/b] Reg: TRegistry
[b]begin[/b]
  Reg := TRegistry.Create;
  [b]try[/b]
    Reg.RootKey := HKEY_CLASSES_ROOT;
    [b]if[/b] Reg.OpenKey('http\shell\open\command', false) [b]then[/b]
    [b]begin[/b]
      [b]try[/b]
        [b]try[/b]
          Reg.WriteString('', Path);
        [b]except[/b]
        [b]end[/b];
      [b]finally[/b]
        Reg.CloseKey;
      [b]end[/b];
    [b]end[/b];
  [b]finally[/b]
    Reg.Free;
  [b]end[/b];
[b]end[/b];
Ein try/finally um das TRegistry Objekt garantiert wieder freizugeben, ein try/finally, um das Handle garantiert wieder freizugeben, und ein try/except (nicht erforderlich) um ggf. einen fehlgeschlagenen Schreibversuch abzufangen.

MathiasSimmack 10. Aug 2002 06:57

Hi Christian.

Mein Fehler :oops:. Andererseits könnte man den Schlüssel bei Schreibaktionen generell mit true öffnen, damit er auch notfalls angelegt wird, wenn er noch nicht existiert. Und wenn das dann bereits fehlschlägt und FALSE als Ergebnis liefert, dann versucht man das Anlegen des Wertes erst gar nicht. :-)

Ist genau wie beim Lesen von Schlüsseln. Da kann es auch zu einer Exception kommen, weswegen man vorher mit "ValueExists" prüfen sollte, ob der Wert überhaupt vorhanden ist. Nun macht das bei einem Standardwert wohl nicht viel Sinn, denn wenn der Schlüssel existiert, dann sollte auch der Standardwert da sein. Aber weiß man das? Ich meine, ... es ist immerhin Windows ... :wink:


Aber Chris1308 soll erst mal die Frage beantworten, welches Betriebssystem er benutzt. Ich denke, dann klärt sich das Problem mit dem Nicht-Schreiben-Können möglicherweise schon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 Uhr.
Seite 1 von 2  1 2      

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