如果关联了系统会自动用关联的应用程序打开相关文件的,你是怎么关联的?改注册表,请参考:
http://www.csdn.net/expert/Topic/0/627.shtm

解决方案 »

  1.   

    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
      s := application.ExeName;
      SetAssociatedExec(edit1.text, 'Project1', '', '', s);
    end;
      

  2.   

    多谢月光兄,但是我的程序怎么得到那个参数呢?比如程序里有一个memo用来显示文本,那么怎么知道那个文本文件的文件名呢?
      

  3.   

    procedure tform1.oncreate(sender:object);
    var filename:string;
    begin
    if paramcount>0 then
    filename:=paramstr(1);
    if fileexists(filename) then memo1.lines.loadformfile(filname);
    end;