2013-01-04 66 views
2

我需要获得用于我的应用程序的外部进程的PROCESS_INFORMATION,我有进程句柄和进程ID,但我不知道如何去取得该进程的PROCESS_INFORMATION从进程句柄获取进程信息

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

+0

如果你已经有_handle_和_id_这个进程,为什么你需要它? –

+0

你实际需要什么信息?根据你的观点,你已经有50%的函数返回的信息。唯一缺少的是初始线程的ID和句柄。你为什么需要这个? –

+0

我需要它来检查启动应用程序的进程是否仍然存在,启动应用程序的应用程序(让它称为application1)在启动应用程序时传递其进程ID(让我们调用application2),然后application2派生来自进程ID的句柄。 - 但我不知道如何去从那里获取'PROCESS_INFORMATION'。 – Ryan

回答

6

PROCESS_INFORMATIONCreateProcess()填充。那艘船驶过了;该过程已经开始。

让我们专注于你真的想要做什么。要确定进程是否已终止,请首先使用OpenProcess()获取该进程的句柄。您需要您已拥有的PID。然后WaitForSingleObject()会告诉你它是否被终止。通过INFINITE第二个参数阻塞,直到进程终止。如果您想轮询,请通过0。最后,使用CloseHandle()进行清理。

1

PROCESS_INFORMMATION提供了4条信息:

HANDLE hProcess 
HANDLE hThread 
DWORD dwProcessID 
DWORD dwThreadID 

你说你已经有两个这些值 - 进程句柄和进程ID。所以这只是留下了线程句柄和线程ID。这些属于为流程创建的第一个线程。您可以使用CreateToolhelp32Snapshot(),Thread32First()Thread32Next()来枚举正在运行的线程以查找属于给定进程ID的线程ID,然后使用OpenThread()来获取给定线程ID的线程句柄。棘手的部分是确定哪个线程ID是第一个线程。该信息不易在CreateProcess()之外获得。