rt,

解决方案 »

  1.   

    下面枚举所有进程的所有线程,不知为何不成功(枚举模块却都可以),本来想开个帖子问的,问题和你差不多,讨论一下好了,代码如下:#include <stdio.h>
    #include <wchar.h>
    #include <windows.h>
    #include <tlhelp32.h> DWORD PrintAllThreadOfProcess()
    {
    DWORD pid=0;
    HANDLE hProcessSnap = NULL;
    // 取得整个进程链
    hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
    // 进程信息结构体
    PROCESSENTRY32 pe;
    pe.dwSize = sizeof(PROCESSENTRY32);
    Process32First(hProcessSnap,&pe);
    do
    {
      // getchar();
      printf("***********************************\n");
      printf("线程ID:%ld,马甲现身:%s\n",pe.th32ProcessID,pe.szExeFile);
      HANDLE hThreadSnap =NULL;
      // 线程信息结构体,如果想取得模块信息,则结构体为MODULE,
      // 下面的函数相应改为,Module32First等等
      THREADENTRY32 me32        = {0}; 
      me32.dwSize = sizeof(THREADENTRY32); 
      // 取得线程模块快照
      hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe.th32ProcessID); 
      // ////////////////////////////////////////////////////////////////////////
      // if (Module32First(hThreadSnap, &me32)) 
      if (Thread32First(hThreadSnap, &me32))
      { 
       do 
       { 
         printf("我是它的线程,id是:%d\n",me32.th32ThreadID);
         // 说明:线程是没有马甲的
       } 
       while ( Thread32Next(hThreadSnap, &me32));   } 
      else 
      {
       printf("没有线程链\n");
      }
       
      // 关掉线程快照
      CloseHandle (hThreadSnap); 
      // ////////////////////////////////////////////////////////////////////////
    }
    while(Process32Next(hProcessSnap,&pe));
    // 关掉进程快照
    CloseHandle (hProcessSnap);
    return pid;
    }
    int main(int argc, char* argv[])
    {
    PrintAllThreadOfProcess();
    return 0;
    }