如何使用Qt自动捕捉窗口

问题描述 投票:0回答:1

我是用Qt建立一个截图程序。

问题是:如何获得鼠标光标下方的窗口句柄?

首先,我创建了一个全屏Qt widget来显示全屏截图。当我移动鼠标光标时,如何获得光标下的窗口句柄?当然,全屏Qt widget应该被忽略。

我尝试使用win32 API,如 WindowFromPointEx() 通过对窗口进行筛选,用 WS_EX_LAYERED 属性,但我不能将Qt widget设置为 但是,我不能将Qt widget设置为 WS_EX_LAYERED 属性。

我应该怎么做才能获得窗口的句柄?

c++ qt winapi screenshot handle
1个回答
0
投票

在窗口上可以使用添加 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);
© www.soinside.com 2019 - 2024. All rights reserved.