Moin Florian,
grundsätzlich müsste es funktionieren, allerdings sollte OpenWith auch im Key DefaultIcon in " eingeschlossen werden.
Sollten mehr solche Konstruktionen in Deinem Programm auftauchen, wird das System über kurz oder lang eine "Out of Resource" Meldung von sich geben, da die geöffneten Keys nicht wieder geschlossen werden.
Das Objekt wird, im Falle einer
Exception auch nicht freigegeben.
Man sollte bei bestehender Verknüpfung noch die Einstellungen für die alte sichern, und im Fehlerfalle restaurieren.
Da zu einer Dateitypverknüpfung auch noch mehr gehört als DefaultIcon und Shell\Open\Command, kann es auch nicht schaden dann einen bestehenden Key erst einmal zu löschen, bevor man die neuen Werte einträgt (wie gesagt, sichern nicht vergessen).
Ich hab's mal grob überarbeitet.
Delphi-Quellcode:
begin
Result := false;
Reg := TRegistry.Create;
try
with Reg do begin
RootKey := HKEY_CLASSES_ROOT;
if not OpenKey(Extension, True) then exit;
try
WriteString('', ExtDescription);
finally
CloseKey;
end;
if not OpenKey('\' + ExtDescription, True) then exit;
try
WriteString('', FileDescription);
finally
CloseKey;
end;
if not OpenKey('DefaultIcon', True) then exit;
try
WriteString('', '"'+OpenWith + '",'+IntToStr(IconIndex));
finally
CloseKey;
end;
if not OpenKey('\' + ExtDescription + '\Shell\Open\Command', True) then exit;
try
WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
finally
CloseKey;
end;
end;
finally
FreeAndNil(Reg);
end;
Result := true;
end;