Найти идентификатор процесса по дескриптору окна

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

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

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

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

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

ти!

2 ответа

Решение

Вы можете использовать следующий 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

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

Объявите функцию в вашем классе как

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

и затем назовите это в своем классе.

Смотрите PInvoke.

Другие вопросы по тегам