怎样枚举系统当前运行的程序的句柄 怎样枚举系统当前运行的程序的句柄 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.vchelp.net/vchelp/archive.asp?type_id=28&class_id=1&cata_id=2&article_id=419 我映象中这个程序得到的好像是进程ID,还要用OpenProcess打开才得到句柄。 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);} zhenxizhou(天上人间) (你的方法在nt4.0上不行。你有在2k,98,nt 下都能用的函数吗 MFC中编辑控件数据显示问题 ctreectrl展开时在最底层节点动态创建EDIT 如何自动编译DLL 使自己的软件支持光驱刻录的一个方法 求:list box使用方法说明,最好有实例! listctrl怎么分页显示 DCOM中创建窗口的问题! 内存块指针赋值 WinSock中sockaddr_in里面的S_un_w和S_un_b应该怎么用 vc中如何调用应用程序 Visual C++ 中的 ODBC 编程 一封邮件中,是否会有多个"Boundary"?
{
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);
}
你的方法在nt4.0上不行。你有在2k,98,nt 下都能用的函数吗