启动另外一个应用程序,如何做到这些.(200分)

  • 主题发起人 主题发起人 casso
  • 开始时间 开始时间
C

casso

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中要启动另外一个应用程序.<br>要求获得这个应用程序的Handle.<br>如果这个应用程序已经运行,只要得到handle就可以了.<br>同时在启动这个应用程序的时候要用进度条显示进度.<br>(假定这个应用程序启动比较慢.)
 
取得HANDLE应该没什么问题,<br>可是,进度就比较困难了,好<br>象比较困难,程序启动的时间<br>包括读磁盘和其它一些处理,<br>再说,什么是“已经启动了”呢?
 
FindWindow函数中的第一个参数是classname,<br>对于任意一个应用程序怎么知道它的classname,<br>在win95下是不是应用使用CreateProcess函数来<br>运行另外一个程序?
 
CreateProcess可以启动另一个进程,并得到它的句柄.<br>但要知道所谓"已经启动",是很困难的,除非那个程序<br>告诉你.它用某种机制通知你启动完成,比如在某个信号<br>量上触发一个事件等等.没有配合的话,只能知道它是否<br>退出了.<br><br>要得到已经运行了的进程的句柄,应该用其PID,然后用<br>OpenProcess.其它的方法都可能出错.当然,取得PID<br>的过程可能也是比较有问题的...
 
检测一个程序是否已经执行可以通过TLHelp32.pas中提供的几个API调用.<br>你可以到Delphi 32深度历险的全部范例程序中下载一个ToolHlp.zip来看一看. 有<br>源码, 示范了如何监控和结束Process, 简单易懂.
 
windows 的handle 比较容易得到,精确进度显示有点问题,可采用定时器(timer)<br>一定时间内显示一格,启动程序前,打开定时器(timer),一旦程序启动结束(可由调用函数的返回值得到),进度显示结束,关闭定时器(timer)。如想取得比较满意的效果,估算显示一格的时间比较关键。
 
并不需要精确的显示进度,只要能模拟一下就行了.<br>问题是我现在是使用OLE启动外部程序的,<br>结果在启动过程中,应用程序无法执行Timer的事件.<br>(没有控制权?)只到外部程序执行完毕才能开始计时.<br>另外,谁解释一下CreateProcess的那些参数吧,<br>我搞的头都大了.
 
0.可用WinExec, ShellExecute, ShellExecuteEx, 或CreateProcess<br>&nbsp; 创建新的程序,最好用CreateProcess<br>1.判断程序(进程)是否已启动可用 WaitForSingleObject--for more<br>&nbsp; 或 WaitForInputIdle--for GUI<br>2.启动程序与被启动程序的父子关系的确定<br>3.环境变量等设置方法<br>4.另, NT下的进程创建有特殊的要求<br><br>请仔细阅读Win32 的 Help
 
多人接受答案了。
 
后退
顶部