GetWindowThreadProcessID()根据上下文返回不同的结果

时间:2015-02-06 09:20:50

标签: c++ windows winapi cmd

我遇到的问题是GetWindowThreadProcessID()根据调用它的位置返回不同的结果,即使window参数相同。

发生这种情况的一种情况是我在命令提示符(cmd.exe)中运行Shell Hook。该窗口由" cmd.exe"创建。但是shell钩子正在" conhost.exe":

中运行
LRESULT CALLBACK ShellCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
  if (nCode == HSHELL_WINDOWCREATED)
  {
    DWORD tid = GetWindowThreadProcessID((HWND)wParam, NULL);
    // tid will be a thread of conhost.exe
  }
}

如果我从任何其他程序调用相同的GetWindowThreadProcessID()函数,给出相同的Window句柄,我会得到cmd.exe进程的线程ID。

如果我用Spy ++检查有问题的窗口,我会获得" cmd.exe"的线程ID和进程ID。 - 结果与从任何其他应用程序运行GetWindowThreadProcessID()一致。

GetWindowThreadProcessID()函数是否应该返回相同的线程ID,无论它从哪个上下文调用?有没有办法知道代码是否遇到这种情况,其中返回的线程ID是托管进程?

谢谢!

0 个答案:

没有答案