从流程处理中获取流程信息

时间:2013-01-04 20:44:37

标签: c++ windows

我需要获取外部进程的PROCESS_INFORMATION才能在我的应用程序中使用,我有进程句柄和进程ID,但我不知道怎样去获取PROCESS_INFORMATION那个。

我正在使用在Windows上运行的C ++(11),Visual Studio 2012。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:6)

PROCESS_INFORMATIONCreateProcess()填充。那艘船航行了;这个过程已经开始了。

让我们专注于您真正想要做的事情。要确定进程是否已终止,请首先使用OpenProcess()获取进程的句柄。你需要你已经拥有的PID。然后WaitForSingleObject()将告诉您它是否已终止。传递INFINITE以阻止第二个参数,直到进程终止。如果要进行投票,请通过0。最后,使用CloseHandle()进行清理。

答案 1 :(得分:1)

PROCESS_INFORMMATION提供了4条信息:

HANDLE hProcess
HANDLE hThread
DWORD dwProcessID
DWORD dwThreadID

您说您已经拥有其中两个值 - 流程处理和流程ID。这样就离开了Thread Handle和Thread ID。那些属于为该过程创建的第一个线程。您可以使用CreateToolhelp32Snapshot()Thread32First()Thread32Next()枚举正在运行的线程,查找属于给定进程ID的线程ID,然后使用OpenThread()获取线程处理给定的线程ID。棘手的部分是确定哪个线程ID是第一个线程。 CreateProcess()以外的地方无法提供这些信息。

答案 2 :(得分:0)

您可以使用CreateToolhelp32Snapshot function获取所需信息,因为它会返回进程ID和父进程ID。可以找到它的一个使用示例here