FAQ一覧へ インデックスへ

拡張子を関連付ける


質問

 ファイルの拡張子を自分のアプリケーションに関連付けるにはどうしたら
よいのでしょうか。



答え

 拡張子の関連付けはレジストリによって管理されています。

HKEY_CLASSES_ROOT
             ├拡張子(例:「.ext」)←ここにデータ格納先が入ります。
             │           (例:「ext_auto_file」)
             │
             └データ格納先(例:「ext_auto_file」)
                └shell            ↑ここにファイルの種類が入ります。
                    └open
                        └command←ここにコマンドラインが入ります。
                                   (例:「c:\Window\Notepad.exe "%1"」)
                                                                 ↑
              (*注)| エクスプローラから自動で関連付けした場合、ここ|
                   |を「"」で括りませんが、ファイルが空白を含むパス |
                   |にあった場合コケますので「"」で括りましょう。   |
                   |この「%1」が関連付けられるファイル名となります。|


 つまり上記のレジストリを書き込むコードが必要になります。



uses
    Registry;

...............

var
   Reg: TRegistry;
begin
     MessageBeep(MB_ICONQUESTION);
     if MessageDlg('××ファイルをこのソフトに関連付けますか?',
                   mtConfirmation,mbYesNoCancel,0)<> mrYes then exit;
     Reg:= TRegistry.create;
     with Reg do begin
          try
             RootKey:= HKEY_CLASSES_ROOT;

             OpenKey('.ext', true);
             WriteString('', 'ext_auto_file');
             CloseKey;

             OpenKey('ext_auto_file', true);
             WriteString('', '××ファイル');
             CloseKey;

             OpenKey('ext_auto_file\shell\open\command', true);
             WriteString('', ParamStr(0)+ ' "%1"');
             CloseKey;
          finally
             free;
          end;
     end;
     MessageBeep(MB_ICONASTERISK);
     MessageDlg('拡張子「EXT」をこのソフトに関連付けました。'+ chr($A)+
                'これ以降××ファイルをダブルクリックするだけで'+ chr($A)+
                'このソフトが自動的に起動します。',mtInformation,[mbOk],0);
end;