我的程序启动外部程序开发运行后,我自己的程序退出,这个时候外部程序还在进行,如何外部程序运行完后自动退出呢?注这个时候我的程序已退出,不能控制外部程序了。
解决方案 »
- 求助!Delphi操作office2007的问题
- 炸弹超人游戏 + [源码] + [原创]
- 关于不同数据库设计
- 关于Treeview中使用savetostream 的问题
- 获取硬盘系列号、CPU系列号、网卡系列号:答者尽散分!
- 我看见有控件中有action这个属性,我看了帮助但还是不太明白,谁帮我解释下,最好能举了例子。
- Oracle连接错误,紧急等待
- 一段sql语句该如何写?????请各位兄弟帮帮忙!!!!!!!
- 如何移动Form上的一个Label,马上结贴
- 如何实现treeview的无限扩展,在利用数据表编程,能告诉一个思想就行,最好源源代码
- 编写这种软件的思路是什么(标题说不清楚),求高手指教!
- adoquery怎么获取一张表中某个字段的值的个数总数然后赋值给一个变量!
ExitProcess 比 TerminateProcess安全点
var
sCommandLine: string;
bCreateProcess: boolean;
lpStartupInfo: TStartupInfo;
lpProcessInformation: TProcessInformation;
begin
sCommandLine := 'D:\TEMP\TEST.EXE';
// 填 StartupInfo
FillChar(lpStartupInfo, Sizeof(TStartupInfo), #0);
lpStartupInfo.cb := Sizeof(TStartupInfo);
lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow := SW_NORMAL; bCreateProcess := CreateProcess(nil, PChar(sCommandLine),
nil, nil, True, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil, nil, lpStartupInfo, lpProcessInformation);
if bCreateProcess then //等外部进程的结束
WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);
end;
var vProcessInfo: TProcessInformation; //进程信息句柄
vStartUpInfo: TStartupInfo;
begin
FillChar(vStartUpInfo, SizeOf(vStartUpInfo), #0); vStartUpInfo.dwFlags:=STARTF_USESHOWWINDOW; vStartUpInfo.wShowWindow:=SW_HIDE; //SW_HIDE,程序执行时的显示模式
if CreateProcess(nil, PChar(ChangeFileExt(TextFilePath, '.bat')), nil, nil,False, IDLE_PRIORITY_CLASS,
nil, nil, vStartUpInfo,vProcessInfo) then//创建执行该批处理文件的进程,并得到进程信息
begin //通过进程句柄等待该进程执行完毕 第二个参数表示等待时间
WaitForSingleObject(vProcessInfo.hProcess, INFINITE);
CloseHandle(vProcessInfo.hThread); //关闭进程的主线程句柄
CloseHandle(vProcessInfo.hProcess); //关闭进程句柄
end;
end; 试试,运行.bat文件没问题,其它的应用程序还没试过通过这种方法启动一个外部程序,即可以让它自动运行完毕退出
看这个帖子http://topic.csdn.net/u/20090704/22/95116afc-1a7d-4804-b53e-c806c26d5021.html
里面用了一个钩子
th := findwindow(nil, '运行程序');
sendmessage(th, wm_close, 0, 0);
------------------------
http://bbs.cnsoftware.cn