我有一个充满进程句柄的数组,现在我正在尝试获取每个进程句柄的相关进程ID。
然而,我的所有进程ID都回归为零。 任何人都能指出我错过了哪个明显的问题?
非常感谢
'child'数组填充了进程ID,因此:
currChild = FindWindowEx(hParent, prevChild, null, null);
然后我尝试获取进程ID:
for (int i = 0; i < children.Count; ++i)
{
handle = children[i];
pid = GetProcessId(handle);
Console.WriteLine(children[i].ToString("X") + " : " + pid.ToString());
API:
[DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("kernel32.dll", EntryPoint = "GetProcessId", CharSet = CharSet.Auto)]
static extern int GetProcessId(IntPtr handle);
输出:
2417E2 : 0
B20D9A : 0
48108C : 0
8809D6 : 0
B5140E : 0
4207F6 : 0
4213B0 : 0
5D15DA : 0
etc ....
答案 0 :(得分:5)
请注意,GetProcessId
接受进程句柄作为输入,而不是窗口句柄
对于后者,您可以改为使用GetWindowThreadProcessId
。