枚举进程ID以及线程ID,如果只需要PID以及TID的信息, 可以直接枚举线程即可.线程ID的结构体包含PID
- HANDLE m_hProcessSnap = NULL;
- HANDLE m_hThreadSnap = NULL;
- HANDLE m_hProcess = NULL;
- HANDLE m_hThread = NULL;
- PROCESSENTRY32 m_pe32;
- THREADENTRY32 m_te32;
- memset(&m_pe32,0,sizeof(m_pe32));
- m_pe32.dwSize = sizeof(PROCESSENTRY32);
- memset(&m_te32,0,sizeof(m_te32));
- m_te32.dwSize = sizeof(THREADENTRY32);
- m_hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- m_hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
- WNDENUMPROC lpFun = EnumThreadWndProc;
- BOOL IsHas = FALSE;
- if (::Process32First(m_hProcessSnap,&m_pe32))
- {
- do
- {
- m_hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_pe32.th32ProcessID);
- if (::Thread32First(m_hThreadSnap,&m_te32))
- {
- do
- {
- if (m_pe32.th32ProcessID == m_te32.th32OwnerProcessID)
- {
- ::EnumThreadWndProc(m_te32.th32ThreadID,
- lpFun,
- 0);/*枚举所有线程窗口HWND*/
- }
- }
- while (::Thread32Next(m_hThreadSnap,&m_te32));
- }
- }
- while (::Process32Next(m_hProcessSnap,&m_pe32));
- }