Найти идентификатор процесса с помощью дескриптора окна

У меня проблема с получением определенного PID процесса, проблема с этим процессом в том, что он скрытый процесс, который не отображается в диспетчере задач /powershell, полностью скрыт.

то, что я сделал далеко, является главным дескриптором окна этого процесса, вопрос в том, как я могу получить pid этого.

то, что я пытаюсь сделать, - это прочитать память этого процесса и отредактировать его, но не могу сделать этого без PID, я думаю (поскольку мне нужно получить его базовый адрес в памяти).

Итак, если у кого-то есть обходное решение или что-то для меня, это будет здорово.

P.S: этот процесс не отображается в Process.GetProcesses().

ти!

Ответы

Ответ 1

Вы можете использовать следующий Windows API:

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

Вы передаете HWND и используете параметр out для возврата PID.

Вы можете прочитать больше об этой функции здесь на MSDN.

Ответ 2

Вам нужно будет использовать P/invoke с Windows API.

Объявите функцию в своем классе, например

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

а затем вызовите его в своем классе.

См. PInvoke.