3

我需要PROCESS_INFORMATION在我的应用程序中使用外部进程,我有进程句柄和进程 ID,但我不知道如何PROCESS_INFORMATION解决这个问题。

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

4

3 回答 3

6

PROCESS_INFORMATION由 填充CreateProcess()。那艘船已经航行了;该过程已经开始。

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

于 2013-01-04T20:59:37.993 回答
1

PROCESS_INFORMMATION提供4条信息:

HANDLE hProcess
HANDLE hThread
DWORD dwProcessID
DWORD dwThreadID

您说您已经拥有其中两个值 - 进程句柄和进程 ID。这样就只剩下线程句柄和线程 ID。这些属于为该进程创建的第一个线程。您可以使用CreateToolhelp32Snapshot()Thread32First()Thread32Next()枚举正在运行的线程,查找属于给定进程 ID 的线程 ID,然后用于OpenThread()获取给定线程 ID 的线程句柄。棘手的部分是确定哪个线程 ID 是第一个线程。该信息在CreateProcess().

于 2013-01-04T21:51:32.260 回答
0

您需要的信息可以通过CreateToolhelp32Snapshot 函数获得,因为它返回进程 ID 和父进程 ID。可以在此处找到其使用示例。

于 2013-01-04T21:27:47.810 回答