通过窗口的句柄查找进程ID

时间:2013-08-12 10:24:59

标签: c#

我在获取进程的特定PID时遇到问题, 这个过程的问题在于它是一个隐藏的过程,它没有在任务管理器/ powershell上显示,完全隐藏。

我所做的远是这个过程的主要窗口句柄,问题是,我怎样才能得到它的pid。

我正在尝试做的是读取这个过程的内存并进行编辑,但是如果没有我想到的PID就不能这样做(因为我需要在内存中获取它的基地址)。

所以,如果有人为我做任何解决方法或事情,那就太好了。

P.S:此过程未在Process.GetProcesses()中显示。

TY!

2 个答案:

答案 0 :(得分:39)

您可以使用以下Windows API:

[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);

传入HWND并使用out参数返回PID。

您可以在MSDN上阅读有关此功能的更多信息 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms633522(v=vs.85).aspx

答案 1 :(得分:8)

您需要在Windows API中使用P / invoke。

在类中声明一个函数,如

 [DllImport("User32.dll")]
 static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

然后在你的课堂上调用它。

请参阅PInvoke