Resulta que el hilo recomendado por Seoane es exactamente lo que busco, pero, la primera parte de la respuesta no la entiendo del todo, como describo arriba, encuentro tres variable que no comprendo bien su significado y no se por que sustituirlas en mi código, no obstante con la segunda parte de la respuesta, del hilo recomendado, que no debería funcionar, funciona gracias a que al ejecutar uno de los archivos creados por mi programa le “digo al SO” que lo habrá con mi programa y a partir de ahí ya se reconoce permanentemente el vínculo entre mi programa y el tipo de archivo creado, esto es con Windows XP. Pero lógicamente esta no es la solución definitiva.
Por lo que agradecería mucho quien me pudiera describir con un poco de detalles el significado dentro del procedimiento siguiente de las tres variables que menciono.
Código Delphi
[-]
procedure AsociarExtension(extension: string);
var
reg: TRegistry;
temp, tipo: string;
begin
tipo := rsProyecto + Copy(UpperCase(extension), 2, Length(extension));
reg := TRegistry.Create;
try
with reg do begin
RootKey := HKEY_CLASSES_ROOT;
OpenKey(extension, true);
temp := ReadString(EmptyStr);
WriteString(EmptyStr, tipo);
CloseKey;
OpenKey(tipo + '\shell\open\command', true);
WriteString(EmptyStr, ParamStr(0) +' "%1"');
CloseKey;
OpenKey(tipo + '\DefaultIcon', true);
WriteString(EmptyStr, ParamStr(0) +',0');
CloseKey;
if (temp <> EmptyStr) and (temp <> tipo) then
begin
RootKey := rsRegRoot;
OpenKey(rsRegExtensiones +rsBarraIzq+ extension, true); WriteString(EmptyStr, temp);
CloseKey;
end;
end;
finally
reg.Free;
end;
end;
procedure DesasociarExtension(extension: string);
var
reg: TRegistry;
temp, tipo: string;
begin
temp := EmptyStr;
tipo := rsProyecto + Copy(UpperCase(extension),
2, Length(extension));
reg := TRegistry.Create;
try
with reg do begin
RootKey := rsRegRoot;
OpenKey(rsRegExtensiones +rsBarraIzq+ extension, false);
temp := ReadString(EmptyStr);
CloseKey;
DeleteKey(rsRegExtensiones +rsBarraIzq+ extension);
RootKey := HKEY_CLASSES_ROOT;
OpenKey(extension, false);
WriteString(EmptyStr, temp);
CloseKey;
DeleteKey(tipo);
end;
finally
reg.Free;
end;
end;
Disculpen la ignorancia pero a los principiantes nos sucede no pocas veces.
Gracia por adelantado.