我是用Qt建立一个截图程序。
问题是:如何获得鼠标光标下方的窗口句柄?
首先,我创建了一个全屏Qt widget来显示全屏截图。当我移动鼠标光标时,如何获得光标下的窗口句柄?当然,全屏Qt widget应该被忽略。
我尝试使用win32 API,如 WindowFromPointEx()
通过对窗口进行筛选,用 WS_EX_LAYERED
属性,但我不能将Qt widget设置为 但是,我不能将Qt widget设置为 WS_EX_LAYERED
属性。
我应该怎么做才能获得窗口的句柄?
在窗口上可以使用添加 WS_EX_TRANSPARENT 属性的QT全屏程序,这将使Qt widget忽略键盘或鼠标事件。
然后你可以使用 WindowFromPoint
来获取光标下的窗口句柄。
我在win32桌面程序上测试了一下,对我来说是可行的。因为我对QT的使用不熟悉,但一些类似的例子表明,这种方法是可行的。
参考 @J程序员的回答,
在Qt中使用下面的代码来完成这个任务。
包括头部。
#if _WIN32
#include <windows.h>
#endif
并在构造函数中加入以下代码。
#if _WIN32
HWND hwnd = (HWND) winId();
LONG styles = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, styles | WS_EX_TRANSPARENT);
#endif
或者参考 @mxttie 的回答,
setWindowFlags(windowFlags() | Qt::WindowTransparentForInput);