Найти идентификатор процесса по дескриптору окна
У меня проблема с получением определенного 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.