我自己写了个应用程序,可以打开自己定义的文件格式,现在在实现一般的文件关联后,我想知道如何将我双击的文件名作为参数传递给我的程序并让它打开文件?就象双击DOC文件会启动WORD并打开文件一样.请高手指点!

解决方案 »

  1.   

    是不是在run底下的parameter底下进行设置参数?
      

  2.   


      在窗体中放置一个按钮,双击按钮写如下代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     lphKey: HKEY;
     sKeyName: string;
     sKeyValue: string;
    begin
     sKeyName := 'myfile';
     sKeyValue := '我的文档';
     RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey);
     RegSetValue(lphKey, '', REG—SZ, pchar(sKeyValue), 0);
     sKeyName := '.xyz';
     sKeyValue := 'myfile';
     RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey);
     RegSetValue(lphKey, '', REG—SZ, pchar(sKeyValue), 0);
     sKeyName := 'myfile';
     sKeyValue := 'c:\Windows\NotePad.exe %1';
     RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey);
     RegSetValue(lphKey, 'shell\open\command', REG—SZ, pchar(sKeyValue), MAX—PATH);
    end;  建立一新文件,使其扩展名为.xyz,然后双击它看是否是启动记事簿来打开的。
      

  3.   

    procedure SetFileOpener(FileKind, FileDescription, FileExt, OpenerPath: String);
    如 //SetFileOpener('xyz文件', 'xyz文件类型', '.xyz', 'd:\winnt\NOTEPAD.EXE');
    var  
      lphKey: HKEY;
    begin
      RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileKind), lphKey);
      RegSetValue(lphKey, '', REG_SZ, PChar(FileDescription), Length(FileDescription));
      RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileKind), lphKey);
      RegSetValue(lphKey, 'shell\open\command', REG_SZ, PChar(OpenerPath), Length(OpenerPath));
      RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileExt), lphKey);
      RegSetValue(lphKey, '', REG_SZ, PChar(FileKind), Length(FileKind));
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  4.   

    楼上说得建立关联是对的,然后你的程序中处理就是了ParamStr(1)就是双击的文件名称
      

  5.   

    ParamStr(1)在哪里获得并处理?
      

  6.   

    这个帖子发出很久了,一直没有得到答案,各位帮帮忙!
    我自己写的AAA.EXE关联扩展名为.abc的文件后,双击.abc文件后应该打开我的AAA.EXE,请问如果AAA.EXE文件中有一个EDIT控件,如何能在启动后就在EDIT控件里面显示双击的文件名路径?
    这涉及到带参数的EXE文件如何处理的问题,我不知道如何实现。
    多写各位!100分送上!
      

  7.   

    文件类型的关联在Windows 95以后都是通过注册表来实现的,所以只能从写注册表入手。
    注册表设置完毕后并不能立刻生效,需要调用API函数SHChangeNotify通知系统本应用程序已经执行,需要系统更新Shell。procedure RegisterFileType(cMyExt,cMyFileType,cMyDescription,ExeName:string;
                              IcoIndex:integer;
                              DoUpdate:boolean=false);
    var
      Reg: TRegistry;
    begin
      Reg:=TRegistry.Create;
      try
        Reg.RootKey:=HKEY_CLASSES_ROOT;
        Reg.OpenKey(cMyExt, True);
        //写入自定义文件后缀
        Reg.WriteString('', cMyFileType);
        Reg.CloseKey;
        //写入自定义的文件类型
        //格式为:HKEY_CLASSES_ROOT\cMyExt\(Default) = 'cMyFileType'    //下面为该文件类型创建关联
        Reg.OpenKey(cMyFileType, True);
        Reg.WriteString('', cMyDescription);
        //写入文件类型的描述信息
        Reg.CloseKey;    // 下面为自定义文件类型选择图标
        // 加入键格式为 HKEY_CLASSES_ROOT\cMyFileType\DefaultIcon
        //  \(Default) = 'Application Dir\Project1.exe,0'
        Reg.OpenKey(cMyFileType + '\DefaultIcon', True);
        Reg.WriteString('', ExeName + ',' + IntToStr(IcoIndex));
        Reg.CloseKey;    // 下面注册在资源管理器中打开文件的程序
        Reg.OpenKey(cMyFileType + '\Shell\Open', True);
        Reg.WriteString('', '&Open');
        Reg.CloseKey;    //  格式:HKEY_CLASSES_ROOT\Project1.FileType\Shell\Open\Command
        //  (Default) = '"Application Dir\Project1.exe" "%1"'
        Reg.OpenKey(cMyFileType + '\Shell\Open\Command', True);
        Reg.WriteString('', '"' + ExeName + '" "%1"');
        Reg.CloseKey;    //最后,让资源管理器实现我们加入的文件类型,只需调用SHChangeNotify即可
        if DoUpdate then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
      finally
        Reg.Free;
      end;
    end;
      

  8.   

    如何能在启动后就在EDIT控件里面显示双击的文件名路径?
      

  9.   

    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Form1.edit1.Text  := ParamStr(1);
      Application.Run;
    end.
      

  10.   

    TO:kuangning(郎之间)
    我试试看,非常感谢,好用送分!