어떤 확장자에 연결된 프로그램이 있는지 알아보는 함수.

실은 델마당에서 누군가의 글에 답글로 달려다가 다른 방법을 먼저 올린 사람이 있어서 그냥 내 블로그에 남김..-_-;

 

포인트는 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\ 라는 레지스트리 키 하나일 뿐이다...

 

 

uses
  Registry;

 

 


function CheckExtApplication(Ext: String): String;
const
  EXT_KEY='Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\';

 

var
  Reg: TRegistry;
  i: Integer;
  sList: TStringList;

 

begin
  Result:='';

 

  Reg:=TRegistry.Create;
  try
    Reg.RootKey:=HKEY_CURRENT_USER;

 

    // 키가 (읽을 수) 없다면 관둠
    if not Reg.OpenKeyReadOnly(EXT_KEY+'.'+Ext) then Exit;

 

    // 만약 Application 이라는 값이 있다면 그 놈이 직빵 연결 프로그램
    if Reg.ValueExists('Application') then Result:=Reg.ReadString('Application')
    // 없다면 OpenWithList 를 뒤짐
    else begin
      Reg.CloseKey;
      // 키가 (읽을 수) 없다면 관둠
      if not Reg.OpenKeyReadOnly(EXT_KEY+'.'+Ext+'\OpenWithList') then Exit;

 

      // ValueName 을 다 받아와서 가장 우선순위가 높다고 생각되는(-_-)
      // a 의 Data 를 반환

      sList:=TStringList.Create;
      try
        Reg.GetValueNames(sList);
        for i:=0 to sList.Count-1 do begin
          if
sList[i]='a' then begin
            Result:=Reg.ReadString(sList[i]);
            break;
          end;
        end;
      finally
        FreeAndNil(sList);
      end; // try..finally
    end; // if ValueExists
  finally
    FreeAndNil(Reg);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  연결프로그램: String;
begin
  // 레지스트리에 있는 해당 확장자의 연결 프로그램을 받아옴.
  연결프로그램:=CheckExtApplication('pdf');

 

  // 이쯤에서 해당 파일이 실제로 있는지 (실제로 설치되어 있는지) 검사할 수도 있겠고...
end;

 

 

 

 

 



Posted by bloodguy
,