我想搜索机器的进程表看是否存在某个进程,如存在则作进一步的操作,请问应该怎么取得

解决方案 »

  1.   

    http://www.codeguru.com/Cpp/W-P/system/processesmodules/article.php/c5769/
      

  2.   

    不难啊 
    net 框架有个什么叫 thhread 的类 看一下msdn就会了。
    OK?
      

  3.   

    class JProcessInfo  
    {
    public:
    JProcessInfo();
    virtual ~JProcessInfo();
    BOOL FindProcessInfo(const CString& cstrProcessName);
    BOOL NeedTerminateProcess();
    void GetUpdateSystemName(const CString&);
    void ClearProcessInfo();
    private:
    HANDLE m_hProcessSnap;
    PROCESSENTRY32 m_pe32; 
    HANDLE m_hProcess;
    HANDLE m_hRealProcess;
    CString m_cstrSystemName;
    };JProcessInfo::JProcessInfo():m_hProcessSnap(NULL),m_hProcess(NULL),m_hRealProcess(NULL)
    {
    memset(&m_pe32,0,sizeof(m_pe32));
    m_pe32.dwSize = sizeof(PROCESSENTRY32);
    m_hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    }JProcessInfo::~JProcessInfo()
    {
    try
    {
    if (m_hRealProcess)
    ::CloseHandle(m_hRealProcess);
    ::CloseHandle(m_hProcessSnap);
    }
    catch (...) 
    {
    0;
    }
    }BOOL JProcessInfo::FindProcessInfo(const CString& cstrProcessName)
    {
    if (m_hProcessSnap != INVALID_HANDLE_VALUE)
    {
    if (::Process32First(m_hProcessSnap,&m_pe32)) 
    {
    do 
    {
    HANDLE m_hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_pe32.th32ProcessID);
    CString cstrAppName(m_pe32.szExeFile);
    if (cstrAppName == cstrProcessName)
    { if (m_pe32.th32ProcessID != ::GetCurrentProcessId() && m_cstrSystemName != cstrProcessName)
    {
    ::TerminateProcess(m_hProcess,0);
    if (::WaitForSingleObject(m_hProcess,INFINITE) == WAIT_OBJECT_0)
    {
    return TRUE;
    }
    }
    else
    m_hRealProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_pe32.th32ProcessID);
    }

    while (::Process32Next(m_hProcessSnap,&m_pe32));
    if (m_hRealProcess)
    return TRUE;
    return FALSE;
    }
        }
    return FALSE;
    }BOOL JProcessInfo::NeedTerminateProcess()
    {
    if (!m_hRealProcess)
    return FALSE;
    return ::TerminateProcess(m_hRealProcess,0);
    }void JProcessInfo::GetUpdateSystemName(const CString& pm)
    {
    m_cstrSystemName = pm;
    }void JProcessInfo::ClearProcessInfo()
    {
    m_cstrSystemName.Empty();
    }
      

  4.   

    EPROCESS 在ring3可以访问一个进程链。在XFOUCS峰会上TK有一篇相关文章。
      

  5.   

    //获得当前正在运行的所有进程
    GetAllCurrentProcess()
    {
    HANDLE h_SnapShot;
    h_SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 processListStr;
    processListStr.dwSize = sizeof(PROCESSENTRY32); BOOL ret = false; ret = Process32First(h_SnapShot, &processListStr); CListBox *lstBox; lstBox = (CListBox *)GetDlgItem(IDC_LIST1);
    lstBox->ResetContent(); int i = 0; while(ret)
    {
    lstBox->InsertString(i, processListStr.szExeFile);
    processID[i] = processListStr.th32ProcessID;
    ret = Process32Next(h_SnapShot, &processListStr);
    i++;
    }
    }
      

  6.   

    CreateToolhelp32Snapshot霉举所有,参看msdn,非常的详细
      

  7.   

    请问CreateToolhelp32Snapshot可以列举其他机器的进程表吗?