(Visual C++) 从线程获取 PID

Posted

技术标签:

【中文标题】(Visual C++) 从线程获取 PID【英文标题】:(Visual C++) Get PID From Thread 【发布时间】:2014-03-15 22:56:30 【问题描述】:

我正在尝试跟踪某个应用程序的行为,我已经抓住了绘制窗口的可见线程,有那个线程有没有办法确定它所属的进程?

【问题讨论】:

GetWindowThreadProcessId() 会告诉你both。 GetProcessIdOfThread() 是您所要求的。 【参考方案1】:

您可以将GetProcessIdOfThread api 用于较新版本的 Windows。

对于旧版本,您必须使用 ToolHelp 库函数 Thread32First/Thread32Next 手动查找它,搜索 threadid 并从 THREADENTRY32 结构中获取进程 ID。

【讨论】:

Thread32First/Thread32Next 方案是否适用于所有平台?要使用 GetProcessIdOfThread,必须对线程有一个 HANDLE,但是当设置 THREAD_QUERY_INFORMATION 时,OpenThread() 会失败.. thread32xx 适用于所有平台。我认为 OpenThread 失败是因为它是一个受保护的进程,您可能需要改用 THREAD_QUERY_LIMITED_INFORMATION。

以上是关于(Visual C++) 从线程获取 PID的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013 C++ 本机代码中与互锁操作的线程同步挂起

std::thread,在线程中抛出异常会导致 Visual C++ 中的中止错误

有啥方法可以从 Visual Studio 2017 中的 Catch C++ 测试中获取代码覆盖率指标?

如何检查是不是在 Visual C++ 应用程序中的第三方 DLL 中创建了新线程

Visual C++ 跨线程发送消息

Visual C++ 只有一个线程工作 (OpenMP)