各位高手你们好!
      请问怎样监控一个应用程序的进程是否结束?我现在在我的主程序里调用ShellExecute方法启动了一个应用程序,我想在我的主程序里监控这个应用程序是否退出,我应该怎么办?
                         各位大虾请多多指教! 谢谢

解决方案 »

  1.   

    假如你开启的应用程序时你自己编写而且在win2k就简单了。用线程监视他的退出。
    在exe中创建一个事件,注意要加上名字
    另一个程序打开该事件,创建多线程然后监视即可。
      

  2.   

    GetExitCodeProcess()函数试一试,因为shellexecute返回一个进程序的句柄用此函数可以判断它的状态。
      

  3.   

    创建一个线程,然后在线程里
    while(!FindWindow(NULL, title));
    title是程序的标题,一旦程序结束, 该循环就会退出
      

  4.   

    你可以这样做:我已经测试成功了
    在你的类里面定义一个全局的变量,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);
    }
    你可以写个线程或者用定时器即可监视。
      

  5.   

    GetExitCodeProcess我用过,刚开始的时候可以,可是后来我作了点改动不知道为什么不行了,而且我写的程序需要考虑以前此程序是否已经有进程存在了,所以我就改用EnumProcess了