![]() |
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:
Hat aber nicht geklappt... *sniff*
[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]; Chris |
Was hat den nicht geklappt? Stimmt der Pfad? Hast du Zugriffsrechte?
Und nebenbei kapsel das ganze mal bitte in einen try-finally-Block:
Code:
Dann kommt mir eins spanisch vor:
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;
Code:
dazu steht in der Delphi-Hilfe:
Reg.WriteString('', Path);
Zitat:
ist doch genau wie mit ini-Dateien: [Section] Schluessel=Wert Wen ich das jetzt richtig interpretiere, gibst du ihm kein Schlüssel mit. |
Dann erkläre mir mal bitte, wie ich in einem Key auf den Wert "(Standard)" zugreife, den Windows automatisch anlegt. :|
Chris |
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.
|
Habe ich nicht gewußt, habe ich noch nie gemacht, habe ich noch nie gebraucht. Deswegen kam es mir komisch vor.
|
Ich tippe auch auf ein Rechteproblem.
Allerdings gefällt mir diese Konstruktion auch gar nicht:
Code:
Du gehst stillschweigend davon aus, dass der Zugriff auf den Schlüssel klappt, obwohl man das recht einfach über das Rückgabeergebnis erfragen kann:
Reg.OpenKey('http\shell\open\command', false);
Reg.WriteString('', Path); Reg.CloseKey;
Code:
Wäre günstiger, denke ich.
if(Reg.OpenKey('http\shell\open\command', false)) then
begin Reg.WriteString('', Path); Reg.CloseKey; end; 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. |
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. |
Hat doch Luckie schon gesagt, Christian. Ich habe nur rausgezogen, was mir wichtig schien.
|
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:
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.
[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]; |
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 15:26 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