我正在用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();
}
答案 0 :(得分:1)
不要轮询活动窗口,尤其不要使用递归函数。只需在单击窗口时让操作系统通知您即可。
当用户单击您的按钮时,您可以使用SetCapture()
或通过SetWindowsHookEx()
的鼠标钩将后续的鼠标单击定向到您的应用程序,即使他们单击的是其他人的窗口。当您检测到点击时,释放捕获/挂钩,然后使用WindowFromPoint()
在点击位置获得HWND
。