【问题标题】:Get HWND of a window i clicked on获取我点击的窗口的 HWND
【发布时间】:2019-05-29 12:29:57
【问题描述】:

我正在使用 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();
}

【问题讨论】:

  • 恭喜,你有一个堆栈溢出。只需使用简单的while 循环,而不是让你的函数递归。
  • 谢谢,这样效率更高。
  • 您正在单击由其他应用程序创建的窗口,并且有自己的进程正在等待前台窗口更改?

标签: c++ winapi hwnd


【解决方案1】:

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

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

【讨论】:

  • 我正在使用 HWND 句柄,并且我成功获取了特定窗口的句柄,但是当我尝试显示该窗口时,只出现黑屏。你能告诉我可能是什么问题以及如何解决这个问题。
猜你喜欢
  • 2013-07-13
  • 2013-01-17
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 2011-08-14
  • 1970-01-01
  • 2011-01-17
相关资源
最近更新 更多