Obtener el programa asociado a una extensión
Artículo por Club Developers · 31 diciembre 2005
5549 vistas
			
		Puede que a veces nos interese saber qué programa está asociado a una determinada extensió. Para ello tendremos que actuar como explicamos a continuación
Tendremos que añadir en el uses la siguiente declaración:
 
y la función será
 
Para terminar veamos un ejemplo de llamada
 
		
		Tendremos que añadir en el uses la siguiente declaración:
delphi
uses
{$IFDEF WIN32}
Registry; {We will get it from the registry}
{$ELSE}
IniFiles; {We will get it from the win.ini file}
{$ENDIF}
{$IFNDEF WIN32}
const MAX_PATH = 144;
{$ENDIF}
y la función será
delphi
function GetProgramAssociation(Ext: string) : string;
var
{$IFDEF WIN32}
reg: TRegistry;
s: string;
{$ELSE}
WinIni: TIniFile;
WinIniFileName: array[0..MAX_PATH] of char;
s: string;
{$ENDIF}
begin
{$IFDEF WIN32}
s := '';
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
if reg.OpenKey('.' + ext + '\shell\open\command', false) <> false then
begin
{ The open command has been found }
s := reg.ReadString('');
reg.CloseKey;
end
else
begin
{perhaps thier is a system file pointer}
if reg.OpenKey('.' + ext, false) <> false then
begin
s := reg.ReadString('');
reg.CloseKey;
if s <> '' then
begin
{A system file pointer was found}
if reg.OpenKey(s + '\shell\open\command', false) <> false then
{The open command has been found}
s := reg.ReadString('');
reg.CloseKey;
end;
end;
end;
{Delete any command line, quotes and spaces}
if Pos('%', s) > 0 then
Delete(s, Pos('%', s), length(s));
if ((length(s) > 0) and (s[1] = '"')) then
Delete(s, 1, 1);
if ((length(s) > 0) and (s[length(s)] = '"')) then
Delete(s, Length(s), 1);
while ((length(s) > 0) and ((s[length(s)] = #32) or (s[length(s)] = '"'))) do
Delete(s, Length(s), 1);
{$ELSE}
GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));
StrCat(WinIniFileName, '\win.ini');
WinIni := TIniFile.Create(WinIniFileName);
s := WinIni.ReadString('Extensions', ext, '');
WinIni.Free;
{Delete any command line}
if Pos(' ^', s) > 0 then
Delete(s, Pos(' ^', s), length(s));
{$ENDIF}
Result := s;
end;
Para terminar veamos un ejemplo de llamada
delphi
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage( GetProgramAssociation('gif') );
end;



