(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++ 测试中获取代码覆盖率指标?