Lenguaje de programación Borland Delphi
Las aplicaciones asociadas con extensiones de archivo se guardan en el Registro de configuraciones de Windows (Regedit). Esta información se encuentra en: HKEY_CLASSES_ROOT. Dentro de esta clave habrá una subclave por cada extensión con la información que necesitamos obtener en el valor "(Predeterminado)" se guarda la clase correspondiente a la aplicación que abre el fichero y para cada tipo de fichero también habrá una subclave dentro de HKEY_CLASSES_ROOT con la ruta del fichero ejecutable que abre dicha clase de ficheros (en HKEY_CLASSES_ROOT\NOMBRECLASE\Shell\Open\Command).
A continuación os mostramos un ejemplo completo en Delphi de dos funciones: una obtiene la ruta y el ejecutable de la aplicación asociada a la extensión y la otra obtiene el tipo de fichero de que se trata:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, registry;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function obtenerAplicacion (fichero : string) : string;
var
clase : string;
Reg: TRegistry;
begin
Result := '';
Reg := TRegistry.Create(KEY_EXECUTE);
Reg.RootKey := HKEY_CLASSES_ROOT;
clase := '';
if Reg.OpenKeyReadOnly(ExtractFileExt(fichero)) then
begin
clase := Reg.ReadString('');
Reg.CloseKey;
end;
if clase <> '' then
begin
if Reg.OpenKeyReadOnly(clase + '\Shell\Open\Command') then
begin
Result := Reg.ReadString('');
Reg.CloseKey;
end;
end;
Reg.Free;
end;
function obtenerTipoFichero (fichero : string) : string;
var
clase : string;
Reg: TRegistry;
begin
Result := '';
Reg := TRegistry.Create(KEY_EXECUTE);
Reg.RootKey := HKEY_CLASSES_ROOT;
clase := '';
if Reg.OpenKeyReadOnly(ExtractFileExt(fichero)) then
begin
clase := Reg.ReadString('');
Reg.CloseKey;
end;
if clase <> '' then
begin
if Reg.OpenKeyReadOnly(clase) then
begin
Result := Reg.ReadString('');
Reg.CloseKey;
end;
end;
Reg.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := obtenerAplicacion(Edit1.Text);
Edit3.Text := obtenerTipofichero(Edit1.Text);
end;
end.
Publicado el: 2003-10-05