![]() |
Verknüpfung einer Dateiendung aktualisieren
Moin,
mit folgenden zwei Funktionen verknüpfe ich eine Dateiendung mit meinem Programm, bzw. lösche diese Verknüpfung:
Delphi-Quellcode:
Wenn ich nun, eine Verknüpfung lösche und direkt wieder neu erstelle (mit anderem Icon und anderer Beschreibung) oder die Verknüpfung nur lösche.
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; end; end; end; end; finally Reg.Free; end; end; end; function UnInstallExt(Extension: String): Boolean; var Reg: TRegistry; Description: String; begin Result := False; if Extension <> '' then begin if Extension[1] <> '.' then Extension := '.' + Extension; Reg := TRegistry.Create; try Reg.RootKey := HKEY_CLASSES_ROOT; if Reg.KeyExists(Extension) then begin Reg.OpenKey(Extension, false); Description:=Reg.ReadString(''); Reg.CloseKey; if Reg.KeyExists('\'+Description) then Result:=Reg.DeleteKey(Extension) and Reg.DeleteKey('\' + Description); end; finally Reg.Free; end; end; end; So funktioniert zwar die Verknüpfung wie sie es soll (oder eben nicht), aber die Dateien haben immernoch das alte Icon und die entsprechende Beschreibung, diese wird erst nach einem Neustart des Systems aktualisiert. Gibt es einen Api-Befehl um Windows zu veranlassen dies direkt zu aktualisieren ? Gruß |
Re: Verknüpfung einer Dateiendung aktualisieren
ShChangeNotify ist das Stichwort. Mit der Forensuche erhält man Folgendes:
Delphi-Quellcode:
ShChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil)
|
Re: Verknüpfung einer Dateiendung aktualisieren
Moin Christian,
die Struktur solltest Du aber noch mal überdenken. TRegistry.Free führt zwar auch einen CloseKey aus, aber die Betonung liegt hier auf einen ;-). Alle anderen bleiben geöffnet, bis das Programm wieder geschlossen wird. |
Re: Verknüpfung einer Dateiendung aktualisieren
Danke ShChangeNotify war genau was ich gesucht habe und funktioniert wunderbar.
@Christian Danke für den Hinweis, ich hab den Code vorhin mal kurz blind übernommen. Wusste allerdings auch nicht, dass Free nicht alle schließt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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