어떤 확장자에 연결된 프로그램이 있는지 알아보는 함수.
실은 델마당에서 누군가의 글에 답글로 달려다가 다른 방법을 먼저 올린 사람이 있어서 그냥 내 블로그에 남김..-_-;
포인트는 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;
'Delphi' 카테고리의 다른 글
MSN 대화창 투명도 조절 (0) | 2009.04.18 |
---|---|
MSN 대화창 투명도 조절 (0) | 2009.04.18 |
[Delphi] 시작메뉴의 바로가기 파일을 뒤져서 원하는 바로가기 파일의 실행파일 변경하기 (0) | 2009.04.18 |
[Delphi] 로컬 파일의 날짜 가져오기 (0) | 2009.04.18 |
[Delphi] 윈도우 메세지를 받아먹는 3가지 방법 (6) | 2009.04.18 |