Question and Answer Database FAQ801D.txt Retrieving the program that is associated with a given extension Category :Windows API Platform :All Product :All 32 bit 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; 7/16/98 4:31:28 PM
Last Modified: 01-SEP-99