怎样监控一个应用程序的进程是否结束 各位高手你们好! 请问怎样监控一个应用程序的进程是否结束?我现在在我的主程序里调用ShellExecute方法启动了一个应用程序,我想在我的主程序里监控这个应用程序是否退出,我应该怎么办? 各位大虾请多多指教! 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 假如你开启的应用程序时你自己编写而且在win2k就简单了。用线程监视他的退出。在exe中创建一个事件,注意要加上名字另一个程序打开该事件,创建多线程然后监视即可。 GetExitCodeProcess()函数试一试,因为shellexecute返回一个进程序的句柄用此函数可以判断它的状态。 创建一个线程,然后在线程里while(!FindWindow(NULL, title));title是程序的标题,一旦程序结束, 该循环就会退出 你可以这样做:我已经测试成功了在你的类里面定义一个全局的变量,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);}你可以写个线程或者用定时器即可监视。 GetExitCodeProcess我用过,刚开始的时候可以,可是后来我作了点改动不知道为什么不行了,而且我写的程序需要考虑以前此程序是否已经有进程存在了,所以我就改用EnumProcess了 combobox下拉框中怎么绑定为ODBC检索出来的数据 如何动态存取变量 因放假回家,在家上网不方便,暂时没法管理硬件/系统版,望各位原谅! 为什么我在回调函数中使用PostMessage()函数不能正确相应消息呢? 为什么在一个类中添加其它自定义的类对象时总出现link2001的错误呢 COM组件里如何导出结构 结构体编译出错 ? 高分求教!cpu温度过高 UG二次开发编辑nurbs曲线 mfc 加载raw文件 如何实现在对话框的picture控件中画图 IE安全设置影响ActiveX控件执行的问题
在exe中创建一个事件,注意要加上名字
另一个程序打开该事件,创建多线程然后监视即可。
while(!FindWindow(NULL, title));
title是程序的标题,一旦程序结束, 该循环就会退出
在你的类里面定义一个全局的变量,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);
}
你可以写个线程或者用定时器即可监视。