获取我点击的窗口的HWND

时间:2019-05-29 12:29:58

标签: c++ winapi hwnd

我正在用c ++和winapi编写程序,您可以在其中单击一个按钮,然后选择一个窗口,它会更改该窗口的透明度。

我没有使窗口透明的问题,但是我无法获取窗口的主体。

当我使用此功能时,程序只会崩溃(没有错误输出到控制台)。

HWND getHWND(HWND self)
{
  HWND found = GetForegroundWindow();
  if(found == self || found == NULL)
    return getHWND(self);
  return found;
}

我尝试使用它,但是我不喜欢它,因为用户只有2秒的时间可以单击另一个窗口。 (我知道我可以使用更大的延迟,但是那样可能会延迟很多。所以这不是最佳选择)

HWND getHWND()
{
  Sleep(2000);
  return GetForegroundWindow();
}

1 个答案:

答案 0 :(得分:1)

不要轮询活动窗口,尤其不要使用递归函数。只需在单击窗口时让操作系统通知您即可。

当用户单击您的按钮时,您可以使用SetCapture()或通过SetWindowsHookEx()的鼠标钩将后续的鼠标单击定向到您的应用程序,即使他们单击的是其他人的窗口。当您检测到点击时,释放捕获/挂钩,然后使用WindowFromPoint()在点击位置获得HWND