获取指定程序的所有线程ID号

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PROCESSENTRY32 pe = { sizeof(pe) };
  BOOL fOk;
  for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe))
  {  
   if (!_tcscmp(pe.szExeFile, L"VCdemo.exe"))
   {
    
     if(bNoPrint == FALSE&&RefreshThreadList(pe.th32ProcessID))
     {
                     bNoPrint = TRUE;
      TRACE("VCdemo.exe ProcessID :0x%X\n",pe.th32ProcessID);
     }
   }

 

BOOL RefreshThreadList (DWORD dwOwnerPID)
{
 HANDLE        hThreadSnap = NULL;
 BOOL          bRet        = FALSE;
 THREADENTRY32 te32        = {0};

 // Take a snapshot of all threads currently in the system.

 hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
 if (hThreadSnap == INVALID_HANDLE_VALUE)
  return (FALSE);

 // Fill in the size of the structure before using it.

 te32.dwSize = sizeof(THREADENTRY32);

 // Walk the thread snapshot to find all threads of the process.
 // If the thread belongs to the process, add its information
 // to the display list.

 if (Thread32First(hThreadSnap, &te32))
 {
  do
  {
   if (te32.th32OwnerProcessID == dwOwnerPID)
   {
    /*printf( "\nTID\t\t%d\n", te32.th32ThreadID);
    printf( "Owner PID\t%d\n", te32.th32OwnerProcessID);
    printf( "Delta Priority\t%d\n", te32.tpDeltaPri);
    printf( "Base Priority\t%d\n", te32.tpBasePri); */
    TRACE("VCdemo.exe nTID :0x%X\n",te32.th32ThreadID);
    TRACE("VCdemo.exe Owner PID :0x%X\n",te32.th32OwnerProcessID);
    //TRACE("VCdemo.exe Delta Priority :0x%X\n",te32.tpDeltaPri);
    //TRACE("VCdemo.exe Base Priority :0x%X\n",te32.tpBasePri);

   }
  }
  while (Thread32Next(hThreadSnap, &te32));
  bRet = TRUE;
 }
 else
  bRet = FALSE;          // could not walk the list of threads

 // Do not forget to clean up the snapshot object.

 CloseHandle (hThreadSnap);

 return (bRet);
}

posted on 2013-09-26 16:55  bamboo_lady  阅读(703)  评论(0编辑  收藏  举报

导航