我有一个问题,需要获取进程的特定PID,但是这个进程是隐藏的,不会在任务管理器/PowerShell中显示,完全隐藏。
到目前为止,我只有这个进程的主窗口句柄,问题是,如何获取它的PID。
我想要做的是读取这个进程的内存并编辑它,但是没有PID我估计无法做到(因为我需要获取它在内存中的基地址)。
所以,如果有人对我有任何解决方法或建议,那就太好了。
P.S:这个进程不会在Process.GetProcesses()
中显示。
谢谢!
您可以使用以下的 Windows API:
[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
你传入 HWND 并使用输出参数来返回 PID。
你可以在 MSDN 上这里阅读更多关于此函数的内容。
你需要使用 P/invoke 调用 Windows API。
在你的类中声明一个函数,例如:
[DllImport("User32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
然后在你的类中调用它。
请参见PInvoke。