- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >


Frequently Asked Questions

Retrieving the program that is associated with a given extension

Question:

How can I retrieve the program that is associated with a given extension?

Answer:

The following example demonstrates retrieving the file associated

with a file extension.



Example:



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}



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;



procedure TForm1.Button1Click(Sender: TObject);

begin

  ShowMessage(GetProgramAssociation('gif'));

end;




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile