Moin,
mit folgenden zwei Funktionen verknüpfe ich eine Dateiendung mit meinem Programm, bzw. lösche diese Verknüpfung:
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);
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;
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.
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ß