我需要获取外部进程的PROCESS_INFORMATION
,以便在我的应用程序中使用,我有进程句柄和进程ID,但我不知道如何从中获取PROCESS_INFORMATION
。
我正在使用C++(11),Visual Studio 2012,在Windows上运行。非常感谢您的帮助。
PROCESS_INFORMATION
被CreateProcess()
填充。这个过程已经启动,无法改变。
让我们集中精力做你真正想做的事情。首先使用OpenProcess()
获得一个句柄以获取该进程。您已经拥有PID。然后,WaitForSingleObject()
将告诉您它是否终止。将第二个参数传递为INFINITE
以阻塞直到该进程终止。如果您想轮询,则将其传递为0
。最后,使用CloseHandle()
进行清理。
PROCESS_INFORMMATION
提供了 4 个信息:
HANDLE hProcess
HANDLE hThread
DWORD dwProcessID
DWORD dwThreadID
您说您已经有了这两个值 - 进程句柄和进程ID。那么剩下的就是线程句柄和线程ID。它们属于为该进程创建的第一个线程。您可以使用CreateToolhelp32Snapshot()
、Thread32First()
和Thread32Next()
来枚举正在运行的线程,查找属于给定进程ID的线程ID,然后使用OpenThread()
获取给定线程ID的线程句柄。棘手的部分是识别哪个线程ID是第一个线程。除了CreateProcess()
之外,这些信息不容易获得。
PROCESS_INFORMATION
。 - RyanPROCESS_INFORMATION
来确定应用程序是否仍在运行? - Raymond Chen