Yo en alguna ocasión he itilizado este código (no es mío):
Código Delphi
[-]procedure RegisterFileTypeEx(cMyExt, cMyFileType, cMyDescription, ExeName: string;
sIconPath:string; sIconNumber:Integer; DoUpdate: boolean = false);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(cMyExt, True);
Reg.WriteString('', cMyFileType);
Reg.CloseKey;
Reg.OpenKey(cMyFileType, True);
Reg.WriteString('', cMyDescription);
Reg.CloseKey; Reg.OpenKey(cMyFileType + '\DefaultIcon', True);
if (sIconPath = '') then begin
Reg.WriteString('', ExeName + ',' + IntToStr(sIconNumber));
end
else begin
Reg.WriteString('', sIconPath);
end;
Reg.CloseKey;
Reg.OpenKey(cMyFileType + '\Shell\Open', True);
Reg.WriteString('', '&Open');
Reg.CloseKey;
Reg.OpenKey(cMyFileType + '\Shell\Open\Command', True);
Reg.WriteString('', '"' + ExeName + '" "%1"');
Reg.CloseKey;
if DoUpdate then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
finally
Reg.Free;
end;
end;
Y la llamada era similar a esta:
Código Delphi
[-] RegisterFileTypeEx(STR_EXT, STR_DESC_CNN,
STR_DESC_CNN,
Application.ExeName,
IcoName, 2, True);
Los parámetros eran los siguientes:
* STR_EXT la extensión con la forma '.CNN';
* STR_DESC_CNN es una cadenas descriptiva tipo esta: 'Fichero de conexión'
* IcoName es el path donde está el icono a asociar.