2.) Nein, OpenKey gibt aber einen Boolean zurück. Und nur wenn dieser True ist sollte man die Folgeanweisungen ausführen.
1.)
so sieht der aktuelle source aus.
Delphi-Quellcode:
RootKey := HKEY_CLASSES_ROOT;
OpenKey(Extension, True);
WriteString('', ExtDescription);
CloseKey;
OpenKey('\' + ExtDescription, True);
WriteString('', FileDescription);
CloseKey;
OpenKey('DefaultIcon', True);
WriteString('', OpenWith + ','+IntToStr(IconIndex));
CloseKey;
OpenKey('\' + ExtDescription + '\Shell\Open\Command', True);
WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
CloseKey;
und so wärs besser
Delphi-Quellcode:
//Root zweit auf HKEY_CLASSES_ROOT setzen
RootKey := HKEY_CLASSES_ROOT;
//Versuche den Zweig Extension zu öffnen, notfalls vorher erstellen
if OpenKey(Extension, True) then
begin
//Standardwert des Zweiges den Wert ExtDescription zuweisen
WriteString('', ExtDescription);
//Zweig schließen
CloseKey;
//Versuche den Zweig ExtDescription zu öffnen, notfalls vorher erstellen
if OpenKey('\' + ExtDescription, True) then
begin
//Standardwert des Zweiges auf den Wert FileDescription setzen
WriteString('', FileDescription);
//Zweig schließen
CloseKey;
//Versuche den Unterzweig 'DefaultIcon' zu öffnen, notfalls vorher anlegen
if OpenKey('DefaultIcon', True) then //besser wäre: if OpenKey('\' + ExtDescription + '\DefaultIcon', True) then
begin
//Standardwert von DefaultIcon auf: OpenWidth + ',' + IconIndex setzen
WriteString('', OpenWith + ','+IntToStr(IconIndex));
//Zweig schließen
CloseKey;
//Wieder einen Zweig öffnen und gegebenfalls erstellen
if OpenKey('\' + ExtDescription + '\Shell\Open\Command', True) then
begin
//Standardwert des geöffneten Zweigs schreiben
WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
//geöffneten Zweig schließen
CloseKey;
end;
end;
end;
end;
Zudem sind die Variablennamen (vor allem IconIndex) selbsterklärend benannt so das du da den Ansatz finden solltest.
hier gibts die Funktion nochmal richtig wie sie sein sollte (abgesehen von dem relativen Pfad von DefaultIcon):
http://www.delphipraxis.net/internal...=701965#701965