顺序调用多个exe文件(50分)

  • 主题发起人 主题发起人 eonzhang
  • 开始时间 开始时间
E

eonzhang

Unregistered / Unconfirmed
GUEST, unregistred user!
我的主程序需要调用多个exe文件,而且这些exe文件调用顺序不是固定的,每次调用的个数也是不固定的。每个exe文件完成自己的任务后会自动退出,我怎么在我的主程序中控制这些exe文件啊,怎么知道当前这个exe文件是否已经退出?而通知主程序调用下一个exe文件。
 
可以通过得到调用的EXE文件的窗口句柄来判断,
来个WHILE 循环,什么时候这个窗口句柄没有了,就是这个程序结束了,这时退出这个WHILE循环,继续下一个程序的调用.
 
while循环里面该做些什么呢?
 
用FindWindow查找
 
while retuwindowshand <> 0 do //你调用的程序中一个窗体的句柄
begin
Application.ProcessMessages;
Sleep(500);
Retuwindowshand := Findwindow(nil, Pchar(SysFilestr));
end;
...调用另一个程序然后继续用以上方法来判断
 
执行一个程序并等待它结束
function ExecuteAndWaitProcess(
const ACmdLine : string;
const ACurrDir : string = ''
):Boolean;
var
SI: TStartupInfo;
PI: TProcessInformation;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
SI.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
SI.wShowWindow := SW_HIDE;
Screen.Cursor := crHourGlass;
try
CreateProcess(
nil,
PChar(ACmdLine),
nil,
nil,
True,
0,
nil,
PChar(ACurrDir),
SI,
PI);
WaitForSingleObject(PI.hProcess, INFINITE);
Result := True;
finally
Screen.Cursor := crDefault;
end;
end;
 
应该用监视进程句柄,调用CreateProcess时就可以得到进程句柄。用GetExitCodeProcess可以得到进程是状态,好像用WaitForSingleObject也可以,一个要循环,一个挂起等待,看你的程序是怎么设计了。
 
提供一种思路:
可以建立一个批处理(*.bat或*.cmd)文件,把要执行EXE文件名称按顺序加入,然后再执行这个批处理.这样就会自动顺序执行.
如果要判断是否全部执行完毕,可以在批处理文件的最后执行一个特定的文件,已返回信息;或者加一条复制指定文件到指定目录的DOS命令(也可以是建立一目录的DOS命令),检查是否有指定的文件或目录,就可知道是否执行完.
 
请问李卫东现在在哪?在北京还是石家庄?我也在凯华公司呆过.
 
同意火山的意见
 
后退
顶部