我正在使用远程调用在目标地址空间中注入一个 .NET SpyLib。我需要向该窗口的线程发送一条消息,该线程通过GetWindowThreadProcessId
.
我正在使用 Windows 7。不幸的是,它大部分时间都返回 0。有时它会给出适当的线程 ID(在重新启动 Windows 之后)。
为什么我会出现这种奇怪的行为GetWindowThreadProcessId
?
我正在使用远程调用在目标地址空间中注入一个 .NET SpyLib。我需要向该窗口的线程发送一条消息,该线程通过GetWindowThreadProcessId
.
我正在使用 Windows 7。不幸的是,它大部分时间都返回 0。有时它会给出适当的线程 ID(在重新启动 Windows 之后)。
为什么我会出现这种奇怪的行为GetWindowThreadProcessId
?
GetWindowThreadProcessId的 MSDN 文档有一个社区内容部分,其中 DDeBen 甚至在您提出问题之前两年就已经回答了您的问题。:)
如果句柄 hWnd 无效,GetWindowThreadProcessId 返回 0 并且 lpdwProcessId 指向的变量不会被修改。GetLastError() 返回 87 (ERROR_INVALID_PARAMETER)。
将来,GetLastError()
当您遇到不确定的故障状态时,记住这通常是您需要在 Win32 API 中使用的函数可能会有所帮助。MSDN 一般会给出一个链接,但即使没有,也可以去看看。但是,请注意,在托管代码中GetLastError()
需要特殊处理,否则您最终会得到虚假结果,最终只会让您感到困惑。