我做了个小程序,知道怎样改注册表就可以把一类的扩展名的文件用这个文件打开,但怎样为这个程序传参数?
  例如:
      把*.abc用c:\1.exe打开,可已通过该注册表中的.abc项定义。但并不能告诉程序我要打开的那个文件,只能启动1.exe文件。
      请问怎样解决?
             谢谢!!!

解决方案 »

  1.   

    Delphi中有两个变量:
    paramcount用于返回命令行参数的个数
    paramstr数组用于存储命令行参数:if paramcount>1 then
    showmessage('第1个命令行参数为:'+paramstr(1));//注:paramstr(0)返回的是应用程序的全名//你只需解析paramstr(1)以后就可以了。
      

  2.   

    注册表+命令行;
    (*注册文件类型关联*)
    procedure RegisterFileType(ft,key,desc,icon,prg:string);
    var MyReg : TRegIniFile;
        ct : integer;
    begin
      ct := pos('.',ft);
      while ct > 0 do begin
           delete(ft,ct,1);
           ct := pos('.',ft);
      end;
      if (ft = '') or (prg = '') then Exit;
      ft := '.'+ft;
      MyReg := TRegIniFile.Create('');
      try
        MyReg.RootKey := HKEY_CLASSES_ROOT;
        if key = '' then key := Copy(ft,2,MaxInt)+'_auto_file';
        MyReg.writestring(ft,'',key);
        MyReg.writestring(key,'',desc);
        if icon <> '' then MyReg.writestring(key+'\DefaultIcon','',icon);
        MyReg.writestring(key+'\shell\open\command','',prg+' "%1"');
        SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
      finally
        MyReg.free;
      end;
    end;OnFormCreate:
      if GetRunTimes = 1 then begin//如果第一次运行
        RegisterFileType('.slib','SuperLib','SuperLib关联文件',ParamStr(0)+',0',ParamStr(0));
      end;
      if ParamCount<>0 then begin
        OpenExpFile(ParamStr(1));//自定义过程;
      end;
      

  3.   

    你需要做两个主要工作:
      1、在你的源程序里通过判断ParamCount(参数个数)ParamStr(参数列表函数)进行解析,然后对解析出的文件*.abc进行处理。
      2、注册你的程序。
      (1)在注册表HKEY_CLASSES_ROOT下建立主键 .abc 将其默认的字符串值设置为你的应用程序类 比如:MyAbc
      (2)在注册表HKEY_CLASSES_ROOT下建立主键MyAbc 建立如下主键
       DefaultIcon 将默认字符串值设置为程序图标路径
       shell-open-command 是3级主键 将command的默认字符串设置为““c:\1.exe”,“%1””
      至于代码方面 我想你自己可以完成了吧?
      

  4.   

    paramstr(1)返回的应用程序名后接的第一个参数!!!
      

  5.   

    s := '';
      for i := 1 to ParamCount do
      begin
        s := s + ParamStr(i) + ' ';
      end;
      if s <> '' then
      begin
        Memo1.Lines.LoadFromFile(s);
        CurFile := s;
        Caption := DefaultTitle + ' - ' + CurFile;
        Application.Title := Trim(ExtractFileName(s)) + ' - ' + DefaultTitle;
        SaveAlready := True;
        Modified := False;
      end;
      

  6.   

    paramstr(1)
    就是你要的文件名