![]() |
Frage zu TRegistry
Moin,
in diesem Thread: ![]() wurde ich darauf hingewiesen, dass nicht alle Registry-Einträge die ich geöffnet habe wieder geschlossen werden. Nun habe ich die entsprechende Funktion überarbeitet und sie sieht nun wie folgt aus:
Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
OpenWith, ParamString: string; IconIndex: Integer = 0): boolean; var reg: TRegistry; begin result := false; if Extension <> '' then begin if Extension[1] <> '.' then Extension := '.' + Extension; reg := TRegistry.Create; try reg.RootKey := HKEY_CLASSES_ROOT; if reg.OpenKey(Extension, true) then begin reg.WriteString('', ExtDescription); reg.CloseKey; if reg.OpenKey('\' + ExtDescription, true) then begin reg.WriteString('', FileDescription); reg.CloseKey; if reg.OpenKey('DefaultIcon', true) then begin reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex])); reg.CloseKey; if reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', true) then begin reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString])); result := true; reg.CloseKey; end; end; end; end; finally reg.Free; end; end; end; Die Verknüpfung und die Beschreibung werden auch brav gesetzt, nur mit dem Iconindex scheint es zu hapern, statt das Icon aus meiner Anwendung erstellt Windows nun selbst eins (sieht aus wie ein weises Blatt auf dem das Haupticon meiner Anwenung zu sehen ist). Was mach ich oben falsch ? Gruß Christian |
Re: Frage zu TRegistry
ganz lieb *push*
|
Re: Frage zu TRegistry
Schließe die Keys an der richtigen Stelle, also nach dem Öffnen/Schließen der Subkeys
|
Re: Frage zu TRegistry
Ungetestet:
Delphi-Quellcode:
Wobei sich meine Hilfe dazu ausschweigt, ob jedes OpenKey ein neues Handle anfordert und behält. Falls nicht, würde auch das letzte CloseKey genügen.
function InstallExt(Extension, ExtDescription, FileDescription,
OpenWith, ParamString: string; IconIndex: Integer = 0): boolean; var reg: TRegistry; begin result := false; if Extension <> '' then begin if Extension[1] <> '.' then Extension := '.' + Extension; reg := TRegistry.Create; try reg.RootKey := HKEY_CLASSES_ROOT; if reg.OpenKey(Extension, true) then begin reg.WriteString('', ExtDescription); if reg.OpenKey('\' + ExtDescription, true) then begin reg.WriteString('', FileDescription); if reg.OpenKey('DefaultIcon', true) then begin reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex])); if reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', true) then begin reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString])); result := true; reg.CloseKey; end; reg.CloseKey; end; reg.CloseKey; end; reg.CloseKey; end; finally reg.Free; end; end; end; |
Re: Frage zu TRegistry
kleiner tipp:
setze doch deine Registry anweisungen in einen try finally block also so:
Delphi-Quellcode:
dann werden sie schlüssel auf jeden fall wieder gschlossen
try
OpenKey(...); Blub; Foo; finally Closekey; und es ist recht übersichtlich! :) gruß |
Re: Frage zu TRegistry
@DeddyH
Wenn ich mit OpenKey ein Schlüssel öffne, dann verschwinden doch aber die Infos über den bisherigen key oder merkt sich reg alle geöffneten Schlüssel ? Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 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