在Windows中枚举线程

bdo*_*lan 6 windows winapi multithreading

如何在给定进程的HANDLE(或进程ID)的情况下枚举进程中的所有线程?我有兴趣这样做,所以我可以在每个线程上进一步做一个EnumThreadWindows.

nik*_*nik 7

在MSDN博客中枚举进程中的线程.

代码片段来自那里:

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>

int __cdecl main(int argc, char **argv)
{
 HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
 if (h != INVALID_HANDLE_VALUE) {
  THREADENTRY32 te;
  te.dwSize = sizeof(te);
  if (Thread32First(h, &te)) {
   do {
     if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) +
                      sizeof(te.th32OwnerProcessID)) {
       printf("Process 0x%04x Thread 0x%04x\n",
             te.th32OwnerProcessID, te.th32ThreadID);
     }
   te.dwSize = sizeof(te);
   } while (Thread32Next(h, &te));
  }
  CloseHandle(h);
 }
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 最好列出至少所需的主要API函数,以便在链接中断时(MSDN习惯更改URL),此答案不会变得完全无用 (2认同)