Почему GetWindowThreadProcessId несколько раз возвращает 0? - PullRequest
2 голосов
/ 29 апреля 2011

Я внедряю .NET SpyLib в целевое адресное пространство, используя удаленный вызов.Мне нужно отправить сообщение тому потоку окна, который создал этот удаленный процесс через GetWindowThreadProcessId.

. Я работаю в Windows 7. К сожалению, в большинстве случаев он возвращает 0.Иногда он дает соответствующий идентификатор потока (после перезапуска Windows).

Почему я получаю это странное поведение с GetWindowThreadProcessId?

1 Ответ

3 голосов
/ 29 апреля 2011

В документации MSDN для GetWindowThreadProcessId есть раздел контента сообщества, в котором DDeBen уже ответил на ваши вопросы за два года до того, как вы даже задали свой вопрос.:)

GetWindowThreadProcessId возвращает 0, а переменная, на которую указывает lpdwProcessId, не модифицируется, если дескриптор hWnd недопустим.GetLastError () возвращает 87 (ERROR_INVALID_PARAMETER).

В будущем, возможно, будет полезно помнить, что GetLastError() часто является функцией, к которой вам нужно обращаться в Win32 API, когда у вас возникают состояния сбояне уверен в.MSDN обычно дает ссылку на него, но даже если это не так, это не помешает проверить это. Однако , учтите, что в управляемом коде GetLastError() требуется специальная обработка , иначе вы получите ложные результаты, которые приведут вас в замешательство.

...