2010-06-30 165 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