怎么监控程序的运行?也就是说如果进程里面没有这个程序的运行,就自动启动。能有源代码最好

解决方案 »

  1.   

    http://www.codeproject.com/KB/threads/procmon.aspx
      

  2.   


    //枚举系统进程
    void CTteestDlg::load()
    {
    CString temp;
            //根据这些信息获取进程中有无你要的程序运行
    CStringArray pStrAry_ProcessName; //进程名
    CUIntArray pUIntAry_ProcessID;//ID
    CStringArray pStrAry_ProcessPath;//路径
    // TODO: Add your control notification handler code here
    CProcessIterator itp;
    CStringArray StrAry_ProcessName;
    CUIntArray UIntAry_ProcessID;
    CStringArray StrAry_ProcessPath;

    if ( !CProcessManage::EnumSystemProcess (
    &StrAry_ProcessName,
    &UIntAry_ProcessID,
    NULL,
    NULL,
    &StrAry_ProcessPath)
    )
    {
    return;
    }

    int nCount = 0;
    for ( int i=0; i<StrAry_ProcessName.GetSize(); i++ )
    {
    CString csProcessName = StrAry_ProcessName.GetAt ( i );
    //TRACE ( _T("%s\n"), csProcessName );
    csProcessName.MakeLower ();
    //选择需要的进程
    if ( csProcessName == _T("msdev.exe") )
    {
    nCount ++;
    //进程名
    pStrAry_ProcessName.Add ( csProcessName );
    TRACE ( _T("%s\n"), csProcessName );
    //进程ID
    pUIntAry_ProcessID.Add ( UIntAry_ProcessID.GetAt(i) );
    TRACE ( _T("%d\n"), UIntAry_ProcessID.GetAt(i) );
    //进程路径
    pStrAry_ProcessPath.Add ( StrAry_ProcessPath.GetAt(i) );
    TRACE ( _T("%s\n"), StrAry_ProcessPath.GetAt(i));
    }
    TRACE ( _T("%s\r  "), csProcessName );

    TRACE ( _T("%d\r  "), UIntAry_ProcessID.GetAt(i) );

    TRACE ( _T("%s\r\n"), StrAry_ProcessPath.GetAt(i));
    m_list.InsertItem(i,"");
    m_list.SetItemText(i,0,csProcessName);
    temp.Format("%d",UIntAry_ProcessID.GetAt(i));
    m_list.SetItemText(i,1,temp);
    temp.Format("%s",StrAry_ProcessPath.GetAt(i));
    m_list.SetItemText(i,2,temp);
    }

    }