uses Registry;function SetAssociatedExec(FileExt, Filetype, FileDescription, MIMEType, ExecName: string): Boolean; {修改成功,返回True,否则False}
var Reg: TRegistry;
begin
  Result := False; {}
  if (FileExt = '') or (ExecName = '') then Exit; {如果文件类型为空或者没有定义执行程序就退出,FileExt必须带″.″,如.BMP}
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKey_Classes_Root;
    if not Reg.OpenKey(FileExt, True) then Exit; {当不能正确找到或创建FileExt键时退出,这种情况一般是注册表有错误,以下同}
    Reg.WriteString('', FileType);
    if MIMEType <> '' then Reg.WriteString('Content Type', MIMEType);
    Reg.CloseKey;
    if not Reg.OpenKey(FileType, True) then Exit;
    Reg.WriteString('', FileDescription);
    if not Reg.OpenKey('shell\open\command', True) then Exit;
    Reg.WriteString('', ExecName); {执行程序一般都有参数,例如WinZip的“winzip32.exe ″%1″”,″%1″参数指ZIP文件的文件名。因此ExecName应视情况加入参数}
    Reg.CloseKey;
  finally Reg.Free;
  end;
end;procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
  SetAssociatedExec('.abc', 'Project1', '', '',application.ExeName);
end;