我的delphi程序A调用一个cmd下的B程序(B是Dos程序),A如何判断B已经执行完毕再接下来做其他工作?
解决方案 »
- 帮忙修改下组件 一个可以加背景的listview 但是现在会闪烁
- 如果将SQL(用adoquery)的查询结果添加到Listbox列表中
- 这个判断鼠标右键点击应该写在什么地方?
- 求大家帮个忙,哪位知道delphi中的dxloutlookgroup组件在什么地方啊
- 我是菜鸟,请问Delphi中能修改网关的API函数是什么?
- 写了一个线程,但在调用的时候出现这样的错误:Access voilation at address 004c3588 in Module'**.exe'.read of address 00000084
- 诚招山东程序员,工作地烟台。
- fastreport的送分问题
- 关于MDI窗体的问题
- 我想学Delphi,大家推荐一本入门的书吧?
- 下面是我用delphi实现图片浏览的一段代码,加载照片多的时候速度很慢,如何改进呢?
- 一个跑题的问题
执行一个外部程序,并等待它完成
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;
修改dos程序(或者是批处理文件),开始运行的时候建立一个标记文件,执行完毕以后删除这个标记文件,主程序就一直监控这个标记文件是否存在就行了!
其实要控制外部程序,可以用API函数CreateProcess,它的详细用法可以查看MSDN.
CreateProcess函数可以监控由它打开的程序的运行情况,如DOS程序运行显示的信息我们可以将他添加到我们的Memo控件中,这样我们就不用打开DOS窗口,这也是很多DOS程序GUI界面话的方法。