为什么GetWindowThreadProcessId有时会返回0?

时间:2011-04-29 04:38:21

标签: .net c++ c#-4.0 code-injection spy

我使用远程调用在目标地址空间中注入.NET SpyLib。我需要向该窗口的线程发送一条消息,该线程通过GetWindowThreadProcessId创建该远程进程。

我正在使用Windows 7.不幸的是,它大部分时间都返回0。有时它会提供适当的线程ID(重启Windows后)。

为什么我会使用GetWindowThreadProcessId获得这种奇怪的行为?

1 个答案:

答案 0 :(得分:3)

GetWindowThreadProcessId的MSDN文档包含社区内容部分,其中DDeBen已经在您提出问题前两年回答了您的问题。 :)

  

GetWindowThreadProcessId返回0并且lpdwProcessId指向该变量   如果句柄hWnd无效,则不会修改。 GetLastError()返回87(ERROR_INVALID_PARAMETER)。

将来可能有助于记住GetLastError()通常是当您遇到不确定的失败状态时需要在Win32 API中使用的功能。 MSDN通常会给它一个链接,但即使它没有,也可以查看它。 ,请注意托管代码GetLastError()需要special treatment,否则您最终会出现虚假结果,最终会让您感到困惑。