AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Standardwert in Registrykey

Ein Thema von CalganX · begonnen am 9. Aug 2002 · letzter Beitrag vom 10. Aug 2002
Antwort Antwort
Seite 1 von 2  1 2      
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Standardwert in Registrykey

  Alt 9. Aug 2002, 16:32
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2
  Alt 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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 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.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6
  Alt 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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8
  Alt 9. Aug 2002, 19:29
Hat doch Luckie schon gesagt, Christian. Ich habe nur rausgezogen, was mir wichtig schien.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10
  Alt 10. Aug 2002, 06:57
Hi Christian.

Mein Fehler . 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 ...


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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 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