首页 > 解决方案 > 获取我点击的窗口的 HWND

问题描述

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

我没有使窗口透明的问题,但我无法获得窗口的 hwnd。

当我使用此功能时,程序只是崩溃(没有错误被打印到控制台)。

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

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

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

标签: c++winapihwnd

解决方案


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

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


推荐阅读