调用DOS程序在后台运行(80分)

  • 主题发起人 主题发起人 dagang
  • 开始时间 开始时间
D

dagang

Unregistered / Unconfirmed
GUEST, unregistred user!
;DELPHI调用DOS程序在后台运行,怎样知道它已执行完毕,然后再关闭DOS窗口
(隐藏,但在系统中存在的那个东东)
谢谢
 
function WinExecAndWait32(FileName:String; Visibility : integer): DWORD;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;

StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security attributes }

nil, { pointer to thread security attributes }
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then Result := $FFFFFFFF { pointer to PROCESS_INF }

else
begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess,Result);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
WinExecAndWait32('COMMAND.COM /C COPY C:/AUTOEXEC.BAT D:/', SW_HIDE);
ShowMessage('FINISNED');
end;
 
写信Croco .如果调用的程序运行正确,该办法是可行的,但是
我有进一步的要求:调用的DOS程序出错之后,KILL掉它.怎样识别
它出错? 怎样强制KILL?
 
不好意思,笔误。
谢谢Croco
 
由于process是自己创建的,所以调用api的TerminateProcess
 
一、识别出错好象没什么办法。
二、强制杀掉该进程:同意 Kill Night,但显然应由其它程序完成。参看:
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=252313
 
假如我等待一定时间,然后不管它是否完成都杀掉它。怎么‘等待’
 
多人接受答案了。
 
后退
顶部