Cita:
Empezado por soul6301
¿Cómo logro asociar un tipo de archivo a mi programa desde un programa hecho en Delphi
|
Simplemente debes escribir las entradas apropiadas en el registro. Por ejemplo, vamos a suponer que deseas asociar la extensión '.rom' a la aplicación 'RmDesigner.exe'. Deberás crear las siguientes entradas:
Código:
HKCR\.rom
default value = 'RmDesigner.rom'
HKCR\RmDesigner.rom
default value = 'Rm Designer master file'
HKCR\RmDesigner.rom\shell\open\command
default value = 'c:\archivos de programas\roman software\RmDesigner.exe "%1"'
Aquí, HKCR corresponde a HKEY_CLASSES_ROOT. Bajo esta clave se crea la clave '.rom' cuyo valor por defecto es el nombre de la clave que realmente maneja la extensión; en este caso 'RmDesigner.rom', pero puedes usar cualquier identificador que gustes.
La siguiente clave es entonces 'RmDesigner.rom' cuyo valor por defecto será la descripción que desees que aparezca en el explorador; en este caso 'Rm Designer master file'. Si no pones nada, el explorador mostrará simplemente algo como 'Archivo ROM'.
Dentro de esta clave debes crear la clave 'shell\open\command', esto es, la clave 'shell', dentro de ella la clave 'open' y dentro de ella la clave 'command'.
El valor por defecto de la clave 'command' debe contener la ruta al ejecutable; en este caso 'c:\archivos de programas\roman software\RmDesigner.exe "%1"'. El símbolo %1 será sustituído por la línea de comandos, esto es, cuando se ejecute un archivo de extensión 'rom' el explorador pasará el nombre del archivo como parámetro al ejecutable.
Te recomiendo que antes de comenzar a experimentar husmees un poco en el registro para ver cómo funciona esto que te digo para extensiones ya registradas como, por ejemplo, '.txt'. Verás que cada clave tiene otros valores pero por el momento basta con los que te indico.
Para escribir estas claves en el registro desde tu aplicación Delphi puedes usar la clase TRegistry de la unidad Registry. Te pongo aquí un pequeño ejemplo:
Código Delphi
[-]
procedure RegisterFileExt(Ext, TypeName, Description, AppPath: String);
var
Registry: TRegistry;
begin
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_CLASSES_ROOT;
Registry.OpenKey(Ext, true);
Registry.WriteString('', TypeName);
Registry.CloseKey;
Registry.OpenKey(TypeName, true);
Registry.WriteString('', Description);
Registry.OpenKey('shell\open\command', true);
Registry.WriteString('', AppPath + ' "%1"');
finally
Registry.Free;
end;
end;
Así, para el ejemplo anterior usarías:
Código Delphi
[-]
RegisterFileExt(
'.rom',
'RmDesigner.rom',
'Rm Designer Master file',
'c:\archivos de programas\roman software\RmDesigner.exe'
);
// Saludos