通过窗口句柄查找进程ID

39

我有一个问题,需要获取进程的特定PID,但是这个进程是隐藏的,不会在任务管理器/PowerShell中显示,完全隐藏。

到目前为止,我只有这个进程的主窗口句柄,问题是,如何获取它的PID。

我想要做的是读取这个进程的内存并编辑它,但是没有PID我估计无法做到(因为我需要获取它在内存中的基地址)。

所以,如果有人对我有任何解决方法或建议,那就太好了。

P.S:这个进程不会在Process.GetProcesses()中显示。

谢谢!


你需要进程 ID 吗? - Aravind
2个回答

59

您可以使用以下的 Windows API:

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

你传入 HWND 并使用输出参数来返回 PID。

你可以在 MSDN 上这里阅读更多关于此函数的内容。


10

你需要使用 P/invoke 调用 Windows API。

在你的类中声明一个函数,例如:

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

然后在你的类中调用它。

请参见PInvoke


这个实际上返回0,对我没用,但感谢您的回复。 - Amit Shadadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接