var fn: string;begin
fn:='C:\Program Files\123.iso';   //注意有空格   fn是变量 值来源于变量 ShellExecute(handle, 'open', pchar(apppath + '\VTD.exe'), pchar(fn), nil, SW_SHOWNORMAL);然后 vtd.exe 里接收     fn := ParamStr(1);  成了 'C:\Program' 请教如何解决呢? 如果加双引号可以 如何给变量 fn  加双引号呢 ?

解决方案 »

  1.   

    ShellExecute(handle, 'open', pchar(apppath + '\VTD.exe'), pAnsichar(fn), nil, SW_SHOWNORMAL); 
    再就看不出有什么问题了
      

  2.   

    我的问题是这样的:
    做了两个程序 程序A start.exe  和 程序B vtd.exe在 A里 ShellExecute(handle, 'open', pchar(apppath + '\VTD.exe'), pchar(fn), nil, SW_SHOWNORMAL); 来调用 B  B 来接收 fn  可 fn 含有空格  这样  B  ParamStr(1)接收后 变成了 'C:\Program' 也就是说  delphi  用空格 解析命令行参数的  如何解决?
    不知道我说清楚没有
      

  3.   

    fn:='"C:\Program Files\123.iso"';  
    ShellExecute(handle, 'open', pchar('"'+apppath + '\VTD.exe"'), pAnsichar(fn), nil, SW_SHOWNORMAL); 
      

  4.   

    fn:=' "C:\Program Files\123.iso" '; 
    加双引号 
      

  5.   

    fn  是变量 不是一个固定的 字符串 怎么给 fn  加上" " 呢 ?
      

  6.   

    fn:='C:\Program Files\123.iso';
    fn:='"'+fn+'"'  ;
    加双引号 
      

  7.   

    不行呀  加了        ShellExecute(handle, 'open', pchar( apppath + '\VTD.exe'), pchar('''' + fn + ''''), nil, SW_SHOWNORMAL);vtd.exe 里 获得的ParamStr(1) 还是不全 被空格截取了
      

  8.   


    function ParamStr(Index: Integer): string;
    var
      s: TStringList;
    begin
      s := TStringList.Create;
      s.Delimiter := ' ';
      s.DelimitedText := GetCommandLine;
      try
        Result := s.Strings[index];
      except
        Result := '';
      end;
      s.Free;
    end;
    自己写个了,当初就是被郁闷了把,找不到原因,就速度写了个。
      

  9.   

    pchar('"'+apppath + '\VTD.exe"')
    楼主你要仔细点看
      

  10.   

    楼主确实没看清楚var
      fn: string;
    begin
      fn:='"C:\Program Files\123.iso"';
      ShellExecute(handle, 'open', PChar('"'+apppath + '\VTD.exe"'), PChar(fn), nil, SW_SHOWNORMAL);
    end;
      

  11.   

    fn:='"C:\Program Files\123.iso"';
    这红色的部分是双引号("),而不是两个单引号('')
      

  12.   

    第一步:
     把fn:='C:\Program Files\123.iso'; 改为:fn:='123.iso'; 第二步: 在ShellExecute前面加一句:SetCurrentDir('C:\Program Files');第三步: 成功,结贴吧。
      

  13.   

    修改当前路径的后果是什么?
    ParamStr(1)得到的结果又是什么?
    万一代码当中都如此,那在别处又使用一个SetCurrentDir('d:\temp'),那还能用吗?
      

  14.   

    SetCurrentDir('C:\Program Files')还改变了当前应用程序的路径,那你不如在ShellExecute的倒数第二个参数当中带路径?如果在应用程序当中需要接收两个带路径的文件参数呢?比如Copy x to y类似
      

  15.   


    “在ShellExecute的倒数第二个参数当中带路径?”此法不行。ShellExecute带路径运行文件的时候,路径不能包括空格。解决办法就是更改当面默认路径,如果不用这种办法,您是否有更好的办法?
      

  16.   

    不好意思 两天没来 看到这么多回复  首先谢谢大家 原来 delphi  ShellExecute 传递命令行参数 默认是以 space 分割的  ParamStr(1) 只会取的部分参数 
    就像大家说的 最简单的方法 是加上 "  "  这样delphi  就会把 fn  当成一个参数传递了 。 
    能看到这么多人气 真是高兴 分开少了