c++ - 列出线程

标签 c++ visual-c++

<分区>

 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)) {
                          HANDLE Handle = OpenProcess(
        PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
        FALSE,
        te.th32OwnerProcessID /* This is the PID, you can find one from windows task manager */
    );
                          TCHAR Buffer[MAX_PATH];
       wprintf(L"Process %u IdThred=%u\n",
             te.th32OwnerProcessID, te.th32ThreadID);
     }
   te.dwSize = sizeof(te);
   } while (Thread32Next(h, &te));
  }
  CloseHandle(h);
 }

这段代码列出了所有进程和进程的所有线程,但我希望它只列出进程的线程 pid ... 例子: 资源管理器.exe pid = 5454 通过pid要他有线程的id和线程状态。

最佳答案

您的代码确实有效。只需要一点点改变:

HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (h != INVALID_HANDLE_VALUE)
{
    THREADENTRY32 te;
    te.dwSize = sizeof(te);
    if (Thread32First(h, &te))
    {
        do
        {
            //in THREADENTRY32 structure there is a member called th32OwnerProcessID
            //you can check owner process of thread like this:
            if (te.th32OwnerProcessID == 5454)
            {
                wprintf(L"Process %u IdThred=%u\n", te.th32OwnerProcessID, te.th32ThreadID);
            }
        } while (Thread32Next(h, &te));
    }
    CloseHandle(h);
}

关于c++ - 列出线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20892367/

相关文章:

c++ - 尝试玩 Unreal Engine 4.20 时崩溃?

c++ - Windows Phone 8 应用仅在从商店下载后崩溃

c++ - 无缘无故的多重析构函数定义

c++ - 如何在 Windows 7 的 MFC 中区分 "Close All Windows"和 "Close"单个窗口?

c++ - 删除的函数和 ADL

使用 CodeSynthesis XSD 树映射的 C++ 类型

visual-c++ - 使用 Visual C++ 2013 在 Visual Studio 2013 上开始使用 HDF5

c++ - 替换已弃用的 DirectSound 的选项

c++ - 为什么临时对象的引用在这里有效?

c - C头文件中的全局数组?