我正在使用Delphi 6(是的,我知道,但是我是老学校)。
我对TShellExecuteInfo
有疑问。我想运行以下命令:C:\delphi\bin\Convert.exe -b-i
加上一个参数字符串(文件夹和文件名)。
如果我将-b-i
放在Executeinfo.lpfile
之后,则ShellExecuteEx()
找不到Convert.exe
,如果我将其放在Paramstring
中,则{{1 }}找不到文件。
我已经花了3天时间,希望您能帮上忙。
顺便说一句,为什么Delphi突然开始将我的文件另存为文本?
答案 0 :(得分:3)
您完全不应为此使用ShellExecuteEx()
。该功能用于执行文档文件,而不是运行应用程序。您应该改用CreateProcess()
。只需将整个命令传递到其lpCommandLine
参数即可,例如:
procedure ConvertFile(const FileName: string);
var
Cmd: string;
Si: TStartupInfo;
Pi: TProcessInformation;
begin
Cmd := 'C:\delphi\bin\Convert.exe -b -i ' + AnsiQuotedStr(FileName, '"');
ZeroMemory(@Si, Sizeof(Si));
Si.cb := Sizeof(Si);
if not CreateProcess(nil, PChar(Cmd), nil, nil, False, 0, nil, nil, Si, Pi) then
RaiseLastOSError;
try
//...
finally
CloseHandle(Pi.hThread);
CloseHandle(Pi.hProcess);
end;
end;