怎样监控一个应用程序的进程是否结束

liuyunda 2004-04-12 08:44:45
各位高手你们好!
请问怎样监控一个应用程序的进程是否结束?我现在在我的主程序里调用ShellExecute方法启动了一个应用程序,我想在我的主程序里监控这个应用程序是否退出,我应该怎么办?
各位大虾请多多指教! 谢谢
...全文
162 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jessenee 2004-04-12
  • 打赏
  • 举报
回复
GetExitCodeProcess我用过,刚开始的时候可以,可是后来我作了点改动不知道为什么不行了,而且我写的程序需要考虑以前此程序是否已经有进程存在了,所以我就改用EnumProcess了
Pipi0714 2004-04-12
  • 打赏
  • 举报
回复
当然多线程不属用定时器很简单的
superS 2004-04-12
  • 打赏
  • 举报
回复
WaitForSingleObject就可以了吧
Pipi0714 2004-04-12
  • 打赏
  • 举报
回复
你可以这样做:我已经测试成功了
在你的类里面定义一个全局的变量,HANDLE m_hProcess;
启动进程的时候:
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartupInfo;
siStartupInfo.cb = sizeof(STARTUPINFO);
siStartupInfo.lpReserved = NULL;
siStartupInfo.lpDesktop = NULL;
siStartupInfo.lpTitle = NULL;
siStartupInfo.dwFlags = STARTF_USESHOWWINDOW;
siStartupInfo.wShowWindow = SW_SHOWNORMAL;
siStartupInfo.cbReserved2 = 0;
siStartupInfo.lpReserved2 = NULL;
if (CreateProcess(
NULL,
"C:\\winnt\\system32\\calc.exe",
NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&siStartupInfo,
&piProcInfo))
{
m_hProcess = piProcInfo.hProcess;
}
判断它是否退出:
if(m_hProcess != NULL)
{
DWORD dwCode = 0;
BOOL bRst = ::GetExitCodeProcess(m_hProcess,&dwCode);
if(dwCode != 0)
{
m_hProcess = NULL;
}
//dwCode返回值表明该进程是否退出,0退出,259没有退出
}

注意程序退出的时候
if(m_hProcess != NULL)
{
CloseHandle(m_hProcess);
}
你可以写个线程或者用定时器即可监视。
ymbymb 2004-04-12
  • 打赏
  • 举报
回复
创建一个线程,然后在线程里
while(!FindWindow(NULL, title));
title是程序的标题,一旦程序结束, 该循环就会退出
自由的风 2004-04-12
  • 打赏
  • 举报
回复
学习
Pipi0714 2004-04-12
  • 打赏
  • 举报
回复
GetExitCodeProcess()函数试一试,因为shellexecute返回一个进程序的句柄用此函数可以判断它的状态。
Pipi0714 2004-04-12
  • 打赏
  • 举报
回复
假如你开启的应用程序时你自己编写而且在win2k就简单了。用线程监视他的退出。
在exe中创建一个事件,注意要加上名字
另一个程序打开该事件,创建多线程然后监视即可。
快乐鹦鹉 2004-04-12
  • 打赏
  • 举报
回复
关注。有用。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧