Leyendo las asociaciones de archivo del Registro de Windows para deteminar la aplicación que está asociada con la extensión de archivo de un documento dado

Determinando la aplicación asociada

Copyright © 2000 Ernesto De Spirito

InstallAWARE - MSI sin ciencia espacial

¿Dónde está esa información?

Las aplicaciones asociadas con extensiones de archivo se guardan en el Registro de Windows. Para obtener esta información primero debemos obtener la "clase" a la que una extensión pertenece. Esta información se encuentra en:

HKEY_CLASSES_ROOT\.ext\(predeterminado)

donde ".ext" es la extensión de fichero que uno quiera (como ".txt", ".bmp", etc.). Luego obtenemos la línea de comandos usada para abrir esa clase de archivos. Para hacerlo, obtenemos el valor bajo:

HKEY_CLASSES_ROOT\clase\Shell\Open\Command\(predeterminado)

donde "clase" es la clase de archivo a la que está asociada una extensión. Esa cadena usualmente tiene la forma:

"D:\PATH\APPNAME.EXT" "%1" -OPTIONS

donde %1 es el indicador de posición del documento a abrir con la aplicación, así que buscamos su posición dentro de la cadena y lo sustituimos por el nombre del fichero ingresado en el cuadro de texto para obtener la línea de comando que necesitamos para abrir la aplicación.

Ejemplo

La siguiente función devuelve la línea de comando de la aplicación asociada para abrir un archivo de documento:

uses Registry, Windows, SysUtils;

function GetAssociation(const DocFileName: string): string;
var
  FileClass: string;
  Reg: TRegistry;
begin
  Result := '';
  Reg := TRegistry.Create(KEY_EXECUTE);
  Reg.RootKey := HKEY_CLASSES_ROOT;
  FileClass := '';
  if Reg.OpenKeyReadOnly(ExtractFileExt(DocFileName)) then begin
    FileClass := Reg.ReadString('');
    Reg.CloseKey;
  end;
  if FileClass <> '' then begin
    if Reg.OpenKeyReadOnly(FileClass
       + '\Shell\Open\Command') then
    begin
      Result := Reg.ReadString('');
      Reg.CloseKey;
    end;
  end;
  Reg.Free;
end;
JfControls Library - para Delphi y C++ Builder