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 加双引号呢 ?
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 加双引号呢 ?
再就看不出有什么问题了
做了两个程序 程序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 用空格 解析命令行参数的 如何解决?
不知道我说清楚没有
ShellExecute(handle, 'open', pchar('"'+apppath + '\VTD.exe"'), pAnsichar(fn), nil, SW_SHOWNORMAL);
加双引号
fn:='"'+fn+'"' ;
加双引号
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;
自己写个了,当初就是被郁闷了把,找不到原因,就速度写了个。
楼主你要仔细点看
fn: string;
begin
fn:='"C:\Program Files\123.iso"';
ShellExecute(handle, 'open', PChar('"'+apppath + '\VTD.exe"'), PChar(fn), nil, SW_SHOWNORMAL);
end;
这红色的部分是双引号("),而不是两个单引号('')
把fn:='C:\Program Files\123.iso'; 改为:fn:='123.iso'; 第二步: 在ShellExecute前面加一句:SetCurrentDir('C:\Program Files');第三步: 成功,结贴吧。
ParamStr(1)得到的结果又是什么?
万一代码当中都如此,那在别处又使用一个SetCurrentDir('d:\temp'),那还能用吗?
“在ShellExecute的倒数第二个参数当中带路径?”此法不行。ShellExecute带路径运行文件的时候,路径不能包括空格。解决办法就是更改当面默认路径,如果不用这种办法,您是否有更好的办法?
就像大家说的 最简单的方法 是加上 " " 这样delphi 就会把 fn 当成一个参数传递了 。
能看到这么多人气 真是高兴 分开少了