试一下这个functionfunction WinExecAndWait32(FileName:string;visibility:Integer):integer; var zAppName:array[0..512] of char; zCurDir:array[0..255] of char; workDir:string; startUpInfo:TStartupInfo; ProcessInfo:TProcessInformation; i:DWord; begin
StrPCopy(zAppName,FileName); FillChar(StartupInfo,sizeof(StartUpInfo),#0); StartupInfo.cb:=sizeOf(StartUpInfo); StartUpInfo.dwFlags:=STARTF_USESHOWWINDOW; StartUpInfo.wShowWindow:=Visibility; if not CreateProcess(nil,zAppName,nil,nil,false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,nil,StartupInfo,ProcessInfo ) then Result:=-1 else begin WaitforSingleObject(ProcessInfo.hProcess,INFINITE); GetExitCodeProcess(ProcessInfo.hProcess,i); Result:=i; end; end;这个函数能先运行fileName文件并等待,只是无法判别你按了取消
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
workDir:string;
startUpInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
i:DWord;
begin
StrPCopy(zAppName,FileName);
FillChar(StartupInfo,sizeof(StartUpInfo),#0);
StartupInfo.cb:=sizeOf(StartUpInfo); StartUpInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow:=Visibility; if not CreateProcess(nil,zAppName,nil,nil,false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil,nil,StartupInfo,ProcessInfo ) then
Result:=-1
else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,i);
Result:=i;
end;
end;这个函数能先运行fileName文件并等待,只是无法判别你按了取消
后台开个循环,监视第一个程序的执行情况,如果取消就不执行第二个
close;