怎样枚举系统当前运行的程序的句柄

解决方案 »

  1.   

    http://www.vchelp.net/vchelp/archive.asp?type_id=28&class_id=1&cata_id=2&article_id=419
      

  2.   

    我映象中这个程序得到的好像是进程ID,还要用OpenProcess打开才得到句柄。
      

  3.   

    void CEnumProcDlg::Enum()
    {
    m_arSet.RemoveAll(); // 对系统中的进程“拍照”
    HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); 
        if (hSnapShot == NULL)
        { 
    return; 
        }; // 枚举第一个进程
    CThreadSet set;
    set.m_procInfo.dwSize = sizeof(PROCESSENTRY32); 
    BOOL bSuccess = Process32First(hSnapShot,&(set.m_procInfo)); // 循环枚举随后的进程
        while (bSuccess) 
        {
    m_arSet.Add(set);
    set.m_procInfo.dwSize = sizeof(PROCESSENTRY32);
    bSuccess = Process32Next(hSnapShot,&(set.m_procInfo));
    } // 将“线程集”中的线程数组清空,准备存放新得到的线程信息
    UINT nSize = m_arSet.GetSize() - 1;
    UINT nCount;
    THREADENTRY32 threadInfo;
    for (nCount = 0;nCount < nSize;nCount++)
    {
    m_arSet[nCount].m_arThread.RemoveAll();
    } // 枚举第一个线程
      threadInfo.dwSize = sizeof(THREADENTRY32);
    bSuccess = Thread32First(hSnapShot,&threadInfo); // 循环得到随后的线程
    while (bSuccess)
    {
    for (nCount = 0;nCount < nSize;nCount++)
    {
    // 将线程存放到对应于其进程的“线程集”中
    if (m_arSet[nCount].m_procInfo.th32ProcessID
    == threadInfo.th32OwnerProcessID)
    {
    m_arSet[nCount].m_arThread.Add(threadInfo);
    break;
    }
    }
    threadInfo.dwSize = sizeof(THREADENTRY32);
    bSuccess = Thread32Next(hSnapShot,&threadInfo);
    } // 关闭“快照”句柄
    CloseHandle(hSnapShot);
    }
      

  4.   

    zhenxizhou(天上人间) (
    你的方法在nt4.0上不行。你有在2k,98,nt 下都能用的函数吗