c++ - 获取我点击的窗口的 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();
}
解决方案
不要轮询活动窗口,特别是不要使用递归函数。只需让操作系统在单击窗口时通知您。
当用户单击您的按钮时,您可以使用SetCapture()
或鼠标钩子通过SetWindowsHookEx()
,将随后的鼠标单击定向到您的应用程序,即使他们正在单击其他人的窗口。当您检测到点击时,释放捕获/挂钩,然后使用WindowFromPoint()
获取HWND
点击位置。
推荐阅读
- javascript - 更改选择列表中的选项时如何停止所有 YouTube 视频
- binary - 在 Prolog 中从十六进制转换为二进制
- c++ - 使用alarm()实现进程超时
- java - 如果@ApplicationScope,CDI(焊接3.0.3.Final)不调用@PostConstruct
- amazon-neptune - 暂停 Neptune 服务?
- javascript - 从函数内重新分配全局变量
- ngx-leaflet - 如何设置 maxBoundsViscosity 选项?
- vb.net - 试图让表单有一个彩虹选项但不会工作
- html - 仅在空间限制需要时才灵活,并且不要分配不需要的空间
- android - 单击回收器内的按钮时,另一个按钮响应