如果外部程序不需要等待输入, 可以用下面代码: ======================== 转自超级猛料, 执行一个外部程序并等待它完成Function WinExecExW(cmd,workdir:pchar;visiable:integer):DWORD; var StartupInfo:TStartupInfo; ProcessInfo:TProcessInformation; begin FillChar(StartupInfo,SizeOf(StartupInfo),#0); StartupInfo.cb:=SizeOf(StartupInfo); StartupInfo.dwFlags:=STARTF_USESHOWWINDOW; StartupInfo.wShowWindow:=visiable; if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then result:=0 else begin waitforsingleobject(processinfo.hProcess,INFINITE); GetExitCodeProcess(ProcessInfo.hProcess,Result); end; end;
可以的,测试代码如下,稍微改了一下 ============================================== Function WinExecExW(cmd,workdir:pchar;visiable:Word):DWORD; var StartupInfo:TStartupInfo; ProcessInfo:TProcessInformation; begin FillChar(StartupInfo,SizeOf(StartupInfo),#0); StartupInfo.cb:=SizeOf(StartupInfo); StartupInfo.dwFlags:=STARTF_USESHOWWINDOW; StartupInfo.wShowWindow:=visiable; if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then result:=$ffff else begin waitforsingleobject(processinfo.hProcess,INFINITE); GetExitCodeProcess(ProcessInfo.hProcess,Result); end; end;procedure TForm1.Button1Click(Sender: TObject); var r : DWORD; begin r := WinExecExW('COMMAND.COM /C COPY C:\aaa.txt D:\','',SW_HIDE); if r=0 then Application.MessageBox('运行完毕','',MB_OK); end;
可以用下面代码:
========================
转自超级猛料,
执行一个外部程序并等待它完成Function WinExecExW(cmd,workdir:pchar;visiable:integer):DWORD;
var
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
FillChar(StartupInfo,SizeOf(StartupInfo),#0);
StartupInfo.cb:=SizeOf(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=visiable;
if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then
result:=0
else
begin
waitforsingleobject(processinfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;
==============================================
Function WinExecExW(cmd,workdir:pchar;visiable:Word):DWORD;
var
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
FillChar(StartupInfo,SizeOf(StartupInfo),#0);
StartupInfo.cb:=SizeOf(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=visiable;
if not CreateProcess(nil,cmd,nil,nil,false,Create_new_console or Normal_priority_class,nil,nil,StartupInfo,ProcessInfo) then
result:=$ffff
else
begin
waitforsingleobject(processinfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
r : DWORD;
begin
r := WinExecExW('COMMAND.COM /C COPY C:\aaa.txt D:\','',SW_HIDE);
if r=0 then
Application.MessageBox('运行完毕','',MB_OK);
end;