2010-06-30 168 views
0

我想通过进程名称获取进程的句柄。通过PID获取进程句柄

我有PID但是当我使用openProcess总是帮把手将返回0或180,我用得到的PID功能正常

Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,PID);

我应该怎么办?

+0

你为什么要检查句柄值?这不是一个跨进程值,这是由OpenProcess API生成的。 180可能只是对打开过程的有效处理。您是否尝试使用手柄而不是确定其数值? – 2010-06-30 15:44:35

+0

我想得到句柄,我没有找到任何解决方案,直接得到它 – sam 2010-06-30 15:49:49

+2

我只是想这个,通过它的名字得到一个进程的句柄 – sam 2010-06-30 15:58:05

回答

7

除非您使用的是CreateProcess,否则没有直接的方法可以在您知道其名称时获取进程句柄。

取而代之,您可以使用CreateToolhelp32Snapshot,Process32FirstProcess32Next来搜索具有所需名称的所有进程。请记住,可能有多个具有相同名称的进程。这些功能会告诉你进程ID。一旦你有了,你可以使用OpenProcess,正如你已经证明的那样。如果OpenProcess返回的值不是零(如180),那么它给了你一个有效的进程句柄。

+0

U意味着进程句柄不是唯一的?所以2个runinng进程可能有两个PID和一个句柄? – sam 2010-06-30 18:55:39

+3

我不知道你是如何从我在答案中写到的。无论如何,一个进程可能会有许多句柄打开它。你可以在同一个PID上调用两次OpenProcess,并且你应该得到两个不同的数值 - 两个句柄,一个进程。你可以从两个不同的程序调用同一个PID的OpenProcess,并且你可能会得到两个不同的值,或者你可能会在每个程序中得到相同的值,但这些仍然是两个不同的句柄。 – 2010-06-30 19:55:26

+0

好的THX MR肯尼迪 – sam 2010-06-30 20:27:58